Compare commits

...

583 Commits

Author SHA1 Message Date
184290aaf4 Release: 2.14.1 65 2025-05-08 23:51:59 +08:00
14b16f3a78 feat: NavUI l10n 2025-05-08 23:35:21 +08:00
b2ec1e93a8 refactor: update Hive package to hive_ce across multiple files 2025-05-08 23:22:35 +08:00
cb35c400f9 feat: add listSortReverse option to ToolsLogAnalyze provider 2025-05-08 23:16:27 +08:00
3c061f995c feat: 42kit Nav Support network config 2025-05-08 22:44:22 +08:00
03c941c970 feat: 42kit Nav
feat: Animation Optimization
2025-05-04 14:07:56 +08:00
a2de310d84 fix: subWindow close 2025-05-04 10:46:31 +08:00
85bc6e487b feat: Disable game launch tools when not in zh_CN
fix: https://github.com/StarCitizenToolBox/app/issues/82
2025-05-04 10:07:07 +08:00
033e2824a4 feat: restore .lock 2025-05-04 09:55:28 +08:00
3b940ead08 fix: https://github.com/StarCitizenToolBox/app/issues/81 2025-05-04 09:45:45 +08:00
xkeyC
01f16201a9
Merge pull request #83 from everland-3769/main
更新 README_zh-TW.md 內容
2025-05-04 09:27:19 +08:00
everland.3769
251fe08139
Update README_zh-TW.md 2025-05-03 00:26:53 +08:00
everland.3769
88f9a6eccc
Update README_zh-TW.md 2025-05-01 22:06:00 +08:00
everland.3769
404b0ec958
Update README_zh-TW.md 2025-05-01 22:02:05 +08:00
xkeyC
fc59eb3879
Update README.md 2025-04-27 10:02:57 +08:00
xkeyC
fef65f6c2a
Merge pull request #80 from StarCitizenToolBox/dependabot/pub/go_router-15.0.0
build(deps): bump go_router from 14.8.1 to 15.0.0
2025-04-21 09:53:13 +08:00
dependabot[bot]
5728ed8379
build(deps): bump go_router from 14.8.1 to 15.0.0
Bumps [go_router](https://github.com/flutter/packages/tree/main/packages) from 14.8.1 to 15.0.0.
- [Release notes](https://github.com/flutter/packages/releases)
- [Commits](https://github.com/flutter/packages/commits/go_router-v15.0.0/packages)

---
updated-dependencies:
- dependency-name: go_router
  dependency-version: 15.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 00:56:53 +00:00
xkeyC
368bf04a9a
Merge pull request #79 from StarCitizenToolBox/dependabot/pub/file_picker-10.0.0
build(deps): bump file_picker from 9.2.3 to 10.0.0
2025-04-07 17:09:15 +08:00
xkeyC
48ab2e28b2
Merge pull request #78 from StarCitizenToolBox/dependabot/pub/protobuf-4.0.0
build(deps): bump protobuf from 3.1.0 to 4.0.0
2025-04-07 17:09:02 +08:00
dependabot[bot]
1343ac650f
build(deps): bump file_picker from 9.2.3 to 10.0.0
Bumps [file_picker](https://github.com/miguelpruivo/flutter_file_picker) from 9.2.3 to 10.0.0.
- [Release notes](https://github.com/miguelpruivo/flutter_file_picker/releases)
- [Changelog](https://github.com/miguelpruivo/flutter_file_picker/blob/master/CHANGELOG.md)
- [Commits](https://github.com/miguelpruivo/flutter_file_picker/commits)

---
updated-dependencies:
- dependency-name: file_picker
  dependency-version: 10.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 00:57:13 +00:00
dependabot[bot]
16dab8236b
build(deps): bump protobuf from 3.1.0 to 4.0.0
Bumps [protobuf](https://github.com/google/protobuf.dart) from 3.1.0 to 4.0.0.
- [Release notes](https://github.com/google/protobuf.dart/releases)
- [Commits](https://github.com/google/protobuf.dart/compare/protobuf-v3.1.0...protobuf-v4.0.0)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 00:57:07 +00:00
72f3cbd2d7 chore: update app version to 2.14.0 and version code to 64 2025-04-06 02:39:49 +08:00
a75a580b2d feat: enhance log analyzer to include vehicle destruction details 2025-04-06 02:37:23 +08:00
320ce177b9 feat: Russian language support 2025-04-06 02:12:55 +08:00
a6de0364c1 fix: ToolsLogAnalyze _getLogLineDateTime time 2025-04-06 02:12:55 +08:00
xkeyC
5b8314411b
Update README.md 2025-04-06 01:51:51 +08:00
ac72bcb554 feat: l10n update 2025-04-06 01:36:39 +08:00
71844945f2 feat: update log analyzer localization 2025-04-06 00:23:42 +08:00
fdc4060ac0 feat: log 分析器 2025-04-06 00:00:35 +08:00
8dd7ef53a1 fix: homeUI performance 2025-04-05 16:44:00 +08:00
c02c98a19e bump: hickory_resolver 0.25 2025-04-05 14:34:56 +08:00
xkeyC
4b875b7898
feat: update ci 2025-03-26 09:22:08 +08:00
xkeyC
ac959a9faa
Merge pull request #76 from StarCitizenToolBox/dependabot/cargo/rust/windows-0.61.1
build(deps): update windows requirement from 0.60.0 to 0.61.1 in /rust
2025-03-25 09:29:30 +08:00
xkeyC
26e4908101
Merge pull request #77 from StarCitizenToolBox/dependabot/cargo/rust/hickory-resolver-0.25
build(deps): update hickory-resolver requirement from 0.24 to 0.25 in /rust
2025-03-25 09:29:21 +08:00
dependabot[bot]
41b66ca33f
build(deps): update hickory-resolver requirement in /rust
Updates the requirements on [hickory-resolver](https://github.com/hickory-dns/hickory-dns) to permit the latest version.
- [Release notes](https://github.com/hickory-dns/hickory-dns/releases)
- [Changelog](https://github.com/hickory-dns/hickory-dns/blob/main/OLD-CHANGELOG.md)
- [Commits](https://github.com/hickory-dns/hickory-dns/compare/v0.24.0...v0.25.1)

---
updated-dependencies:
- dependency-name: hickory-resolver
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 00:24:45 +00:00
dependabot[bot]
bea907b817
build(deps): update windows requirement from 0.60.0 to 0.61.1 in /rust
Updates the requirements on [windows](https://github.com/microsoft/windows-rs) to permit the latest version.
- [Release notes](https://github.com/microsoft/windows-rs/releases)
- [Commits](https://github.com/microsoft/windows-rs/commits)

---
updated-dependencies:
- dependency-name: windows
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 00:24:34 +00:00
f5f3e4753c feat: desktop_multi_window Support 2025-03-16 17:14:45 +08:00
b18024a8ce bump: frb 2025-03-16 15:51:53 +08:00
b830b2b863 feat: performance r_DepthOfField support 2025-03-15 13:42:14 +08:00
xkeyC
cb77b69fa1
Merge pull request #75 from StarCitizenToolBox/dependabot/pub/re_editor-0.7.0
build(deps): bump re_editor from 0.6.0 to 0.7.0
2025-03-10 09:12:18 +08:00
dependabot[bot]
722b0693fd
build(deps): bump re_editor from 0.6.0 to 0.7.0
Bumps [re_editor](https://github.com/reqable/re-editor) from 0.6.0 to 0.7.0.
- [Changelog](https://github.com/reqable/re-editor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/reqable/re-editor/commits)

---
updated-dependencies:
- dependency-name: re_editor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 00:57:10 +00:00
xkeyC
6a90930bca
Merge pull request #74 from StarCitizenToolBox/dependabot/pub/extended_image-10.0.0
build(deps): bump extended_image from 9.1.0 to 10.0.0
2025-03-03 14:58:03 +08:00
dependabot[bot]
d747294662
build(deps): bump extended_image from 9.1.0 to 10.0.0
Bumps [extended_image](https://github.com/fluttercandies/extended_image) from 9.1.0 to 10.0.0.
- [Release notes](https://github.com/fluttercandies/extended_image/releases)
- [Changelog](https://github.com/fluttercandies/extended_image/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fluttercandies/extended_image/commits)

---
updated-dependencies:
- dependency-name: extended_image
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 00:52:22 +00:00
ebc469f3c1 fix: MSE version 2025-03-01 14:03:55 +08:00
6a8614406c Release: 2.13.5 63 2025-03-01 13:52:04 +08:00
dd8325e78b fix: Donation sort 2025-03-01 13:47:36 +08:00
721ba6a3c2 feat: Donation page 2025-03-01 13:42:30 +08:00
d65eb82ece feat: p4k 分流使提示使用外部浏览器打开 2025-03-01 11:39:34 +08:00
a902bf82a0 feat: remove JetBrains 2025-02-27 21:25:04 +08:00
b091022799 bump: deps 2025-02-27 21:14:56 +08:00
0afa8c0386 fix: web login 2025-02-27 20:59:41 +08:00
xkeyC
53e28d7272
Merge pull request #72 from StarCitizenToolBox/dependabot/cargo/rust/windows-0.60.0
build(deps): update windows requirement from 0.59.0 to 0.60.0 in /rust
2025-02-24 11:59:10 +08:00
xkeyC
d2f21661b8
Merge pull request #73 from StarCitizenToolBox/dependabot/pub/flutter_hooks-0.21.2
build(deps): bump flutter_hooks from 0.20.5 to 0.21.2
2025-02-24 11:58:55 +08:00
dependabot[bot]
580498a71a
build(deps): bump flutter_hooks from 0.20.5 to 0.21.2
Bumps [flutter_hooks](https://github.com/rrousselGit/flutter_hooks/tree/master/packages) from 0.20.5 to 0.21.2.
- [Commits](https://github.com/rrousselGit/flutter_hooks/commits/flutter_hooks-v0.21.2/packages)

---
updated-dependencies:
- dependency-name: flutter_hooks
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 00:41:54 +00:00
dependabot[bot]
69ee1bcc9e
build(deps): update windows requirement from 0.59.0 to 0.60.0 in /rust
Updates the requirements on [windows](https://github.com/microsoft/windows-rs) to permit the latest version.
- [Release notes](https://github.com/microsoft/windows-rs/releases)
- [Commits](https://github.com/microsoft/windows-rs/compare/0.59.0...0.60.0)

---
updated-dependencies:
- dependency-name: windows
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 00:40:58 +00:00
xkeyC
258405bcf5
Merge pull request #71 from StarCitizenToolBox/dependabot/pub/file_picker-9.0.0
build(deps): bump file_picker from 8.3.7 to 9.0.0
2025-02-17 09:20:00 +08:00
xkeyC
026933c25f
Merge pull request #70 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.8.0
build(deps): update flutter_rust_bridge requirement from =2.7.1 to =2.8.0 in /rust
2025-02-17 09:19:44 +08:00
dependabot[bot]
3b50830dab
build(deps): bump file_picker from 8.3.7 to 9.0.0
Bumps [file_picker](https://github.com/miguelpruivo/flutter_file_picker) from 8.3.7 to 9.0.0.
- [Release notes](https://github.com/miguelpruivo/flutter_file_picker/releases)
- [Changelog](https://github.com/miguelpruivo/flutter_file_picker/blob/master/CHANGELOG.md)
- [Commits](https://github.com/miguelpruivo/flutter_file_picker/commits)

---
updated-dependencies:
- dependency-name: file_picker
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 00:33:28 +00:00
dependabot[bot]
73ad2ad023
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.7.1...v2.8.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 00:08:32 +00:00
xkeyC
96aea196a6
fix: web login 2025-02-12 09:13:56 +08:00
xkeyC
f45e9849a0
Merge pull request #67 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.7.1
build(deps): update flutter_rust_bridge requirement from =2.7.0 to =2.7.1 in /rust
2025-02-04 16:37:39 +08:00
dependabot[bot]
b881e825a9
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.7.0...v2.7.1)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 00:19:40 +00:00
xkeyC
ac36c0c248
Merge pull request #66 from StarCitizenToolBox/dependabot/cargo/rust/windows-0.59.0
build(deps): update windows requirement from 0.58.0 to 0.59.0 in /rust
2025-01-13 09:14:30 +08:00
dependabot[bot]
8a679a0a66
build(deps): update windows requirement from 0.58.0 to 0.59.0 in /rust
Updates the requirements on [windows](https://github.com/microsoft/windows-rs) to permit the latest version.
- [Release notes](https://github.com/microsoft/windows-rs/releases)
- [Commits](https://github.com/microsoft/windows-rs/compare/0.58.0...0.59.0)

---
updated-dependencies:
- dependency-name: windows
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 00:27:22 +00:00
7be9bdf7c3 bugfix 2024-12-20 19:38:12 +08:00
cfa6f18a58 Release: 2.13.4 2024-12-20 19:29:16 +08:00
43d0d8454c feat: networkGameChannels Support 2024-12-20 19:17:30 +08:00
xkeyC
33f8866bb9
feat: Support 4.0_PREVIEW channel 2024-12-20 13:03:58 +08:00
a0d4d8b32d Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-12-14 13:48:49 +08:00
c112a920ec bump: flutter:3.27.0 rust:1.83.0 2024-12-14 13:48:24 +08:00
xkeyC
f415ee3469
rollback: workflows 2024-12-02 09:40:06 +08:00
xkeyC
fe4f330e5e
Merge pull request #64 from StarCitizenToolBox/revert-63-feat/golang
Revert "Feat/golang"
2024-12-02 09:09:58 +08:00
xkeyC
ddcd6d8f16
Revert "Feat/golang" 2024-11-29 18:25:42 +08:00
xkeyC
16e50e6d75
feat: rust2go-cli 2024-11-29 18:13:36 +08:00
xkeyC
3ce485df5c
Merge pull request #63 from StarCitizenToolBox/feat/golang
Feat/golang
2024-11-29 18:04:02 +08:00
xkeyC
61ee05f5b2
feat: ci golang support 2024-11-29 18:03:24 +08:00
8249d577be feat: golang support 2024-11-29 17:23:38 +08:00
xkeyC
5ebe438584
Merge pull request #62 from StarCitizenToolBox/dependabot/pub/ffigen-16.0.0
build(deps): bump ffigen from 15.0.0 to 16.0.0
2024-11-26 09:09:45 +08:00
dependabot[bot]
2a009a1a51
build(deps): bump ffigen from 15.0.0 to 16.0.0
Bumps [ffigen](https://github.com/dart-lang/native/tree/main/pkgs) from 15.0.0 to 16.0.0.
- [Release notes](https://github.com/dart-lang/native/releases)
- [Commits](https://github.com/dart-lang/native/commits/HEAD/pkgs)

---
updated-dependencies:
- dependency-name: ffigen
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 00:52:51 +00:00
4b70ec1914 bugfix 2024-11-23 22:45:25 +08:00
4c6a5f7565 fix: 翻译禁用换行符 2024-11-23 22:04:55 +08:00
82943020f7 Release: 2.13.2 60 2024-11-23 21:59:51 +08:00
4297b2f530 feat: 优化首字母大写 2024-11-23 21:59:00 +08:00
772f329407 feat: 弃用兔小巢 2024-11-23 21:55:23 +08:00
f8a846e706 feat: input_method_auto_translate 2024-11-23 21:51:36 +08:00
cd788b6fe5 bump: flutter_rust_bridge: 2.6.0 once_cell = "1.20" 2024-11-15 20:16:15 +08:00
xkeyC
9e4523c891
Merge pull request #61 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.6.0
build(deps): update flutter_rust_bridge requirement from =2.5.1 to =2.6.0 in /rust
2024-11-11 09:33:57 +08:00
dependabot[bot]
3dd68c7c87
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.5.1...v2.6.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 00:56:16 +00:00
a9a85607b0 Release: 2.13.1 2024-11-07 21:34:51 +08:00
11738da6a5 feat: l10n 2024-11-07 21:33:30 +08:00
9789b9e1a9 optimization 2024-11-07 20:16:08 +08:00
56208e1909 fix 2024-11-07 00:43:05 +08:00
472fdb08fb feat: web 输入支持 2024-11-07 00:34:11 +08:00
1681e2407b feat: 自定义文件,高级汉化 社区输入法支持 2024-11-06 20:15:49 +08:00
49cef9ed90 feat: 优化指引 2024-11-06 19:39:59 +08:00
9f7e0dad52 feat: CommunityInputMethod 2024-11-05 22:55:00 +08:00
281f6ee995 feat: CommunityInputMethod Install 2024-11-05 20:42:02 +08:00
8d07af2253 Release: 2.13.0 58 2024-11-03 18:33:47 +08:00
8a58719908 feat: Guide UI 2024-11-03 18:32:12 +08:00
0577b54f9c feat: l10n 2024-11-03 16:55:44 +08:00
3c59a2ca57 feat: InternalDNS switch 2024-11-03 16:42:39 +08:00
0c03050f5c feat: rust/rsHttp Option with_custom_dns 2024-11-03 15:57:37 +08:00
7e1e96707c bump: flutter_riverpod: ^2.6.1 2024-11-03 15:41:51 +08:00
c6ced405ef bump: Flutter 3.24.4 && Rust 1.82.0 2024-11-03 15:33:52 +08:00
xkeyC
11a54501c0
Merge pull request #59 from StarCitizenToolBox/dependabot/pub/flutter_rust_bridge-2.5.1
build(deps): bump flutter_rust_bridge from 2.5.0 to 2.5.1
2024-10-28 09:16:15 +08:00
xkeyC
74527178b7
Merge pull request #58 from StarCitizenToolBox/dependabot/pub/ffigen-15.0.0
build(deps): bump ffigen from 14.0.1 to 15.0.0
2024-10-28 09:15:45 +08:00
xkeyC
1dec934d6a
Merge pull request #57 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.5.1
build(deps): update flutter_rust_bridge requirement from =2.5.0 to =2.5.1 in /rust
2024-10-28 09:15:31 +08:00
xkeyC
94ffcb8118
Merge pull request #60 from StarCitizenToolBox/dependabot/pub/re_editor-0.5.0
build(deps): bump re_editor from 0.4.0 to 0.5.0
2024-10-28 09:14:32 +08:00
dependabot[bot]
e9708827df
build(deps): bump re_editor from 0.4.0 to 0.5.0
Bumps [re_editor](https://github.com/reqable/re-editor) from 0.4.0 to 0.5.0.
- [Changelog](https://github.com/reqable/re-editor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/reqable/re-editor/commits)

---
updated-dependencies:
- dependency-name: re_editor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 00:51:02 +00:00
dependabot[bot]
75d9fc7e5e
build(deps): bump flutter_rust_bridge from 2.5.0 to 2.5.1
Bumps [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) from 2.5.0 to 2.5.1.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.5.0...v2.5.1)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 00:50:59 +00:00
dependabot[bot]
eb1ee49085
build(deps): bump ffigen from 14.0.1 to 15.0.0
Bumps [ffigen](https://github.com/dart-lang/native/tree/main/pkgs) from 14.0.1 to 15.0.0.
- [Release notes](https://github.com/dart-lang/native/releases)
- [Commits](https://github.com/dart-lang/native/commits/HEAD/pkgs)

---
updated-dependencies:
- dependency-name: ffigen
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 00:50:52 +00:00
dependabot[bot]
5fb0df38b0
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.5.0...v2.5.1)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 00:30:44 +00:00
xkeyC
5cb9e931c7
Merge pull request #56 from StarCitizenToolBox/dependabot/pub/extended_image-9.0.4
build(deps): bump extended_image from 8.3.1 to 9.0.4
2024-10-21 09:45:58 +08:00
dependabot[bot]
57c6dd7fd1
build(deps): bump extended_image from 8.3.1 to 9.0.4
Bumps [extended_image](https://github.com/fluttercandies/extended_image) from 8.3.1 to 9.0.4.
- [Release notes](https://github.com/fluttercandies/extended_image/releases)
- [Changelog](https://github.com/fluttercandies/extended_image/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fluttercandies/extended_image/commits)

---
updated-dependencies:
- dependency-name: extended_image
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 00:50:31 +00:00
xkeyC
f969a084ae
Merge pull request #55 from StarCitizenToolBox/dependabot/pub/device_info_plus-11.0.0
build(deps): bump device_info_plus from 10.1.2 to 11.0.0
2024-10-14 09:11:01 +08:00
xkeyC
15773e6639
Merge pull request #54 from StarCitizenToolBox/dependabot/pub/flutter_rust_bridge-2.5.0
build(deps): bump flutter_rust_bridge from 2.4.0 to 2.5.0
2024-10-14 09:10:42 +08:00
xkeyC
c9114bb202
Merge pull request #53 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.5.0
build(deps): update flutter_rust_bridge requirement from =2.4.0 to =2.5.0 in /rust
2024-10-14 09:10:22 +08:00
dependabot[bot]
9713c62c46
build(deps): bump device_info_plus from 10.1.2 to 11.0.0
Bumps [device_info_plus](https://github.com/fluttercommunity/plus_plugins/tree/main/packages/device_info_plus) from 10.1.2 to 11.0.0.
- [Release notes](https://github.com/fluttercommunity/plus_plugins/releases)
- [Commits](https://github.com/fluttercommunity/plus_plugins/commits/device_info_plus-v11.0.0/packages/device_info_plus)

---
updated-dependencies:
- dependency-name: device_info_plus
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 01:07:08 +00:00
dependabot[bot]
5822dec69e
build(deps): bump flutter_rust_bridge from 2.4.0 to 2.5.0
Bumps [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) from 2.4.0 to 2.5.0.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.4.0...v2.5.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 01:07:02 +00:00
dependabot[bot]
ae920fca8f
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.4.0...v2.5.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 01:04:18 +00:00
xkeyC
bbca12e3a2
Merge pull request #52 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42Kit Translate
2024-10-08 14:03:13 +08:00
Anonymous
e31902d67e Translated using Weblate (English)
Currently translated at 99.7% (481 of 482 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/en/
2024-10-08 05:16:36 +00:00
e37acfdaed Release: 2.12.3 2024-10-07 12:58:50 +08:00
f81aae82ab feat: 更新着色器清理描述 2024-10-07 12:56:50 +08:00
72cdf77a74 feat: 汉化缓存支持清理启动器汉化缓存 2024-10-07 12:48:31 +08:00
6df16058ac fix: Aria2cModel logs 2024-10-07 12:40:41 +08:00
abfd31e001 feat: 使用内置浏览器打开教程 2024-10-07 12:36:39 +08:00
53087306a8 feat: p4k 分流增加版本信息 2024-10-07 12:29:57 +08:00
197053380d Merge remote-tracking branch 'origin/main' 2024-10-07 11:25:14 +08:00
495dfd2c94 bugfix: https://github.com/StarCitizenToolBox/StarCitizenBoxBrowserEx/issues/2 2024-10-07 11:24:56 +08:00
xkeyC
968a2a957b
Merge pull request #51 from StarCitizenToolBox/dependabot/pub/flutter_lints-5.0.0
build(deps): bump flutter_lints from 4.0.0 to 5.0.0
2024-09-30 09:13:20 +08:00
dependabot[bot]
3757c27939
build(deps): bump flutter_lints from 4.0.0 to 5.0.0
Bumps [flutter_lints](https://github.com/flutter/packages/tree/main/packages) from 4.0.0 to 5.0.0.
- [Release notes](https://github.com/flutter/packages/releases)
- [Commits](https://github.com/flutter/packages/commits/flutter_lints-v5.0.0/packages)

---
updated-dependencies:
- dependency-name: flutter_lints
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 00:49:29 +00:00
2a940b9312 Release: 2.12.2 56 2024-09-23 21:10:32 +08:00
2f17dba2fa bump: flutter_rust_bridge 2024-09-23 21:09:04 +08:00
xkeyC
6e1e50f34e
Merge pull request #50 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42Kit Translate
2024-09-23 21:05:46 +08:00
dependabot[bot]
bfc0c5d3d7 build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.3.0...v2.4.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 13:04:19 +00:00
8c6c980bb8 ui optimization 2024-09-23 21:03:45 +08:00
6a6360540b bugfix 2024-09-23 20:35:19 +08:00
d905f8c13e Release: 2.12.1 55 2024-09-11 20:55:57 +08:00
0d70cb711a Release: 2.12.1 55 2024-09-11 20:50:32 +08:00
f283f4db43 feat: hotfix channel support 2024-09-11 20:50:01 +08:00
3ce635075c feat: 启动游戏时不再隐藏浏览器弹窗,以解决长时间加载的问题 2024-09-11 20:48:25 +08:00
ffd32ec7ff fix: game path scan 2024-09-11 20:41:14 +08:00
xkeyC
ba102bbab8
Merge pull request #48 from StarCitizenToolBox/dependabot/pub/ffigen-14.0.0
build(deps): bump ffigen from 13.0.0 to 14.0.0
2024-09-09 09:04:00 +08:00
xkeyC
79d56dd267
Merge pull request #47 from StarCitizenToolBox/dependabot/pub/re_editor-0.4.0
build(deps): bump re_editor from 0.3.1 to 0.4.0
2024-09-09 09:03:53 +08:00
dependabot[bot]
134b4f0983
build(deps): bump ffigen from 13.0.0 to 14.0.0
Bumps [ffigen](https://github.com/dart-lang/native/tree/main/pkgs) from 13.0.0 to 14.0.0.
- [Release notes](https://github.com/dart-lang/native/releases)
- [Commits](https://github.com/dart-lang/native/commits/HEAD/pkgs)

---
updated-dependencies:
- dependency-name: ffigen
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 00:45:08 +00:00
dependabot[bot]
6090d772fe
build(deps): bump re_editor from 0.3.1 to 0.4.0
Bumps [re_editor](https://github.com/reqable/re-editor) from 0.3.1 to 0.4.0.
- [Changelog](https://github.com/reqable/re-editor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/reqable/re-editor/commits/v0.4.0)

---
updated-dependencies:
- dependency-name: re_editor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 00:45:04 +00:00
3da318ec71 fix: l10n 2024-09-04 13:57:38 +08:00
f453821e15 bump: flutter_rust_bridge 2.3.0 2024-09-04 12:22:13 +08:00
xkeyC
de955f1226
Merge pull request #46 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.3.0
build(deps): update flutter_rust_bridge requirement from =2.2.0 to =2.3.0 in /rust
2024-08-22 09:34:22 +08:00
dependabot[bot]
636f5cdb53
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.2.0...v2.3.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 01:02:26 +00:00
xkeyC
340e38a8e7
Merge pull request #44 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.2.0
build(deps): update flutter_rust_bridge requirement from =2.1.0 to =2.2.0 in /rust
2024-08-12 09:00:26 +08:00
xkeyC
f0a3b527cf
Merge pull request #45 from StarCitizenToolBox/dependabot/pub/window_manager-0.4.0
build(deps): bump window_manager from 0.3.9 to 0.4.0
2024-08-12 09:00:05 +08:00
dependabot[bot]
d1c7f2b72b
build(deps): bump window_manager from 0.3.9 to 0.4.0
Bumps [window_manager](https://github.com/leanflutter/window_manager) from 0.3.9 to 0.4.0.
- [Release notes](https://github.com/leanflutter/window_manager/releases)
- [Changelog](https://github.com/leanflutter/window_manager/blob/main/CHANGELOG.md)
- [Commits](https://github.com/leanflutter/window_manager/compare/v0.3.9...v0.4.0)

---
updated-dependencies:
- dependency-name: window_manager
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 00:25:46 +00:00
dependabot[bot]
e5d83aea04
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 00:13:16 +00:00
cf7230f980 Release: 2.12.0 2024-07-21 17:12:06 +08:00
44ec80cc73 feat: Vulkan Crash 扫描
close: https://github.com/StarCitizenToolBox/app/issues/43
2024-07-21 17:07:38 +08:00
53e44db817 一键诊断:将修改中文用户名指引 更换为 新建一个英文管理员账户,修改操作太困难且风险较高
close https://github.com/StarCitizenToolBox/app/issues/41
2024-07-21 16:58:02 +08:00
41f10e408f bump: pub 2024-07-21 16:57:09 +08:00
bc25c92bba Deprecate: sctoolbox.sccsgo.com 2024-07-13 10:09:24 +08:00
8fee9dba05 feat: Optimize UX 2024-07-07 17:49:15 +08:00
6ff0b7c902 merge: Deprecated 2024-07-07 17:17:09 +08:00
79239de308 Merge remote-tracking branch 'origin/main' 2024-07-07 16:50:34 +08:00
7def53649a bump: flutter_rust_bridge rust/windows 2024-07-07 16:50:23 +08:00
4dd47d02eb Rlease: 2.11.3 53 2024-06-28 23:32:57 +08:00
4d36b5d7c1 Release: 2.11.3 2024-06-28 23:10:09 +08:00
bbd1aa91ff bump: flutter_rust_bridge 2024-06-23 21:35:56 +08:00
26e28799ff fix: remove bilibili RSS 2024-06-22 19:40:51 +08:00
83adfbc303 fix: page switch 2024-06-22 15:48:59 +08:00
a9980208d3 bump: App to 2.11.2 2024-06-17 20:16:56 +08:00
f88f73d3a8 bump: flutter_rust_bridge 40 2024-06-17 19:16:09 +08:00
xkeyC
ae14a26f08
Merge pull request #40 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.40
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.39 to =2.0.0-dev.40 in /rust
2024-06-17 09:14:58 +08:00
dependabot[bot]
c6720baa5e
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.39...v2.0.0-dev.40)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-17 01:14:10 +00:00
xkeyC
d1716bd873
Merge pull request #39 from StarCitizenToolBox/dependabot/pub/flutter_rust_bridge-2.0.0-dev.40
build(deps): bump flutter_rust_bridge from 2.0.0-dev.39 to 2.0.0-dev.40
2024-06-17 09:03:12 +08:00
dependabot[bot]
853b9034c0
build(deps): bump flutter_rust_bridge from 2.0.0-dev.39 to 2.0.0-dev.40
Bumps [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) from 2.0.0-dev.39 to 2.0.0-dev.40.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.39...v2.0.0-dev.40)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-17 01:01:33 +00:00
c7d70084d8 fix: SCLoggerHelper 2024-06-16 12:11:19 +08:00
2e69068209 fix: HomeUI performance game not install 2024-06-16 12:06:46 +08:00
38a1ddab72 fix: Window Size 2024-06-16 12:03:37 +08:00
6265acb2ad feat: Cross-platform logic updates 2024-06-16 11:52:25 +08:00
cd812cac66 feat: init macos linux support 2024-06-16 10:36:38 +08:00
5cf8d5a0a0 fix https://github.com/StarCitizenToolBox/app/issues/34 : LocalizationUIModel checkLangUpdate 2024-06-16 09:35:07 +08:00
a94f49eca2 fix https://github.com/StarCitizenToolBox/app/issues/33 : getRSILauncherPath 2024-06-16 09:22:07 +08:00
62289b3b30 fix https://github.com/StarCitizenToolBox/app/issues/27 : unp4k missing runtime 2024-06-16 09:14:51 +08:00
536daa176a bump: flutter_rust_bridge 2.0.0-dev.39 2024-06-16 09:07:22 +08:00
cb69211a78 bump: flutter_rust_bridge 2.0.0-dev.38 2024-06-11 19:55:35 +08:00
xkeyC
222b9e8fef
Merge pull request #36 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.38
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.37 to =2.0.0-dev.38 in /rust
2024-06-11 19:41:15 +08:00
xkeyC
8913fe167f
Merge pull request #37 from StarCitizenToolBox/dependabot/cargo/rust/windows-0.57.0
build(deps): update windows requirement from 0.56.0 to 0.57.0 in /rust
2024-06-11 19:41:07 +08:00
xkeyC
8b78c6d052
Merge pull request #38 from StarCitizenToolBox/dependabot/pub/flutter_rust_bridge-2.0.0-dev.38
build(deps): bump flutter_rust_bridge from 2.0.0-dev.37 to 2.0.0-dev.38
2024-06-11 19:40:57 +08:00
dependabot[bot]
f413d924ad
build(deps): bump flutter_rust_bridge from 2.0.0-dev.37 to 2.0.0-dev.38
Bumps [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) from 2.0.0-dev.37 to 2.0.0-dev.38.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.37...v2.0.0-dev.38)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 01:22:52 +00:00
dependabot[bot]
ebbce1ed57
build(deps): update windows requirement from 0.56.0 to 0.57.0 in /rust
Updates the requirements on [windows](https://github.com/microsoft/windows-rs) to permit the latest version.
- [Release notes](https://github.com/microsoft/windows-rs/releases)
- [Commits](https://github.com/microsoft/windows-rs/compare/0.56.0...0.57.0)

---
updated-dependencies:
- dependency-name: windows
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 00:47:19 +00:00
dependabot[bot]
dc5392258f
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.37...v2.0.0-dev.38)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 00:46:42 +00:00
b530742634 feat: RsiLauncherEnhance add zh_TW Support 2024-06-04 20:29:55 +08:00
20227fbd4b bump: flutter_rust_bridge 2.0.0-dev.37 2024-06-04 20:29:31 +08:00
xkeyC
56d4988cfc
Merge pull request #35 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.37
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.36 to =2.0.0-dev.37 in /rust
2024-06-04 20:17:59 +08:00
dependabot[bot]
47c6f2205a
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.36...v2.0.0-dev.37)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 00:58:27 +00:00
003a6d1cb1 bump: flutter_rust_bridge: ^2.0.0-dev.36 2024-05-29 21:52:04 +08:00
xkeyC
f7dfe108c9
Merge pull request #32 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.36
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.35 to =2.0.0-dev.36 in /rust
2024-05-29 21:32:39 +08:00
dependabot[bot]
638f8760b7
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.35...v2.0.0-dev.36)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-27 01:10:09 +00:00
3f7ee82d45 bump: dependencies 2024-05-22 20:05:50 +08:00
xkeyC
ad70e21e2c
Merge pull request #30 from StarCitizenToolBox/dependabot/pub/flutter_rust_bridge-2.0.0-dev.34
build(deps): bump flutter_rust_bridge from 2.0.0-dev.33 to 2.0.0-dev.34
2024-05-22 19:50:32 +08:00
xkeyC
976d3474f9
Merge pull request #31 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.34
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.33 to =2.0.0-dev.34 in /rust
2024-05-22 19:50:13 +08:00
dependabot[bot]
5f0b11d6ef
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.33...v2.0.0-dev.34)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-20 01:11:33 +00:00
dependabot[bot]
a114f052b1
build(deps): bump flutter_rust_bridge from 2.0.0-dev.33 to 2.0.0-dev.34
Bumps [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) from 2.0.0-dev.33 to 2.0.0-dev.34.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.33...v2.0.0-dev.34)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-20 00:45:49 +00:00
32b7f2a9fc bump: Flutter 3.22.0 2024-05-14 15:35:48 +08:00
858479f28e bump: Flutter 3.22.0 2024-05-14 15:34:36 +08:00
xkeyC
c90bc803b5
Merge pull request #28 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42Kit Translate
2024-05-09 14:47:31 +08:00
40dec20b89 Translated using Weblate (English)
Currently translated at 100.0% (480 of 480 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/en/
2024-05-09 06:46:26 +00:00
725277eef7 Release: 2.11.1 51 2024-05-08 17:04:15 +08:00
5eb0c6dda8 fix: LocalizationUIModel savePath.create 2024-05-08 12:21:43 +08:00
6f146ed84b fix: LocalizationUIModel downloadLocalizationFile wait flush 2024-05-08 10:50:52 +08:00
fb8ae2cb4f Release: 2.11.0 50 2024-05-07 21:11:23 +08:00
348704c669 feat: AnalyticsApi update 2024-05-07 21:08:16 +08:00
155c8a0564 feat: rm async-std , use futures 2024-05-07 20:20:08 +08:00
24313ab3b8 feat: fix debug crash 2024-05-07 20:16:03 +08:00
5a6ea3acad bump: flutter_rust_bridge 2024-05-06 22:48:50 +08:00
9ec541299b l10n: update README.md 2024-05-06 20:50:30 +08:00
9b40863169 l10n: update 2024-05-06 20:30:31 +08:00
60ceb84625 l10n: update 2024-05-06 20:29:32 +08:00
b287dfc627 Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-05-06 20:23:26 +08:00
6e823dea9f feat: RsiLauncherEnhanceDialogUI fold DownloaderBoost 2024-05-06 20:22:59 +08:00
34d1007e30 feat: UnP4kc fix missing runtime
close https://github.com/StarCitizenToolBox/app/issues/27
2024-05-06 20:21:35 +08:00
xkeyC
4dbcdf2e9f
feat: update README 2024-05-06 10:57:23 +08:00
xkeyC
c9f1bce9fd
feat: update README 2024-05-06 10:54:15 +08:00
xkeyC
1816b18637
Merge pull request #26 from everland-3769/main
README_zh-TW.md 翻譯更新
2024-05-06 10:41:42 +08:00
everland.3769
9b3dbfae6f
Update README_zh-TW.md 2024-05-06 09:44:33 +08:00
xkeyC
f1a424f98c
Merge pull request #25 from everland-3769/main
intl_zh_TW.arb 翻譯更新
2024-05-05 23:10:22 +08:00
澄清石灰水
c7190b5ec5
Update intl_zh_TW.arb 2024-05-05 23:07:08 +08:00
b965c6262f feat: AdvancedLocalizationUI Error Message 2024-05-05 21:50:18 +08:00
0920696444 fix 2024-05-05 21:28:53 +08:00
9af96a2061 l10n: 自定义汉化文件 2024-05-05 21:03:11 +08:00
2c744cc5bd feat: 安装自定义汉化文件 2024-05-05 20:58:58 +08:00
澄清石灰水
dffcf7adea
Update intl_zh_TW.arb 2024-05-05 19:48:57 +08:00
90f254b1d8 fix: string 2024-05-05 18:52:04 +08:00
xkeyC
f8390e0367
Merge pull request #24 from everland-3769/main
README.md 語言切換修正
2024-05-05 18:50:57 +08:00
澄清石灰水
3452d99de6
Merge branch 'StarCitizenToolBox:main' into main 2024-05-05 18:46:43 +08:00
澄清石灰水
d672c3c8a9
Update README_zh-TW.md 2024-05-05 18:43:34 +08:00
澄清石灰水
0c3b15ac7a
Update README.md 2024-05-05 18:43:22 +08:00
1ecd03813d fix: ui.json 2024-05-05 17:08:46 +08:00
3e5a258cf8 feat: Unp4kcState errorMessage 2024-05-05 16:47:42 +08:00
8d2b4983c0 l10n: Update 2024-05-05 16:34:38 +08:00
a8e88983e2 feat: move json file data to code 2024-05-05 15:06:02 +08:00
f392463a84 feat: 高级汉化 2024-05-05 14:59:07 +08:00
0bb0f7deb4 l10n:roll zh_TW 2024-05-05 11:06:54 +08:00
xkeyC
58e0406dd0
Merge pull request #23 from everland-3769/main
更新 intl_zh_TW.arb 與 README.md 內的翻譯與功能
2024-05-05 10:59:09 +08:00
澄清石灰水
817eab3604
Update README.md 2024-05-04 23:03:55 +08:00
澄清石灰水
a44b2a9316
Update README_zh-TW.md 2024-05-04 23:03:14 +08:00
澄清石灰水
af96c53658
Update README_zh-TW.md 2024-05-04 22:57:45 +08:00
澄清石灰水
0e76292882
Update README_zh-TW.md 2024-05-04 22:55:04 +08:00
澄清石灰水
69005a2133
Update README.md 2024-05-04 22:50:51 +08:00
澄清石灰水
b2c0bd91a0
更新 intl_zh_TW.arb 內的大量內容
改善了大量未正確翻譯的字串
2024-05-04 22:38:43 +08:00
9a875fc5a5 feat: AdvancedLocalization Init 2024-05-03 22:35:31 +08:00
4e506a11a0 feat: new LocalizationDialogUI 2024-05-03 14:39:46 +08:00
edc65e68c9 feat: Remove custom localization 2024-05-03 13:13:44 +08:00
dd14a34285 feat: delete logs when inDays > 7 2024-05-03 13:12:11 +08:00
d05aa0d5f8 feat: RSI 启动器增强使用须知 2024-05-01 15:30:17 +08:00
37b584d85b fix: Unp4kCModel 2024-05-01 15:28:32 +08:00
4ebd7b70dc feat: Français in RsiLauncherEnhanceDialogUI 2024-05-01 14:49:45 +08:00
6019cc96fd feat: check RSI Launcher running 2024-05-01 14:30:47 +08:00
f6907f233a feat: RSILauncherEnhance 2024-05-01 13:48:37 +08:00
5d0c3f5fd4 feat: rust/ deprecate lazy_static , use once_cell 2024-04-30 20:04:42 +08:00
3dbf993099 update: rust/ rename to win32_api.rs
fix: setForegroundWindow
2024-04-28 22:28:48 +08:00
288df33b39 update: rust/windows features 2024-04-28 21:58:17 +08:00
c5549cf4c8 feat: Change App Name, add rust/set_foreground_window 2024-04-28 21:50:36 +08:00
e9c494096f bump: dependencies 2024-04-28 20:31:12 +08:00
a7e1d8d0b7 feat: unp4kTools extract_memory 2024-04-27 16:23:57 +08:00
9bdccc3bbf feat: unp4kc use TemporaryDirectory 2024-04-27 14:40:01 +08:00
b5cde95661 Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-04-27 14:25:42 +08:00
0f349bee33 feat: use notify-rust, remove dart/windows_ui 2024-04-27 14:25:11 +08:00
xkeyC
1117d2f12f
bump: workflows 2024-04-27 12:53:12 +08:00
d2694a1e25 fix: 因 RSI 官网变更,移除自动填充功能 (不再支持) 2024-04-26 22:55:38 +08:00
2c71f3baba update: Unp4kCModel Duration.zero 2024-04-17 23:37:28 +08:00
a8e91d6332 update: Unp4kCModel 2024-04-17 23:09:28 +08:00
097b9d9bce feat: Optimize RsProcess 2024-04-17 21:40:39 +08:00
603ef46f10 feat: RsProcess 2024-04-16 22:34:50 +08:00
90ff0025d6 bump: flutter_rust_bridge 2.0.0-dev.32 2024-04-16 19:29:19 +08:00
90bb8e6611 feat: unp4kc 2024-04-14 19:52:42 +08:00
dd17ddc92a fix: LocalizationUIModel.checkLangUpdate 2024-04-12 20:09:16 +08:00
bfebeeb1d3 l10n: update 2024-04-12 20:06:06 +08:00
c0f0b54d82 Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-04-12 20:05:27 +08:00
6793511bcf feat: compatible RSI launcher 2.0 2024-04-12 20:05:07 +08:00
1ab785fbbc fix: open Dir 2024-04-12 20:02:00 +08:00
xkeyC
4d6a21d02a
Merge pull request #22 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42KIT Weblate
2024-04-12 08:08:24 +08:00
t6u
c7abe8ef24 Translated using Weblate (English)
Currently translated at 100.0% (366 of 366 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/en/
2024-04-11 23:07:16 +00:00
b8c4e05a32 fix: doctor_action_info_game_abnormal_exit info 2024-04-11 20:09:50 +08:00
e302d9e927 feat: 日本語 Support 2024-04-11 20:04:07 +08:00
df54a44e0e bump: flutter_rust_bridge: ^2.0.0-dev.31 2024-04-11 19:52:13 +08:00
xkeyC
cdbf4d7812
Merge pull request #20 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.30
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.28 to =2.0.0-dev.30 in /rust
2024-04-11 19:31:50 +08:00
xkeyC
ded821b29c
Merge pull request #21 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42KIT Weblate
2024-04-10 10:15:42 +08:00
cfdxkk
af00549928 Translated using Weblate (Japanese)
Currently translated at 16.9% (62 of 366 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/ja/
2024-04-08 15:30:59 +00:00
dependabot[bot]
a4b97dc7ab
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.28...v2.0.0-dev.30)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-08 00:53:04 +00:00
38a0c173ef Release: 2.10.10 2024-03-31 16:01:30 +08:00
e5e16838eb fix: open logs 2024-03-31 15:54:07 +08:00
39a2a28dd1 feat: Optimize game startup 2024-03-31 15:43:59 +08:00
c32de21fa1 fix: Swiper 2024-03-31 15:05:06 +08:00
494ae6468d feat: User Agreement and Privacy Policy Dialog 2024-03-31 14:50:27 +08:00
ef715d569f fix: miss TECH-PREVIEW 2024-03-31 13:30:56 +08:00
bb48504016 fix: LocalizationUIModel _cfgFile dir 2024-03-30 15:07:32 +08:00
4d2c0c20d5 Release: V2.10.9 2024-03-26 20:05:01 +08:00
c05814c1fc bump:device_info_plus file_picker flutter_tilt 2024-03-25 20:31:00 +08:00
e1533ae154 fix:showConfirmDialogs 2024-03-23 18:23:16 +08:00
010a184921 fix:dPrint 2024-03-23 17:54:32 +08:00
5e67211685 fix:powershell auto select 2024-03-23 17:53:42 +08:00
3c174dcb49 fix:HostsBoosterDialogUI _readHostsState 2024-03-21 20:16:43 +08:00
6c0f30778f fix:SystemHelper.openDir 2024-03-21 20:14:37 +08:00
8622a5068b feat: merge to reqwest:0.12.0
remove hyper
2024-03-21 20:04:42 +08:00
6c8c7a0273 l10n: gen 2024-03-21 19:51:39 +08:00
75140cc63c Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-03-21 19:50:56 +08:00
xkeyC
93137d0146
Merge pull request #18 from everland-3769/patch-4
Update intl_zh_TW.arb
2024-03-21 19:48:08 +08:00
澄清石灰水
9f6519e4ee
Update intl_zh_TW.arb
修改了部分為翻譯完成的文本,並將能效核心改為 E-Core
2024-03-21 14:25:56 +08:00
xkeyC
04eb0658d4
Merge pull request #17 from everland-3769/patch-3
Update intl_zh_TW.arb
2024-03-18 12:20:42 +08:00
澄清石灰水
95492f0694
Update intl_zh_TW.arb 2024-03-18 12:15:42 +08:00
xkeyC
acbf2763bf
Merge pull request #16 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42KIT Weblate
2024-03-18 08:13:38 +08:00
t6u
b5ec6905f2 Translated using Weblate (English)
Currently translated at 100.0% (364 of 364 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/en/
2024-03-18 00:12:49 +00:00
xkeyC
d0ae2ddb6b
Merge pull request #15 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42KIT Weblate
2024-03-17 21:42:22 +08:00
b1a4a584ac Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (364 of 364 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/zh_Hant/
2024-03-17 13:41:37 +00:00
xkeyC
59ec9ef6a7
Update README.md 2024-03-17 21:02:44 +08:00
44f74004eb fix: home game location scan 2024-03-17 20:47:06 +08:00
xkeyC
7afdcad078
Feat: Github Action Nightly Build (#14)
* add workflow
2024-03-17 20:20:49 +08:00
946b465973 l10n: add Japanese 2024-03-17 19:33:34 +08:00
ff07b07cc6 feat: LocalizationUIModel keep selectLang 2024-03-17 17:19:37 +08:00
afa77e0c38 l10: fix for tools_ui.dart 2024-03-17 17:07:25 +08:00
17588dfab8 l10: update common & Lang settings 2024-03-17 16:54:29 +08:00
xkeyC
9d97dfc786
l10n: README.md rename 2024-03-17 14:49:31 +08:00
xkeyC
ba3725be7c
Merge pull request #13 from everland-3769/patch-2
Create README (zh-TW).md
2024-03-17 14:48:27 +08:00
澄清石灰水
477ab4b789
Create README (zh-TW).md 2024-03-17 14:40:32 +08:00
e335ed292f l10: update zh_TW 2024-03-17 14:17:18 +08:00
xkeyC
588761823a
l10n: Merge pull request #12 from kerbcat-bot/weblate-sctoolbox-CoreApp
Translations update from 42KIT Weblate
2024-03-17 14:13:54 +08:00
澄清石灰水
d19b01fa95 Translated using Weblate (Chinese (Traditional))
Currently translated at 99.7% (334 of 335 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/zh_Hant/
2024-03-17 06:12:35 +00:00
2c27dd6822 Translated using Weblate (English)
Currently translated at 100.0% (335 of 335 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/en/
2024-03-17 06:12:35 +00:00
xkeyC
2387dde8a2
l10n: Merge pull request #11 from everland-3769/patch-1
Update intl_zh_TW.arb
2024-03-17 14:12:30 +08:00
澄清石灰水
86542866d1
Update intl_zh_TW.arb 2024-03-17 14:07:00 +08:00
ead05516aa l10: update 2024-03-17 12:45:03 +08:00
xkeyC
d382484739
Merge pull request #10 from kerbcat-bot/weblate-sctoolbox-CoreApp
l10n: Translations update from 42KIT Weblate
2024-03-17 11:38:37 +08:00
1a5a417151 Translated using Weblate (Chinese (Traditional))
Currently translated at 99.6% (332 of 333 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/zh_Hant/
2024-03-16 12:11:18 +00:00
be580e895c Translated using Weblate (English)
Currently translated at 99.3% (331 of 333 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/en/
2024-03-16 12:11:18 +00:00
e5671e657e Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (333 of 333 strings)

Translation: SCToolBox/CoreApp
Translate-URL: http://translate.42kit.com/projects/sctoolbox/CoreApp/zh_Hans/
2024-03-16 12:11:18 +00:00
2d178bfa5e fix: performance_action_clear_shaders 2024-03-16 20:11:06 +08:00
085c1e02c3 feat: zh_TW 繁化姬 快速模板 2024-03-16 19:44:26 +08:00
4982aa289e feat: add l10 target zh_TW 2024-03-16 19:15:30 +08:00
a6b69553d5 feat: app full l10n support 2024-03-16 19:13:49 +08:00
66738abf60 fix: l10n 2024-03-16 17:35:52 +08:00
be3aed4060 fix: performance_action_clear_shaders 2024-03-16 17:26:46 +08:00
7882159139 fix: rename args 2024-03-15 00:03:04 +08:00
b2c13a8a6f feat: 多语言 初步引入 2024-03-15 00:01:06 +08:00
eae02be2af feat: 多语言 基础支持 2024-03-14 23:22:56 +08:00
a84852d4f0 feat: 多语言提取器 2024-03-14 21:50:06 +08:00
8426570ced feat: merge to fluent_ui: ^4.8.6 2024-03-14 19:54:37 +08:00
4a4eb9f701 release: 2.10.8 Beta 43 MSE 2024-03-13 23:00:28 +08:00
d619831370 fix:独立用户 -> 累计用户 2024-03-13 22:54:46 +08:00
35ce760b8d release: 2.10.8 Beta 43 2024-03-13 22:42:56 +08:00
b5fa9fdff1 feat: 使用 ffigen with rust bridge 获得更好的性能,以及移除 web 支持 2024-03-13 22:41:28 +08:00
7e8177bdf5 fix: UI 细节调整 2024-03-13 22:40:28 +08:00
b7ccf80d2a fix: 汉化更新提示 2024-03-13 22:40:09 +08:00
73413caca0 feat: 改用 rustls-tls-webpki-roots 以尝试解决某些网络问题 2024-03-12 22:14:13 +08:00
cb924f267c feat: 新增 Hosts 写入功能,通过预设的干净 DNS 获取ip 并 写入 hosts 文件 2024-03-12 22:08:46 +08:00
26b58324c4 feat: [RustHTTP] DNS Host Map 2024-03-12 20:07:06 +08:00
51393317b1 fix: AboutUI 2024-03-11 20:48:56 +08:00
0b1b0ec5c6 upgrade:flutter_rust_bridge: 2.0.0-dev.28 2024-03-11 20:46:59 +08:00
xkeyC
ef5f7c5e2e
Merge pull request #9 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.28
build(deps): update flutter_rust_bridge requirement from =2.0.0-dev.27 to =2.0.0-dev.28 in /rust
2024-03-11 20:43:57 +08:00
b950d5dc8a feat:关于页面 FlowNumberText 2024-03-11 20:43:16 +08:00
dependabot[bot]
4caf3bd1ab
build(deps): update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.27...v2.0.0-dev.28)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 00:37:44 +00:00
1c73217ea7 feat:重新实现汉化更新 2024-03-10 21:25:03 +08:00
d54a84698c fix:mke lint happy 2024-03-10 20:34:38 +08:00
f7a02269d0 fix:移除能效核实验性功能提示 2024-03-10 20:32:13 +08:00
430455c2da upgrade: flutter_rust_bridge@ 2.0.0-dev.27. 2024-03-10 20:28:24 +08:00
xkeyC
00e5f7545b
Merge pull request #8 from StarCitizenToolBox/feat/full_riverpod
Feat: full riverpod
2024-03-10 19:54:22 +08:00
07ae0d1636 feat:riverpod 迁移 AboutUI 2024-03-10 19:52:41 +08:00
46e5dcf01b feat:riverpod 迁移 SettingsUIModel 2024-03-10 19:44:53 +08:00
c4637a8063 feat:riverpod 迁移 ToolsUI 2024-03-10 18:00:46 +08:00
1318b67be8 feat:riverpod 迁移 PartyRoomUI 2024-03-10 17:25:26 +08:00
cf6ab55dd0 feat:riverpod 迁移 HomeDownloaderUI 2024-03-10 17:23:28 +08:00
01f1533ab0 feat:riverpod 迁移 HomePerformanceUI 2024-03-10 16:56:32 +08:00
5c45e23d23 feat:riverpod 迁移 LocalizationUIModel 2024-03-10 16:26:04 +08:00
6dfb6b3cb0 fix:HomeUIModel 2024-03-10 14:21:36 +08:00
c290e832a0 feat:riverpod 迁移 HomeGameDoctorUI 2024-03-10 14:18:30 +08:00
2aa4fb6c09 feat:riverpod 迁移 HomeGameLoginDialogUI 2024-03-10 13:25:13 +08:00
7b195271af feat:riverpod 迁移 HomeMdContentDialogUI 2024-03-10 12:54:34 +08:00
c9bd9ed677 feat:riverpod 迁移 HomeCountdown 2024-03-10 12:17:43 +08:00
a6507a6910 feat:riverpod 迁移 Web 汉化 2024-03-10 12:07:30 +08:00
e70fca4899 feat:riverpod 迁移 HomeUI 2024-03-09 21:53:37 +08:00
248b416277 feat:riverpod 迁移 Aria2TaskNumWidget 2024-03-09 20:37:25 +08:00
6353591935 feat:riverpod 迁移 Index UI 2024-03-09 20:22:44 +08:00
348d072f6e feat:riverpod 迁移 BinaryModuleConf 2024-03-09 19:42:57 +08:00
8e37ebece5 feat:riverpod 迁移 2024-03-07 23:01:45 +08:00
c6b69c4e08 MES: 2.10.7.0 42 2024-03-01 21:06:47 +08:00
e90bce2c1c 增加查看log的选项 2024-03-01 21:05:05 +08:00
e7016ccfe2 output log to files 2024-03-01 20:59:43 +08:00
6e909eb41b upgrade to 2.10.6 Beta 2024-02-26 20:45:02 +08:00
cfc3a48da2 upgrade to flutter_rust_bridge: 2.0.0-dev.25 2024-02-26 19:34:37 +08:00
xkeyC
f1da5cc253
Merge pull request #5 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.25
Update flutter_rust_bridge requirement from =2.0.0-dev.24 to =2.0.0-dev.25 in /rust
2024-02-26 19:31:18 +08:00
dependabot[bot]
7fc0f6cba6
Update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.24...v2.0.0-dev.25)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 01:14:56 +00:00
83571ce722 saveSession when cancelTask 2024-02-25 11:35:49 +08:00
c69fbc0876 class rename 2024-02-25 11:33:16 +08:00
2b1a9d67a0 win32job 改为 assign_process 2024-02-25 11:10:21 +08:00
3c0c80abd2 子进程切换到 rust win32job 实现 2024-02-25 10:30:20 +08:00
238e255489 修复重启应用后的限速设置 2024-02-24 21:49:59 +08:00
5b13996591 fix 下载百分比 2024-02-24 21:02:06 +08:00
a6664f750d 分流下载提示 2024-02-24 18:33:13 +08:00
acccd40570 随机端口号,随机密码 2024-02-24 18:30:44 +08:00
3d92508819 从网络获取下载地址 2024-02-24 18:18:35 +08:00
a6a086fea3 增加模块状态指示器 2024-02-24 17:55:03 +08:00
ca2f584f20 aria2c 按需加载 2024-02-24 17:41:44 +08:00
27b5d9259f 限速器 2024-02-24 17:10:40 +08:00
3b025e7b3e 下载管理器 操作更新 2024-02-24 14:57:52 +08:00
e0ca3377ac 下载管理器 2024-02-24 14:42:33 +08:00
65ffd6a92f 改用 aria2 实现下载器 2024-02-23 00:07:48 +08:00
46808e96c5 移除 rust 多线程下载器 2024-02-22 20:38:57 +08:00
02101db99d BinaryModule support 2024-02-22 20:26:13 +08:00
eafd249847 log按钮搬家 2024-02-22 19:34:15 +08:00
f640574190 2.10.5+1 2024-02-18 20:32:55 +08:00
b77f5a6495 dns fix 2024-02-18 20:32:17 +08:00
1afbe200c8 rn .gitmodules 2024-02-17 12:02:22 +08:00
fda951d8f9 upgrade 2024-02-17 12:00:57 +08:00
e64c27ae40 upgrade 2.10.5 40 2024-02-17 12:00:22 +08:00
440c8af73c 交互暗示 优化 2024-02-17 11:35:50 +08:00
4f3dc05667 资讯流增加 logo 2024-02-17 11:30:01 +08:00
c661efb599 fix code 2024-02-17 01:06:57 +08:00
b8edc42666 fix 2024-02-17 01:01:04 +08:00
b2f8aa4ac4 fix 2024-02-17 00:53:04 +08:00
9b1e2d1d4b 一键启动:增加闪退诊断信息 2024-02-17 00:48:54 +08:00
3ef5df8a80 一键诊断:支持闪退诊断 2024-02-17 00:35:21 +08:00
27640ec6b7 将诊断功能从首页拆分至独立页面 2024-02-16 23:32:16 +08:00
066bf11275 fix 2024-02-16 22:47:06 +08:00
04e19a7311 dns fix 2024-02-15 21:24:39 +08:00
dae1e8f039 Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-02-15 20:52:58 +08:00
xkeyC
618d66468f
Update README.md 2024-02-15 20:52:41 +08:00
xkeyC
911545e2bc
Update README.md 2024-02-15 20:51:57 +08:00
02a0737565 Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-02-15 20:45:47 +08:00
xkeyC
3d8202c1d6
Merge pull request #3 from StarCitizenToolBox/dependabot/cargo/rust/flutter_rust_bridge-eq-2.0.0-dev.24
Update flutter_rust_bridge requirement from =2.0.0-dev.23 to =2.0.0-dev.24 in /rust
2024-02-15 20:45:32 +08:00
dependabot[bot]
f69b1e74c0
Update flutter_rust_bridge requirement in /rust
Updates the requirements on [flutter_rust_bridge](https://github.com/fzyzcjy/flutter_rust_bridge) to permit the latest version.
- [Release notes](https://github.com/fzyzcjy/flutter_rust_bridge/releases)
- [Changelog](https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fzyzcjy/flutter_rust_bridge/compare/v2.0.0-dev.23...v2.0.0-dev.24)

---
updated-dependencies:
- dependency-name: flutter_rust_bridge
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 01:13:16 +00:00
3674742c27 fix 2024-02-07 23:26:14 +08:00
2f036e4d13 upgrade 2024-02-07 23:14:02 +08:00
0b475a50a0 update RSHttp 2024-02-07 22:46:18 +08:00
a0dceb27d9 更换 Dio -> RSHttp 2024-02-07 22:29:15 +08:00
9ee02e9312 使用 DNS 分流 2024-02-07 22:19:43 +08:00
95b4b8b947 update Rust 2024-02-07 20:38:16 +08:00
5fa62351f2 update RSHttp 2024-02-07 19:32:36 +08:00
7e1352c0be 改用 rust 实现的 http client 2024-02-07 00:20:06 +08:00
a3f6ecf8b6 update rust_builder 2024-02-06 20:35:52 +08:00
a6c9b46100 Upgrade to flutter_rust_bridge V2 2024-02-06 20:19:53 +08:00
55f5bac8d9 2.10.3 38 2024-02-03 12:49:07 +08:00
72bcaf02cd 支持备线切换 2024-02-03 12:28:15 +08:00
26bfa108a1 upgrade to 2.10.2 2024-01-30 22:32:44 +08:00
b1c46f1771 更新 深空救援群 链接 2024-01-30 22:28:37 +08:00
9e99e3919a 更新 深空救援群 链接 2024-01-30 22:27:07 +08:00
70437887b0 fix 性能优化 自定义 2024-01-30 21:59:34 +08:00
b3a1014964 https://github.com/StarCitizenToolBox/app/issues/1
https://github.com/StarCitizenToolBox/StarCitizenBoxBrowserEx/issues/1

RSI 汉化 跳过光谱
2024-01-30 21:53:32 +08:00
01ad2fb965 增加问卷链接 2024-01-30 21:45:51 +08:00
33e5e62ade update icon 2024-01-30 01:19:01 +08:00
bac822e189 fix 2024-01-30 01:18:28 +08:00
309f5160b4 https://github.com/StarCitizenToolBox/app/issues/1 增加一个工具站镜像的功能 2024-01-30 01:16:59 +08:00
6376c2d607 fix 2024-01-29 23:14:55 +08:00
52d178a609 https://github.com/StarCitizenToolBox/app/issues/1 开发版更新使用 cloudflare 分流 2024-01-29 23:14:20 +08:00
8159e9b70e https://github.com/StarCitizenToolBox/app/issues/1 分流下载:增加一种快速恢复卡住的下载的方法。 2024-01-29 22:36:04 +08:00
9ab6f6056c https://github.com/StarCitizenToolBox/app/issues/1 汉化页面增加反馈按钮 2024-01-29 21:58:59 +08:00
9ddce61b49 https://github.com/StarCitizenToolBox/app/issues/1 性能优化,新增q_ShaderPostProcess sys_maxFps,支持自定义配置 2024-01-29 21:52:33 +08:00
a442823bfe 游戏非正常退出时,增加弹窗提示 2024-01-29 21:22:20 +08:00
71880a6041 https://github.com/StarCitizenToolBox/app/issues/1 隐藏 RSS 刷新的错误提示。 2024-01-29 20:58:01 +08:00
3f7c399234 拆分 AppConf 2024-01-29 20:44:00 +08:00
a290062304 fix 2024-01-29 20:39:31 +08:00
78877482d6 upgrade corrosion 2024-01-29 20:38:24 +08:00
f58713109d Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2024-01-29 20:37:47 +08:00
9f63fc9fe4 [Party Room] 暂时搁置 2024-01-29 20:37:15 +08:00
xkeyC
ca376d0500
Create dependabot.yml 2024-01-29 14:42:01 +08:00
828785ced4 [Party Room] 加入房间功能 2024-01-14 20:47:15 +08:00
839125528b [Party Room] 创建,列表展示 2024-01-13 20:00:06 +08:00
fbdfd61c09 [Party Room] 创建房间 2024-01-13 17:29:41 +08:00
85f488c118 [Party Room] 房间索引 2024-01-13 13:54:32 +08:00
ab6e660ea0 [Party Room] 房间类型相关 2024-01-07 18:52:06 +08:00
7240878148 add Party Room Module 2024-01-07 14:57:49 +08:00
71eadd86f5 disable TextScaler 2023-12-13 22:53:03 +08:00
3c7fc711ad fix 2023-12-12 22:43:01 +08:00
7afcf3afc6 2.10.1 2023-12-12 20:28:55 +08:00
bc45da2013 追加更新:新的汉化插件地址 2023-12-12 20:26:57 +08:00
bbb6e89e65 追加更新:DPS网站 独立汉化 2023-12-12 20:25:36 +08:00
932bf6f894 upgrade to 2.10.1 36 2023-12-12 20:17:43 +08:00
cd5a657bd9 rm cert 2023-12-12 20:16:20 +08:00
9809829903 fix 创建快捷方式 微软版 2023-12-12 20:06:21 +08:00
790f801fe0 更新部分描述 2023-12-12 19:46:39 +08:00
bb82b711dc 更新描述中的应用名 2023-12-11 23:56:17 +08:00
a8ce60bd98 新增创建快捷方式的功能 2023-12-11 23:53:45 +08:00
c136b68922 新增摄影模式工具 2023-12-11 22:54:11 +08:00
41763e0f61 新增摄影模式工具 2023-12-11 22:48:49 +08:00
cda6240295 Merge branch 'main' of https://github.com/StarCitizenToolBox/app 2023-12-09 12:51:33 +08:00
1ed1af4453 联网失败时新增错误描述 2023-12-09 12:49:08 +08:00
xkeyC
dffcfb53f0
Update README.md 2023-12-06 23:31:00 +08:00
eee1bfdeb0 新增汉化更新提示
新增周期性汉化版本检查
2023-12-06 22:45:36 +08:00
39b357d223 更新汉化Api 2023-12-06 20:59:49 +08:00
3d7454613f 新增 汉化缓存清理 2023-12-06 20:49:14 +08:00
9c049e7ae5 bug fix 2023-12-05 21:42:54 +08:00
1decb4c8a3 迁移至自建服务 2023-12-05 21:26:46 +08:00
1e53bf3d1a 移除 grpc 2023-12-05 00:30:55 +08:00
e1d3ccc4a8 fix 2023-12-02 12:35:40 +08:00
a4d257ca3f fix 2023-12-02 12:35:02 +08:00
5f4af52ef2 grpc import 2023-12-02 12:26:17 +08:00
9f6f9b2dc4 fix 2023-12-01 20:36:15 +08:00
92f3a77c56 2.9.22 Beta 33 2023-11-30 2023-11-30 20:33:56 +08:00
b9d4cbef5e Ui fix 2023-11-30 20:28:03 +08:00
5786534480 2.9.21 Beta 2023-11-28 2023-11-28 23:14:00 +08:00
8a766a7fe2 2.9.21 Beta 2023-11-28 2023-11-28 23:13:32 +08:00
0d73bab4c7 ui fix 2023-11-28 23:12:08 +08:00
4d7f73ffc4 新增信息流 (接入 Anicat G佬 新闻组+) 2023-11-28 23:08:34 +08:00
4f6623a4cd 能效核心屏蔽功能应用到 RSI启动器,以让开发板使用此功能。 2023-11-28 20:04:15 +08:00
06c581cd80 dps 图标改为本地
home 结构微调
2023-11-28 19:28:50 +08:00
fa1ba878f5 upgrade to 2.9.20 2023-11-23 2023-11-23 22:31:47 +08:00
3f637f4aef 修复 Affinity 计算 2023-11-23 22:30:00 +08:00
e8a58a9c42 upgrade 2023-11-22 22:51:09 +08:00
c71eb30725 new logo 2023-11-22 20:13:55 +08:00
bc34493bab upgrade 2023-11-22 00:50:46 +08:00
f194dfc383 fix 2023-11-22 00:40:36 +08:00
ed12eaf875 fix 动态检测 2023-11-22 00:28:14 +08:00
3218d95c26 fix 2023-11-22 00:10:12 +08:00
27575a21c9 分流下载增加网页提示 2023-11-21 23:54:48 +08:00
9a9d5863ff FIX 2023-11-21 23:41:20 +08:00
74dc327bd6 新增自定义安装位置
新增根据现有安装位置推测其他版本位置
2023-11-21 23:36:26 +08:00
d8dbbc5fbd cpu Affinity 2023-11-21 21:25:59 +08:00
faec463478 update Cpu Affinity 2023-11-21 01:05:20 +08:00
5ecfc82506 增加在线反馈 2023-11-17 19:20:09 +08:00
6b82660738 update 2023-11-17 19:13:23 +08:00
a0d0d4bd82 upgrade corrosion 2023-11-16 21:16:01 +08:00
ed7dcdf926 upgrade to 2.9.10 2023-11-16 21:15:20 +08:00
6e6a7f3adb 移除 ccugame.app 相关代码 2023-11-16 21:13:21 +08:00
68aaa98515 update name 2023-11-16 20:59:11 +08:00
72bfb71f74 一键启动功能搬家提示 2023-11-16 20:53:27 +08:00
1d7d591a0d fix 2023-11-16 20:42:16 +08:00
7f8397d6c6 MSE Version ++ 2023-11-13 23:23:10 +08:00
b6f0728e2c 回滚动态UAC 2023-11-13 22:52:40 +08:00
2594f85f25 upgrade 2023-11-11 01:52:59 +08:00
1d05364d4d 2.9.13 Beta 2023-11-11 01:44:15 +08:00
1cb0c85e63 MSE检查更新功能 2023-11-11 01:41:06 +08:00
7c833fe3ac ee 2023-11-11 01:18:30 +08:00
6494c7971e 移动颜色配置到 AppGlobalUIModel 2023-11-10 22:56:55 +08:00
2d70fca71b 多版本号 2023-11-10 22:51:48 +08:00
6dbf3f99f1 清理自动填充二次确认 2023-11-10 22:20:23 +08:00
a0a21dc8a6 优化提示文本 2023-11-10 22:14:42 +08:00
70f5b301c3 增加权限提示 2023-11-10 22:10:27 +08:00
52591f4899 动态 UAC 2023-11-10 21:58:29 +08:00
4776aa5647 Update README.md 2023-11-09 11:38:06 +00:00
68c3d7ebc8 Merge remote-tracking branch 'origin/main' 2023-11-08 20:48:55 +08:00
e0d0d16ed0 bug fix 2023-11-08 20:48:48 +08:00
2951fe27fd Update README.md 2023-11-08 02:39:21 +00:00
77256b3a27 Update README.md 2023-11-08 02:22:05 +00:00
024310cd5b fix 2023-11-07 22:53:24 +08:00
8d79c1bce2 为账户安全,游戏登入功能将只支持微软商店版 2023-11-07 22:49:09 +08:00
7257e34653 Powershell 自动探测 2023-11-07 22:35:25 +08:00
183864054e 优化自动登录 2023-11-07 20:47:28 +08:00
c92078b931 fix 2023-11-06 23:56:09 +08:00
d035f309c2 fix 2023-11-06 23:38:55 +08:00
f8ceb1713b upgrade 2023-11-06 23:17:56 +08:00
403840ef12 使用新的方法申请UAC 2023-11-06 22:23:06 +08:00
1f68ad8ded 新增 windows hello 登录 2023-11-06 00:29:25 +08:00
e5958bb8d2 mini fix 2023-11-05 16:36:47 +08:00
21f58fc4bb v2.9.9 2023-11-05 16:22:43 +08:00
5bc7024fe7 新增 Rust 实现的多线程下载器,优化下载可靠性 2023-11-05 15:56:48 +08:00
3409a8597f update 2023-11-04 22:56:03 +08:00
0786d30300 引入 Rust \\TODO 使用 rust 实现的下载器 2023-11-04 22:55:48 +08:00
0b2c1c8f92 2.9.8 Beta 24 2023-11-03 23:08:58 +08:00
c2fc30ac09 增加节日倒计时 2023-11-03 23:03:19 +08:00
0388b5fb1d 新增倒计时 2023-11-03 00:18:45 +08:00
d77f556890 2.9.7 Beta 23 2023-11-01 19:40:50 +08:00
c0af7fdf7e Merge remote-tracking branch 'origin/main' 2023-10-31 00:27:54 +08:00
0fdf56fd7d tilt import 2023-10-31 00:27:46 +08:00
8918f40229 update Privacy.md 2023-10-30 13:31:53 +00:00
cebe74d972 add Analytics 2023-10-30 20:39:31 +08:00
1d017e5ef2 fix 2023-10-29 18:25:31 +08:00
2497448357 2.9.6+1 Beta 22 2023-10-29 18:10:00 +08:00
7c6584fda5 更新网站汉化地址 2023-10-29 18:02:56 +08:00
b4a39dea55 fix 2023-10-29 17:11:18 +08:00
8db2766c19 fix 2023-10-29 17:10:39 +08:00
3a63f1acfa update auto login 2023-10-29 11:04:22 +08:00
ef6abbb525 fix 2023-10-28 21:03:28 +08:00
447c314164 fix EPTU 2023-10-28 20:57:38 +08:00
6edda9bdc4 fix 2023-10-28 20:37:45 +08:00
8e4fb2fd18 upgrade 2023-10-28 20:09:26 +08:00
14012b0c2d Merge remote-tracking branch 'origin/main' 2023-10-28 19:58:31 +08:00
5606dd0b87 update 2023-10-28 19:58:26 +08:00
d63d07a1a9 fix 2023-10-28 19:15:13 +08:00
e465bc913d launch game 2023-10-28 18:19:18 +08:00
0640761299 优化登录功能 2023-10-28 13:22:53 +08:00
6153bcf9c0 初始化登录功能 2023-10-28 13:00:10 +08:00
2b2fe59e5b Update README.md 2023-10-20 08:19:16 +00:00
59412db924 2.9.5+2 Beta 20 2023-10-19 19:44:36 +08:00
a6605cf2da 修复服务器状态图标 2023-10-19 19:44:23 +08:00
314 changed files with 60614 additions and 4125 deletions

3
.fvmrc Normal file
View File

@ -0,0 +1,3 @@
{
"flutter": "stable"
}

16
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,16 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: "pub" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
- package-ecosystem: "cargo" # See documentation for possible values
directory: "/rust" # Location of package manifests
schedule:
interval: "weekly"

71
.github/workflows/windows_nightly.yml vendored Normal file
View File

@ -0,0 +1,71 @@
name: "Windows Nightly Build"
on:
schedule:
- cron: "0 0 * * *" # every day at midnight
workflow_dispatch:
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up MSbuild
uses: microsoft/setup-msbuild@v2
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
cache: true
cache-key: 'flutter-:os:-:channel:-:version:-:arch:-:hash:' # optional, change this to force refresh cache
cache-path: '${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:' # optional, change this to specify the cache path
- run: flutter --version
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Rust Version
run: |
rustup --version
cargo --version
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: "rust"
cache-all-crates: true
- name: Set up LLVM
uses: KyleMayes/install-llvm-action@v2
with:
version: "18"
- name: Flutter pub get
run: flutter pub get
- name: Flutter build runner
run: dart run build_runner build --delete-conflicting-outputs
- name: Rust cargo update
run: cargo update
working-directory: rust
- name: Set up Flutter rust bridge
run: |
cargo install cargo-expand
cargo install 'flutter_rust_bridge_codegen@^2.0.0-dev.0'
- name: Flutter Rust bridge generate
run: flutter_rust_bridge_codegen generate
- name: flutter gen l10n
run: |
flutter pub global activate intl_utils
flutter pub global run intl_utils:generate
- name: Flutter build Windows
run: flutter build windows -v
- name: Archive build
uses: actions/upload-artifact@v4
with:
name: windows
path: build/windows/x64/runner/Release

7
.gitignore vendored
View File

@ -42,4 +42,9 @@ app.*.map.json
/android/app/debug /android/app/debug
/android/app/profile /android/app/profile
/android/app/release /android/app/release
/pubspec.lock /rust/target/
/lib/generated/l10n_temp.json
/lib/generated/l10n_temp_fix.json
# FVM Version Cache
.fvm/

0
.gitmodules vendored Normal file
View File

View File

@ -1,11 +1,11 @@
# This file tracks properties of this Flutter project. # This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc. # Used by Flutter tool to assess capabilities and perform upgrades etc.
# #
# This file should be version controlled. # This file should be version controlled and should not be manually edited.
version: version:
revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3"
channel: stable channel: "stable"
project_type: app project_type: app
@ -13,11 +13,26 @@ project_type: app
migration: migration:
platforms: platforms:
- platform: root - platform: root
create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: android
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: ios
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: linux
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: macos
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: web
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: windows - platform: windows
create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
# User provided section # User provided section

65
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,65 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "StarCitizenToolBox",
"request": "launch",
"type": "dart",
},
{
"name": "StarCitizenToolBox (MSE mode)",
"request": "launch",
"type": "dart",
"args": [
"--dart-define=MSE=true"
]
},
{
"name": "StarCitizenToolBox (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "StarCitizenToolBox (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release"
},
{
"name": "rust_builder",
"cwd": "rust_builder",
"request": "launch",
"type": "dart"
},
{
"name": "rust_builder (profile mode)",
"cwd": "rust_builder",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "rust_builder (release mode)",
"cwd": "rust_builder",
"request": "launch",
"type": "dart",
"flutterMode": "release"
},
{
"name": "sct_dev_tools",
"cwd": "packages\\sct_dev_tools",
"request": "launch",
"type": "dart"
},
{
"name": "build_tool",
"cwd": "rust_builder\\cargokit\\build_tool",
"request": "launch",
"type": "dart"
}
]
}

2
Privacy.md Normal file
View File

@ -0,0 +1,2 @@
### StarCitizenToolBox is open source software and does not collect any of your private information.
### 星际公民盒子 是开源软件,且不收集您的任何隐私信息。

View File

@ -1,14 +1,30 @@
# 星际公民盒子 # SC汉化盒子 / SCToolBox
该工具为 星际公民玩家 提供 一键诊断,官网及工具网站汉化,游戏汉化,游戏性能优化 等功能,给您带来更愉快的游戏体验。 [简体中文](https://github.com/StarCitizenToolBox/app/blob/main/README.md) / [繁體中文](https://github.com/StarCitizenToolBox/app/blob/main/README_zh-TW.md) / [English](https://github.com/StarCitizenToolBox/app/blob/main/README_en.md)
### 安装 该工具为 星际公民玩家 提供 一键诊断,官网及工具网站汉化,游戏汉化,游戏性能优化 等功能,致力于带来更愉快的游戏体验。
1. 前往 [Release](https://jihulab.com/StarCitizenCN_Community/StarCitizenDoctor/-/releases) 页面,下载最新安装包 Setup.exe
2. 双击安装,建议使用默认安装位置 点击安装即可。 [![Windows Nightly Build](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml/badge.svg)](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml) [![Translate](http://translate.42kit.com/widget/sctoolbox/CoreApp/svg-badge.svg)](http://translate.42kit.com/engage/sctoolbox/)
[![](https://get.microsoft.com/images/zh-cn%20dark.svg)](https://apps.microsoft.com/detail/9NF3SWFWNKL1?launch=true)
### ✨ 功能
- 本地化管理:一键安装社区汉化,切换语言
- 一键诊断:来自上百名小白鼠用户的日志文件,可处理星际公民常见问题
- 网站汉化:为星际公民官网,星际公民工具网站提供人工精翻(感谢星际公民中文百科项目),亦提供[浏览器拓展Github](https://github.com/xkeyC/StarCitizenBoxBrowserEx )。
- 性能优化:为星际公民游戏增加更加细致的性能参数控制,可用于优化性能,亦可用于获得更好的画质。
- 服务器状态指示器:比官网启动器早了几个小时增加了服务器状态指示功能,且指示的更为细致。
- 其他常用工具:包括 p4k分流下载清理着色器重装EAC等多种功能在内的工具箱。
### 📸 屏幕截图 ### 📸 屏幕截图
![image.png](https://s2.loli.net/2023/10/05/ng3ECSaQqs6LxHm.png) ![image.png](https://s2.loli.net/2024/05/06/kX2nxsCp3y71lo4.png)
![image.png](https://s2.loli.net/2023/10/05/kARF27iDs86f3Kn.png) ![image.png](https://s2.loli.net/2024/05/06/LIxt6D3WjJeXh5r.png)
![image.png](https://s2.loli.net/2023/10/05/LwaiZflD1NFq8Xj.png) ![image.png](https://s2.loli.net/2024/05/06/FDXgTIP9HaL5QiW.png)
![image.png](https://s2.loli.net/2023/10/05/eGl7ISPEVZM5Cvq.png) ![image.png](https://s2.loli.net/2024/05/06/q6tSos41xCEAIju.png)
![image.png](https://s2.loli.net/2023/10/05/XEHunP3yWDK7RT1.png) ![image.png](https://s2.loli.net/2024/05/06/JScI2sXTFea3tKY.png)
![image.png](https://s2.loli.net/2024/05/06/kMXZrAunSV48YhK.png)
![image.png](https://s2.loli.net/2024/05/06/CAvKrsXmtpRh8Iw.png)
![image.png](https://s2.loli.net/2024/05/06/ZnYy7XpM69rboWP.png)
### ❤️ 鸣谢
特别感谢 [Visual Studio Code](https://code.visualstudio.com/) 提供免费的开发工具。

31
README_en.md Normal file
View File

@ -0,0 +1,31 @@
# SCToolBox
[简体中文](https://github.com/StarCitizenToolBox/app/blob/main/README.md) / [繁體中文](https://github.com/StarCitizenToolBox/app/blob/main/README_zh-TW.md) / [English](https://github.com/StarCitizenToolBox/app/blob/main/README_en.md)
This tool provides Star Citizen players with one-click diagnosis, official website and tool website localization, game localization, game performance optimization and other functions, and is committed to bringing a more enjoyable gaming experience.
[![Windows Nightly Build](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml/badge.svg)](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml)
[![](https://get.microsoft.com/images/en-us%20dark.svg)](https://apps.microsoft.com/detail/9NF3SWFWNKL1?launch=true)
### ✨ Feature
- Localization management: install the localization of the community and switch languages with one click
- One-click diagnosis: log files from hundreds of guinea pig users, which can handle common problems of Star Citizen
- Website Chineseization: Provide manual translation for the Star Citizen official website and Star Citizen tool website (thanks to the Star Citizen Chinese Encyclopedia project), and also provide [Browser Extension (Github)] (https://github.com/xkeyC/StarCitizenBoxBrowserEx).
- Performance optimization: Add more detailed performance parameter control to the Star Citizen game, which can be used to optimize performance and obtain better image quality.
- Server status indicator: The server status indicator function is added a few hours earlier than the official website launcher, and the indication is more detailed.
- Other commonly used tools: a toolbox including p4k offload downloads, cleaning shaders, reinstalling EAC and other functions.
### 📸 Screenshot
![image.png](https://s2.loli.net/2024/05/06/iHmsGd7htjE9uzy.png)
![image.png](https://s2.loli.net/2024/05/06/yCD9hXMEz8gK6Gk.png)
![image.png](https://s2.loli.net/2024/05/06/DVvyCFJBpjXWbd4.png)
![image.png](https://s2.loli.net/2024/05/06/Ig6lVB3HW4fzQaY.png)
![image.png](https://s2.loli.net/2024/05/06/Wnzfe6TNZPE4LyA.png)
![image.png](https://s2.loli.net/2024/05/06/dINhbev63tYWlnq.png)
![image.png](https://s2.loli.net/2024/05/06/BODvxVHN4RoAhpU.png)
![image.png](https://s2.loli.net/2024/05/06/psXOKoCElFfaJMV.png)
![image.png](https://s2.loli.net/2024/05/06/PCWgYFlnD156rxK.png)
### ❤️ Thanks
Special thanks to [Visual Studio Code](https://code.visualstudio.com/) for providing free development tools.

31
README_zh-TW.md Normal file
View File

@ -0,0 +1,31 @@
# SC 工具箱 / SCToolBox
[简体中文](https://github.com/StarCitizenToolBox/app/blob/main/README.md) / [繁體中文](https://github.com/StarCitizenToolBox/app/blob/main/README_zh-TW.md) / [English](https://github.com/StarCitizenToolBox/app/blob/main/README_en.md)
這個工具能為星際公民玩家提供疑難排解、官方網站及工具網站的中文翻譯、遊戲文本在地化翻譯、效能最佳化/畫面改善等功能,讓您獲得更愉快的遊戲體驗。
[![Windows Nightly Build](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml/badge.svg)](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml) [![Translate](http://translate.42kit.com/widget/sctoolbox/CoreApp/svg-badge.svg)](http://translate.42kit.com/engage/sctoolbox/)
[![](https://get.microsoft.com/images/zh-tw%20dark.svg)](https://apps.microsoft.com/detail/9NF3SWFWNKL1?launch=true)
### ✨ 功能
- 社群在地化翻譯管理:一鍵即可快速完成社群翻譯安裝與切換遊戲語言
- 疑難排解:來自上百名小白鼠使用者的日誌文件,可處理常見的星際公民遊戲問題
- 網站中文翻譯:為星際公民官方網站及工具網站提供人工精翻 (感謝星際公民中文百科計畫),亦提供[瀏覽器擴充套件 (Github)](https://github.com/xkeyC/StarCitizenBoxBrowserEx )。
- 效能最佳化/畫面改善:為星際公民遊戲增加更細緻的效能參數調整,能夠用於改善遊戲效能,也可以用於獲得更好的畫質。
- 伺服器狀態指示器:比官方啟動器早了幾個小時增加了伺服器狀態指示功能,且指示的更為細緻。
- 其他常用工具:包括 p4k 分流下載,著色器快取清理,重新安裝 EAC 反外掛軟體等多種功能在內的工具箱。
### 📸 螢幕截圖
![image.png](https://s2.loli.net/2024/05/06/FrMxJuh9AozfVc7.png)
![image.png](https://s2.loli.net/2024/05/06/8GLnb2Ma7ojeZIl.png)
![image.png](https://s2.loli.net/2024/05/06/IsCUlx7FH9SfAtY.png)
![image.png](https://s2.loli.net/2024/05/06/8ksgbSKQEFWdj15.png)
![image.png](https://s2.loli.net/2024/05/06/IAZeq97BzKV6tax.png)
![image.png](https://s2.loli.net/2024/05/06/K9hPgzCB5SbomyQ.png)
![image.png](https://s2.loli.net/2024/05/06/TlckzswguMUCjZe.png)
### ❤️ 鳴謝
特別感謝 [Visual Studio Code](https://code.visualstudio.com/) 提供的免費開發工具。

View File

@ -24,6 +24,15 @@ linter:
rules: rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule # avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
dangling_library_doc_comments: false
analyzer:
plugins:
- custom_lint
exclude:
- "**/*.g.dart"
- "**/*.freezed.dart"
errors:
invalid_annotation_target: ignore
# Additional information about this file can be found at # Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options # https://dart.dev/guides/language/analysis-options

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 67 KiB

BIN
assets/app_logo_mini.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
assets/binary/aria2c.zip Normal file

Binary file not shown.

BIN
assets/binary/unp4kc.zip Normal file

Binary file not shown.

BIN
assets/countdown/alen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
assets/countdown/ff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/countdown/iae.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

BIN
assets/countdown/ilw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
assets/countdown/pirate.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
assets/countdown/red.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
assets/dps.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -1,292 +0,0 @@
[
{
"key": "r_ssdo",
"name": "屏幕光线后处理",
"info": "调整光线后处理等级",
"type": "int",
"max": 2,
"min": 0,
"value": 1,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "r_AntialiasingMode",
"name": "抗锯齿",
"info": "0 关闭1 SMAA2 时间过滤+SMAA3 时间滤波和投影矩阵抖动的 SMAA",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_gameeffects",
"name": "特效等级",
"info": "游戏特效等级",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_texture",
"name": "纹理等级",
"info": "模型纹理细节",
"type": "int",
"max": 3,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_volumetriceffects",
"name": "体积效果",
"info": "体积云、体积光照等",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_water",
"name": "水体效果",
"info": "各种水的等级",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_objectdetail",
"name": "对象细节",
"info": "模型对象细节影响LOD等..",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_particles",
"name": "粒子细节",
"info": "",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_physics",
"name": "物理细节",
"info": "物理效果范围",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_shading",
"name": "着色器细节",
"info": "着色器相关",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_shadows",
"name": "阴影细节",
"info": "阴影效果",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "sys_spec_postprocessing",
"name": "后处理细节",
"info": "后处理着色器,动态模糊效果 等",
"type": "int",
"max": 4,
"min": 1,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_Renderer",
"name": "渲染器质量",
"info": "cryengine 渲染器质量",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderDecal",
"name": "贴花质量",
"info": "LOGO、标志等",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderFX",
"name": "FX 质量",
"info": "",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderGeneral",
"name": "常规质量",
"info": "整体模型质量",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderGlass",
"name": "玻璃质量",
"info": "窗、镜子等",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderHDR",
"name": "HDR质量",
"info": "HDR色差亮度层级 处理 等",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderParticle",
"name": "粒子质量",
"info": "粒子效果质量",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderTerrain",
"name": "地面质量",
"info": "",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderShadow",
"name": "阴影质量",
"info": "",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "q_ShaderSky",
"name": "天空质量",
"info": "",
"type": "int",
"max": 3,
"min": 0,
"value": 2,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "e_ParticlesObjectCollisions",
"name": "粒子碰撞",
"info": "1 仅静态粒子 2 包括动态粒子",
"type": "int",
"max": 2,
"min": 1,
"value": 1,
"group": "图形(修改后建议清理着色器)"
},
{
"key": "r_displayinfo",
"name": "屏幕信息(展示帧率)",
"info": "在屏幕右上角展示帧率,服务器信息等",
"type": "int",
"max": 4,
"min": 0,
"value": 1,
"group": "设置"
},
{
"key": "r_DisplaySessionInfo",
"name": "显示会话信息",
"info": "开启后在屏幕上显示一个二维码,用于反馈时让 CIG 快速定位相关信息",
"type": "bool",
"max": 1,
"min": 0,
"value": 0,
"group": "设置"
},
{
"key": "r_VSync",
"name": "垂直同步",
"info": "开启以防止撕裂,关闭以提高帧率",
"type": "bool",
"max": 1,
"min": 0,
"value": 0,
"group": "设置"
},
{
"key": "r_MotionBlur",
"name": "动态模糊",
"info": "开启以提高运动感,关闭提升观感",
"type": "bool",
"max": 1,
"min": 0,
"value": 0,
"group": "设置"
},
{
"key": "cl_fov",
"name": "FOV",
"info": "设置视角FOV",
"type": "int",
"max": 160,
"min": 25,
"value": 90,
"group": "设置"
},
{
"key": "ui_disableScreenFade",
"name": "UI 淡入淡出动画",
"info": "",
"type": "bool",
"max": 1,
"min": 0,
"value": 1,
"group": "设置"
}
]

BIN
assets/rescue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

1
assets/tieba.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1708140457383" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6396" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M661.97052599 29.36524462c-0.6598578-6.23722732 5.09033162-11.68890963 11.26471531-10.91907551 31.50035457 0 63.01642003-0.0942654 94.51677463 0.04713271 5.8287439-0.40848339 10.73054471 5.05890982 10.24350679 10.76196651 0.10997631 24.55613675-0.01571091 49.12798439 0.06284361 73.69983203 80.32983187 0.01571091 160.65966371-0.01571091 240.98949557 0.01571093 6.20580551-0.7069905 11.65748782 5.02748801 10.90336463 11.18616083 0.03142179 30.93476217 0 61.86952433 0.03142179 92.80428647 0.0942654 3.36213261-0.54988149 7.03848323-3.2521563 9.31656371-3.80203779 3.56637429-9.37940732 2.45090041-14.07696643 2.65514212-78.20886036-0.06284359-156.40200981-0.03142179-234.61087017-0.01571089-0.01571091 82.84357586-0.01571091 165.68715174 0.01571091 248.53072756 79.24577975 0.01571091 158.50727041-0.01571091 237.76876107 0.01571091 6.20580551-0.7069905 11.56322243 5.12175341 10.82481013 11.21758262-0.01571091 141.97940358 0 283.94309627-0.01571091 425.92249984 0.0942654 23.99054435-7.49409931 47.93395599-21.50822216 67.41547205-16.08796163 22.70225055-40.61267657 39.26153918-67.71397912 45.59303189-15.97798533 4.0219904-32.53727397 3.06362551-48.8451882 3.17360181H574.28799292c-3.3149999 0.0471327-6.89708512-0.628436-9.14374381-3.26786722-3.91201411-4.24194301-2.34092411-10.40061582-2.6394312-15.58521284 0.01571091-172.28572974 0.0471327-344.55574859-0.01571091-516.84147832 0.23566351-4.77611362-1.03691939-10.36919402 2.48232221-14.26549722 2.23094781-2.82796201 5.95443111-3.55066341 9.3794073-3.39355439 29.19085227 0.03142179 58.39741541 0.01571091 87.60397858 0.01571087 0.01571091-146.0328158-0.01571091-292.06563157 0.0157109-438.08273647m16.54357773 875.34850616c77.37618265 0.03142179 154.7523653 0.01571091 232.12854795 0 0.01571091-107.1012055 0.01571091-214.20241102 0-321.30361654-77.34476085-0.0785545-154.67381079 0.0785545-232.01857165-0.0942654-0.26708529 107.13262732-0.0471327 214.26525462-0.1099763 321.39788194zM31.66492766 64.84045691c21.24113684-27.55691865 55.42805531-44.6503779 90.25912067-44.6817997 118.39734265-0.0942654 236.77897437-0.0471327 355.176317-0.0314218 4.8546681-0.43990521 9.72504711 3.0322037 10.54201392 7.90258273 0.56559241 4.60329372 0.25137441 9.23800921 0.2985071 13.85701382v711.86088041c0.94265401 6.37862542-4.49331743 12.47445462-10.96620822 11.86172953-31.43751097 0.0471327-62.87502193 0.0471327-94.3125329 0-5.7030567 0.45561611-11.07618453-4.41476289-10.7619665-10.19637412-0.0942654-206.44122641 0.01571091-412.89816372-0.04713269-619.33939013-82.85928676-0.03142179-165.71857354-0.03142179-248.5778603 0-0.03142179 202.19928339 0 404.39856679-0.0157109 606.61356111-0.06284359 4.9489335 0.29850709 9.94499971-0.28279619 14.89393323-0.7384123 4.87037901-5.59308042 8.27964432-10.40061584 8.02826991-31.50035457 0.06284359-63.01642003 0.0471327-94.51677459 0-5.71876762 0.47132701-11.20187171-4.3676302-10.82481012-10.21208503-0.0942654-205.87563401-0.0471327-411.76697892-0.03142181-617.64261292-0.43990521-26.15864854 8.29535522-52.33300801 24.46187137-72.91428704z" fill="#429efe" p-id="6397"></path><path d="M189.54376206 213.1670641c-0.58130331-6.00156381 4.82324631-11.43753521 10.84052102-10.79338831 31.45322186-0.03142179 62.92215463-0.03142179 94.39108741 0 4.79182451-0.42419429 9.64649262 2.9693601 10.51059209 7.7611846 0.61272509 4.6818482 0.26708529 9.42654002 0.314218 14.13981003v446.11100639c0.14139811 23.14215575-0.94265401 46.47284229 3.06362551 69.37933455 7.35270122 47.3997854 30.98189486 92.83570828 68.45239145 123.29914343 29.59933565 24.39902774 66.70848154 38.69594677 104.6345942 43.12642058 4.9803553-0.36135071 6.41004721 5.34170603 6.19009461 9.28514192 0.03142179 30.91905125-0.03142179 61.83810252 0.0314218 92.75715379 0.23566351 4.17909942-0.7698341 8.71954951-4.2733648 11.39040252-4.43047379 4.17909942-10.84052103 2.0109952-16.15080523 1.57108999-56.05649132-6.6771325-110.07056561-29.34796125-154.06108571-64.74461902-25.20028364-20.06281934-47.11698919-44.08478548-65.71869484-70.35341033-1.28829381 0.7541232-2.0267061 2.1209715-2.93793831 3.28357809-33.98267678 47.87111239-80.69118256 87.08551887-134.89378765 110.07056564-28.67239257 12.16023662-59.23009311 19.99997573-90.24340979 22.85935952-6.441469 1.28829381-12.49016551-4.39905201-12.42732193-10.7462556-0.2042417-32.00310336-0.01571091-64.02191763-0.09426538-96.02502102-0.3927725-3.55066341 1.17831749-6.6928434 3.23644538-9.42653998 49.00229719-6.37862542 95.20805418-31.39037827 127.66677366-68.60950046 32.44300857-36.62210797 51.04471421-85.12165636 51.43748671-134.04539905 0.0471327-163.44049302-0.01571091-326.86527516 0.0314218-490.29005728z" fill="#429efe" p-id="6398"></path></svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,53 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no"/>
<meta name="renderer" content="webkit"/>
<link rel="stylesheet" href="style/mdui2.css">
<link href="style/google_icons.css" rel="stylesheet">
<script src="js/mdui2.global.js"></script>
<script src="js/main.js"></script>
<title>SCToolBox Community Input Method Web</title>
<style>
</style>
</head>
<body>
<div class="mdui-theme-light" style="position: relative;overflow: hidden">
<mdui-top-app-bar
scroll-behavior="shrink"
scroll-threshold="30"
scroll-target=".scroll-behavior-shrink">
<mdui-top-app-bar-title>SC汉化盒子社区输入法</mdui-top-app-bar-title>
<div style="flex-grow: 1"></div>
<mdui-button-icon icon="help" onclick="onShowHelp()"></mdui-button-icon>
</mdui-top-app-bar>
<div class="scroll-behavior-shrink" style="overflow: auto;">
<mdui-text-field id="input_message" style="padding-top: 6pt;padding-bottom: 6pt" rows="6" variant="outlined"
label="输入消息..."></mdui-text-field>
<div style="text-align: end">
<mdui-checkbox id="auto_copy" checked>自动复制</mdui-checkbox>
</div>
<mdui-button id="send_button" icon="send" onclick="onSendMessage()" full-width>发送</mdui-button>
</div>
<mdui-snackbar id="snackbar_message" auto-close-delay="1000">Text</mdui-snackbar>
</div>
<script>
init();
</script>
</body>
</html>

View File

@ -0,0 +1,56 @@
async function init() {
try {
let response = await fetch("/api");
let responseJson = await response.json();
if (responseJson.status === "ok") {
showMessage("服务连接成功!");
} else {
showMessage("服务连接失败!" + responseJson);
}
} catch (e) {
showMessage("服务连接失败!" + e);
}
}
async function onSendMessage() {
let send_button = document.getElementById("send_button");
let input = document.getElementById("input_message");
let isAutoCopy = document.getElementById("auto_copy").checked;
let messageJson = {
"text": input.value,
"autoCopy": isAutoCopy,
"autoInput": false
};
send_button.loading = true;
try {
let response = await fetch("/api/send", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(messageJson)
});
let responseJson = await response.json();
console.log(responseJson);
showMessage(responseJson.message);
if (response.ok) {
input.value = "";
}
} catch (e) {
showMessage("发送失败!" + e);
}
send_button.loading = false;
}
function showMessage(message) {
let snack = document.getElementById("snackbar_message");
snack.open = false;
snack.innerText = message;
snack.open = true;
}
function onShowHelp() {
alert("在浏览器中输入文本,将发送给汉化盒子转码。" +
"\n\n自动复制勾选后自动复制转码结果到剪贴板。");
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,23 @@
/* fallback */
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: url(flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
}

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,4 @@
/// https://github.com/CxJuice/Uex_Chinese_Translate /// ------- WebLocalization Script --------------
let SCLocalizationReplaceLocalesMap = {}; let SCLocalizationReplaceLocalesMap = {};
let enable_webview_localization_capture = false; let enable_webview_localization_capture = false;
let SCLocalizationEnableSplitMode = false; let SCLocalizationEnableSplitMode = false;
@ -38,7 +36,7 @@ function LocalizationWatchUpdate() {
SCLocalizationEnableSplitMode = true; SCLocalizationEnableSplitMode = true;
} }
if (window.location.hostname.includes("www.erkul.games") || window.location.hostname.includes("ccugame.app")) { if (window.location.hostname.includes("www.erkul.games")) {
document.body.addEventListener("click", function (event) { document.body.addEventListener("click", function (event) {
setTimeout(function () { setTimeout(function () {
allTranslate().then(_ => { allTranslate().then(_ => {
@ -199,8 +197,6 @@ function GetSCLocalizationTranslateString(txtSrc) {
return txtSrc return txtSrc
} }
InitWebLocalization();
function ReportUnTranslate(k, v) { function ReportUnTranslate(k, v) {
if (enable_webview_localization_capture) { if (enable_webview_localization_capture) {
@ -217,3 +213,96 @@ function ReportUnTranslate(k, v) {
} }
InitWebLocalization(); InitWebLocalization();
/// ----- Login Script ----
async function getRSILauncherToken(channelId) {
if (!window.location.href.includes("robertsspaceindustries.com")) return;
let loginBodyElement = $(".c-form.c-signIn");
loginBodyElement.show();
// wait login
window.chrome.webview.postMessage({ action: 'webview_rsi_login_show_window' });
// get claims
let claimsR = await fetch("https://robertsspaceindustries.com/api/launcher/v3/games/claims", {
method: 'POST', headers: {
'x-rsi-token': $.cookie('Rsi-Token'),
},
});
if (claimsR.status !== 200) return;
loginBodyElement.hide();
SCTShowToast("登录游戏中...");
let claimsData = (await claimsR.json())["data"];
let tokenFormData = new FormData();
tokenFormData.append('claims', claimsData);
tokenFormData.append('gameId', 'SC');
let tokenR = await fetch("https://robertsspaceindustries.com/api/launcher/v3/games/token", {
method: 'POST', headers: {
'x-rsi-token': $.cookie('Rsi-Token'),
},
body: tokenFormData
});
if (tokenR.status !== 200) return;
let TokenData = (await tokenR.json())["data"]["token"];
console.log(TokenData);
// get release Data
let releaseFormData = new FormData();
releaseFormData.append("channelId", channelId);
releaseFormData.append("claims", claimsData);
releaseFormData.append("gameId", "SC");
releaseFormData.append("platformId", "prod");
let releaseR = await fetch("https://robertsspaceindustries.com/api/launcher/v3/games/release", {
method: 'POST', headers: {
'x-rsi-token': $.cookie('Rsi-Token'),
},
body: releaseFormData
});
if (releaseR.status !== 200) return;
let releaseDataJson = (await releaseR.json())['data'];
console.log(releaseDataJson);
// get game library
let libraryR = await fetch("https://robertsspaceindustries.com/api/launcher/v3/games/library", {
method: 'POST', headers: {
'x-rsi-token': $.cookie('Rsi-Token'),
},
body: releaseFormData
});
let libraryData = (await libraryR.json())["data"]
// get user avatar
let avatarUrl = $(".orion-c-avatar__image").attr("src");
//post message
window.chrome.webview.postMessage({
action: 'webview_rsi_login_success', data: {
'webToken': $.cookie('Rsi-Token'),
'claims': claimsData,
'authToken': TokenData,
'releaseInfo': releaseDataJson,
"avatar": avatarUrl,
'libraryData': libraryData,
}
});
}
function SCTShowToast(message) {
let m = document.createElement('div');
m.innerHTML = message;
m.style.cssText = "font-family:siyuan;max-width:60%;min-width: 150px;padding:0 14px;height: 40px;color: rgb(255, 255, 255);line-height: 40px;text-align: center;border-radius: 4px;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;";
document.body.appendChild(m);
setTimeout(function () {
let d = 0.5;
m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
m.style.opacity = '0';
setTimeout(function () {
document.body.removeChild(m)
}, d * 1000);
}, 3500);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 17 KiB

4
flutter_rust_bridge.yaml Normal file
View File

@ -0,0 +1,4 @@
rust_input: rust/src/api/**/*.rs
dart_output: lib/common/rust/
full_dep: true
web: false

32
lib/api/analytics.dart Normal file
View File

@ -0,0 +1,32 @@
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
class AnalyticsApi {
static touch(String key) async {
if (kDebugMode || kProfileMode) {
dPrint("AnalyticsApi.touch === $key skip");
return;
}
dPrint("AnalyticsApi.touch === $key start");
try {
final r = await RSHttp.postData(
"${URLConf.analyticsApiHome}/analytics/$key",
data: null);
dPrint("AnalyticsApi.touch === $key over statusCode == ${r.statusCode}");
} catch (e) {
dPrint("AnalyticsApi.touch === $key Error:$e");
}
}
static Future<Map<String, dynamic>> getAnalyticsData() async {
final r = await RSHttp.get("${URLConf.analyticsApiHome}/analytics");
if (r.data == null) return {};
final jsonData = json.decode(utf8.decode(r.data!));
dPrint("AnalyticsApi.getAnalyticsData");
return jsonData;
}
}

View File

@ -1,15 +1,16 @@
import 'dart:convert'; import 'dart:convert';
import 'package:dio/dio.dart'; import 'package:hive_ce/hive.dart';
import 'package:starcitizen_doctor/common/conf.dart'; import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/data/app_placard_data.dart'; import 'package:starcitizen_doctor/data/app_placard_data.dart';
import 'package:starcitizen_doctor/data/app_torrent_data.dart';
import 'package:starcitizen_doctor/data/app_version_data.dart'; import 'package:starcitizen_doctor/data/app_version_data.dart';
import 'package:starcitizen_doctor/data/countdown_festival_item_data.dart';
import 'package:starcitizen_doctor/data/input_method_api_data.dart';
import 'package:starcitizen_doctor/data/sc_localization_data.dart'; import 'package:starcitizen_doctor/data/sc_localization_data.dart';
class Api { class Api {
static final dio =
Dio(BaseOptions(connectTimeout: const Duration(seconds: 10)));
static Future<AppVersionData> getAppVersion() async { static Future<AppVersionData> getAppVersion() async {
return AppVersionData.fromJson( return AppVersionData.fromJson(
await getRepoJson("sc_doctor", "version.json")); await getRepoJson("sc_doctor", "version.json"));
@ -20,11 +21,24 @@ class Api {
await getRepoJson("sc_doctor", "placard.json")); await getRepoJson("sc_doctor", "placard.json"));
} }
static Future<List<CountdownFestivalItemData>>
getFestivalCountdownList() async {
List<CountdownFestivalItemData> l = [];
final r = json.decode(await getRepoData("sc_doctor", "countdown.json"));
if (r is List) {
for (var element in r) {
l.add(CountdownFestivalItemData.fromJson(element));
}
}
l.sort((a, b) => (a.time ?? 0) - (b.time ?? 0));
return l;
}
static Future<Map<String, dynamic>> getAppReleaseDataByVersionName( static Future<Map<String, dynamic>> getAppReleaseDataByVersionName(
String version) async { String version) async {
final r = await dio final r = await RSHttp.getText(
.get("${AppConf.gitlabApiPath}/projects/152243/releases/$version"); "${URLConf.gitlabApiPath}repos/SCToolBox/Release/releases/tags/$version");
return r.data; return json.decode(r);
} }
static Future<List<ScLocalizationData>> getScLocalizationData( static Future<List<ScLocalizationData>> getScLocalizationData(
@ -39,10 +53,37 @@ class Api {
return l; return l;
} }
static Future<InputMethodApiData> getCommunityInputMethodIndexData() async {
final data = await getCommunityInputMethodData("index.json");
return InputMethodApiData.fromJson(json.decode(data));
}
static Future<String> getCommunityInputMethodData(String file) async {
return getRepoData("input_method", file);
}
static Future<List<AppTorrentData>> getAppTorrentDataList() async {
final data = await getRepoData("sc_doctor", "torrent.json");
final dataJson = json.decode(data);
List<AppTorrentData> l = [];
if (dataJson is List) {
for (var value in dataJson) {
l.add(AppTorrentData.fromJson(value));
}
}
return l;
}
static Future<String> getTorrentTrackerList() async {
final data = await getRepoData("sc_doctor", "tracker.list");
return data;
}
static Future<List> getScServerStatus() async { static Future<List> getScServerStatus() async {
final r = final r = await RSHttp.getText(
await dio.get("https://status.robertsspaceindustries.com/index.json"); "https://status.robertsspaceindustries.com/index.json");
return r.data["systems"]; final map = json.decode(r);
return map["systems"];
} }
static Future<Map<String, dynamic>> getRepoJson( static Future<Map<String, dynamic>> getRepoJson(
@ -51,8 +92,33 @@ class Api {
return json.decode(data); return json.decode(data);
} }
static Future getRepoData(String dir, String name) async { static Future<String> getRepoData(String dir, String name) async {
final r = await dio.get("${AppConf.apiRepoPath}/$dir/$name"); final r = await RSHttp.getText("${URLConf.apiRepoPath}/$dir/$name",
return r.data; withCustomDns: await isUseInternalDNS());
return r;
}
static Future<String?> doGoogleTranslate(String input) async {
final out = await RSHttp.getText(
"${URLConf.googleTranslateApiUrl}/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=${Uri.encodeComponent(input)}");
// [[["Hello","你好",null,null,10]],null,"zh-CN",null,null,null,1,[],[["zh-CN"],null,[1],["zh-CN"]]]
final list = json.decode(out);
if (list is List && list.isNotEmpty) {
final data = list.first;
if (data is List && data.isNotEmpty) {
final text = data.first;
if (text is List && text.isNotEmpty) {
return text.first;
}
}
}
return null;
}
static Future<bool> isUseInternalDNS() async {
final userBox = await Hive.openBox("app_conf");
final isUseInternalDNS =
userBox.get("isUseInternalDNS", defaultValue: false);
return isUseInternalDNS;
} }
} }

25
lib/api/rss.dart Normal file
View File

@ -0,0 +1,25 @@
import 'dart:io';
import 'package:dart_rss/dart_rss.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
class RSSApi {
static Future<List<RssItem>> getRssVideo() async {
final r = await RSHttp.getText(URLConf.rssVideoUrl);
final f = RssFeed.parse(r);
return f.items.sublist(0, 8);
}
static Future<List<RssItem>> getRssText() async {
final r2 = await RSHttp.getText(URLConf.rssTextUrl2);
final r2f = RssFeed.parse(r2);
final items = r2f.items;
items.sort((a, b) {
final aDate = HttpDate.parse(a.pubDate ?? "").millisecondsSinceEpoch;
final bDate = HttpDate.parse(b.pubDate ?? "").millisecondsSinceEpoch;
return bDate - aDate;
});
return items;
}
}

14
lib/api/udb.dart Normal file
View File

@ -0,0 +1,14 @@
import 'dart:convert';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/data/nav_api_data.dart';
class UDBNavApi {
static Future<NavApiData> getNavItems({int pageNo = 1}) async {
final r = await RSHttp.getText(URLConf.nav42KitUrl);
if (r.isEmpty) throw "Network Error";
final result = NavApiData.fromJson(jsonDecode(r));
return result;
}
}

357
lib/app.dart Normal file
View File

@ -0,0 +1,357 @@
import 'dart:async';
import 'dart:io';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_acrylic/flutter_acrylic.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:go_router/go_router.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:hive_ce/hive.dart';
import 'package:path_provider/path_provider.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:starcitizen_doctor/common/conf/conf.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
import 'package:starcitizen_doctor/ui/guide/guide_ui.dart';
import 'package:starcitizen_doctor/ui/home/performance/performance_ui.dart';
import 'package:starcitizen_doctor/ui/splash_ui.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:starcitizen_doctor/widgets/widgets.dart';
import 'package:uuid/uuid.dart';
import 'package:window_manager/window_manager.dart';
import 'api/analytics.dart';
import 'api/api.dart';
import 'common/conf/url_conf.dart';
import 'common/helper/system_helper.dart';
import 'common/io/rs_http.dart';
import 'common/rust/frb_generated.dart';
import 'common/rust/api/win32_api.dart' as win32;
import 'data/app_version_data.dart';
import 'generated/no_l10n_strings.dart';
import 'ui/home/downloader/home_downloader_ui.dart';
import 'ui/home/game_doctor/game_doctor_ui.dart';
import 'ui/home/localization/advanced_localization_ui.dart';
import 'ui/index_ui.dart';
import 'ui/settings/upgrade_dialog.dart';
import 'ui/tools/unp4kc/unp4kc_ui.dart';
part 'app.g.dart';
part 'app.freezed.dart';
@freezed
class AppGlobalState with _$AppGlobalState {
const factory AppGlobalState({
String? deviceUUID,
String? applicationSupportDir,
String? applicationBinaryModuleDir,
AppVersionData? networkVersionData,
@Default(ThemeConf()) ThemeConf themeConf,
Locale? appLocale,
Box? appConfBox,
}) = _AppGlobalState;
}
@riverpod
GoRouter router(Ref ref) {
return GoRouter(
routes: [
GoRoute(
path: '/',
pageBuilder: (context, state) => myPageBuilder(context, state, const SplashUI()),
),
GoRoute(
path: '/index',
pageBuilder: (context, state) => myPageBuilder(context, state, const IndexUI()),
routes: [
GoRoute(
path: "downloader",
pageBuilder: (context, state) => myPageBuilder(context, state, const HomeDownloaderUI())),
GoRoute(
path: 'game_doctor',
pageBuilder: (context, state) => myPageBuilder(context, state, const HomeGameDoctorUI()),
),
GoRoute(
path: 'performance',
pageBuilder: (context, state) => myPageBuilder(context, state, const HomePerformanceUI()),
),
GoRoute(
path: 'advanced_localization',
pageBuilder: (context, state) => myPageBuilder(context, state, const AdvancedLocalizationUI()))
],
),
GoRoute(path: '/tools', builder: (_, __) => const SizedBox(), routes: [
GoRoute(
path: 'unp4kc',
pageBuilder: (context, state) => myPageBuilder(context, state, const UnP4kcUI()),
),
]),
GoRoute(path: '/guide', pageBuilder: (context, state) => myPageBuilder(context, state, const GuideUI()))
],
);
}
@riverpod
class AppGlobalModel extends _$AppGlobalModel {
static Map<Locale, String> get appLocaleSupport => {
const Locale("auto"): S.current.settings_app_language_auto,
const Locale("zh", "CN"): NoL10n.langZHS,
const Locale("zh", "TW"): NoL10n.langZHT,
const Locale("en"): NoL10n.langEn,
const Locale("ja"): NoL10n.langJa,
const Locale("ru"): NoL10n.langRU,
};
@override
AppGlobalState build() {
return const AppGlobalState();
}
bool _initialized = false;
Future<void> initApp() async {
if (_initialized) return;
// init Data
final applicationSupportDir = await _initAppDir();
// init Rust bridge
await RustLib.init();
await RSHttp.init();
dPrint("---- rust bridge init -----");
// init Hive
try {
Hive.init("$applicationSupportDir/db");
final box = await Hive.openBox("app_conf");
state = state.copyWith(appConfBox: box);
if (box.get("install_id", defaultValue: "") == "") {
await box.put("install_id", const Uuid().v4());
AnalyticsApi.touch("firstLaunch");
}
final deviceUUID = box.get("install_id", defaultValue: "");
final localeCode = box.get("app_locale", defaultValue: null);
Locale? locale;
if (localeCode != null) {
final localeSplit = localeCode.toString().split("_");
if (localeSplit.length == 2 && localeSplit[1].isNotEmpty) {
locale = Locale(localeSplit[0], localeSplit[1]);
} else {
locale = Locale(localeSplit[0]);
}
}
state = state.copyWith(deviceUUID: deviceUUID, appLocale: locale);
} catch (e) {
await win32.setForegroundWindow(windowName: "SCToolBox");
dPrint("exit: db is locking ...");
exit(0);
}
// init powershell
if (Platform.isWindows) {
try {
await SystemHelper.initPowershellPath();
dPrint("---- Powershell init -----");
} catch (e) {
dPrint("powershell init failed : $e");
}
}
// get windows info
WindowsDeviceInfo? windowsDeviceInfo;
try {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
windowsDeviceInfo = await deviceInfo.windowsInfo;
} catch (e) {
dPrint("DeviceInfo.windowsInfo error: $e");
}
// init windows
windowManager.waitUntilReadyToShow().then((_) async {
await windowManager.setTitle("SCToolBox");
await windowManager.setSkipTaskbar(false);
await windowManager.show();
if (Platform.isWindows) {
await Window.initialize();
await Window.hideWindowControls();
if (windowsDeviceInfo?.productName.contains("Windows 11") ?? false) {
await Window.setEffect(
effect: WindowEffect.acrylic,
);
}
}
});
dPrint("---- Window init -----");
_initialized = true;
ref.keepAlive();
}
String getUpgradePath() {
return "${state.applicationSupportDir}/._upgrade";
}
bool isInOnlineMode() => state.networkVersionData != null;
// ignore: avoid_build_context_in_providers
Future<bool> checkUpdate(BuildContext context) async {
if (!ConstConf.isMSE) {
final dir = Directory(getUpgradePath());
if (await dir.exists()) {
dir.delete(recursive: true);
}
}
dynamic checkUpdateError;
try {
final networkVersionData = await Api.getAppVersion();
dPrint("networkVersionData == ${networkVersionData.toJson()}");
AppConf.setNetworkChannels(networkVersionData.gameChannels);
checkActivityThemeColor(networkVersionData);
if (ConstConf.isMSE) {
dPrint("lastVersion=${networkVersionData.mSELastVersion} ${networkVersionData.mSELastVersionCode}");
} else {
dPrint("lastVersion=${networkVersionData.lastVersion} ${networkVersionData.lastVersionCode}");
}
state = state.copyWith(networkVersionData: networkVersionData);
if (networkVersionData.nav42KitUrl != null) {
URLConf.nav42KitUrl = networkVersionData.nav42KitUrl!;
}
} catch (e) {
checkUpdateError = e;
dPrint("_checkUpdate Error:$e");
}
await Future.delayed(const Duration(milliseconds: 100));
if (state.networkVersionData == null) {
if (!context.mounted) return false;
await showToast(
context, S.current.app_common_network_error(ConstConf.appVersionDate, checkUpdateError.toString()));
return false;
}
if (!Platform.isWindows) return false;
final lastVersion =
ConstConf.isMSE ? state.networkVersionData?.mSELastVersionCode : state.networkVersionData?.lastVersionCode;
if ((lastVersion ?? 0) > ConstConf.appVersionCode) {
// need update
if (!context.mounted) return false;
final r =
await showDialog(dismissWithEsc: false, context: context, builder: (context) => const UpgradeDialogUI());
if (r != true) {
if (!context.mounted) return false;
await showToast(context, S.current.app_common_upgrade_info_error);
return false;
}
return true;
}
return false;
}
Timer? _activityThemeColorTimer;
checkActivityThemeColor(AppVersionData networkVersionData) {
if (_activityThemeColorTimer != null) {
_activityThemeColorTimer?.cancel();
_activityThemeColorTimer = null;
}
final startTime = networkVersionData.activityColors?.startTime;
final endTime = networkVersionData.activityColors?.endTime;
if (startTime == null || endTime == null) return;
final now = DateTime.now().millisecondsSinceEpoch;
dPrint("now == $now start == $startTime end == $endTime");
if (now < startTime) {
_activityThemeColorTimer =
Timer(Duration(milliseconds: startTime - now), () => checkActivityThemeColor(networkVersionData));
dPrint("start Timer ....");
} else if (now >= startTime && now <= endTime) {
dPrint("update Color ....");
// update Color
final colorCfg = networkVersionData.activityColors;
state = state.copyWith(
themeConf: ThemeConf(
backgroundColor: HexColor(colorCfg?.background ?? "#132431").withValues(alpha: .75),
menuColor: HexColor(colorCfg?.menu ?? "#132431").withValues(alpha: .95),
micaColor: HexColor(colorCfg?.mica ?? "#0A3142"),
),
);
// wait for end
_activityThemeColorTimer =
Timer(Duration(milliseconds: endTime - now), () => checkActivityThemeColor(networkVersionData));
} else {
dPrint("reset Color ....");
state = state.copyWith(
themeConf: ThemeConf(
backgroundColor: HexColor("#132431").withValues(alpha: .75),
menuColor: HexColor("#132431").withValues(alpha: .95),
micaColor: HexColor("#0A3142"),
),
);
}
}
void changeLocale(value) async {
final appConfBox = await Hive.openBox("app_conf");
if (value is Locale) {
if (value.languageCode == "auto") {
state = state.copyWith(appLocale: null);
await appConfBox.put("app_locale", null);
return;
}
final localeCode =
value.countryCode != null ? "${value.languageCode}_${value.countryCode ?? ""}" : value.languageCode;
dPrint("changeLocale == $value localeCode=== $localeCode");
await appConfBox.put("app_locale", localeCode);
state = state.copyWith(appLocale: value);
}
}
Future<String> _initAppDir() async {
if (Platform.isWindows) {
final userProfileDir = Platform.environment["USERPROFILE"];
final applicationSupportDir = (await getApplicationSupportDirectory()).absolute.path;
String? applicationBinaryModuleDir;
try {
await initDPrintFile(applicationSupportDir);
} catch (e) {
dPrint("initDPrintFile Error: $e");
}
if (ConstConf.isMSE && userProfileDir != null) {
applicationBinaryModuleDir = "$userProfileDir\\AppData\\Local\\Temp\\SCToolbox\\modules";
} else {
applicationBinaryModuleDir = "$applicationSupportDir\\modules";
}
dPrint("applicationSupportDir == $applicationSupportDir");
dPrint("applicationBinaryModuleDir == $applicationBinaryModuleDir");
state = state.copyWith(
applicationSupportDir: applicationSupportDir,
applicationBinaryModuleDir: applicationBinaryModuleDir,
);
return applicationSupportDir;
} else {
final applicationSupportDir = (await getApplicationSupportDirectory()).absolute.path;
final applicationBinaryModuleDir = "$applicationSupportDir/modules";
dPrint("applicationSupportDir == $applicationSupportDir");
dPrint("applicationBinaryModuleDir == $applicationBinaryModuleDir");
state = state.copyWith(
applicationSupportDir: applicationSupportDir,
applicationBinaryModuleDir: applicationBinaryModuleDir,
);
return applicationSupportDir;
}
}
}
@freezed
class ThemeConf with _$ThemeConf {
const factory ThemeConf({
@Default(Color(0xbf132431)) Color backgroundColor,
@Default(Color(0xf2132431)) Color menuColor,
@Default(Color(0xff0a3142)) Color micaColor,
}) = _ThemeConf;
}

473
lib/app.freezed.dart Normal file
View File

@ -0,0 +1,473 @@
// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
part of 'app.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
/// @nodoc
mixin _$AppGlobalState {
String? get deviceUUID => throw _privateConstructorUsedError;
String? get applicationSupportDir => throw _privateConstructorUsedError;
String? get applicationBinaryModuleDir => throw _privateConstructorUsedError;
AppVersionData? get networkVersionData => throw _privateConstructorUsedError;
ThemeConf get themeConf => throw _privateConstructorUsedError;
Locale? get appLocale => throw _privateConstructorUsedError;
Box<dynamic>? get appConfBox => throw _privateConstructorUsedError;
/// Create a copy of AppGlobalState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$AppGlobalStateCopyWith<AppGlobalState> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $AppGlobalStateCopyWith<$Res> {
factory $AppGlobalStateCopyWith(
AppGlobalState value, $Res Function(AppGlobalState) then) =
_$AppGlobalStateCopyWithImpl<$Res, AppGlobalState>;
@useResult
$Res call(
{String? deviceUUID,
String? applicationSupportDir,
String? applicationBinaryModuleDir,
AppVersionData? networkVersionData,
ThemeConf themeConf,
Locale? appLocale,
Box<dynamic>? appConfBox});
$ThemeConfCopyWith<$Res> get themeConf;
}
/// @nodoc
class _$AppGlobalStateCopyWithImpl<$Res, $Val extends AppGlobalState>
implements $AppGlobalStateCopyWith<$Res> {
_$AppGlobalStateCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of AppGlobalState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? deviceUUID = freezed,
Object? applicationSupportDir = freezed,
Object? applicationBinaryModuleDir = freezed,
Object? networkVersionData = freezed,
Object? themeConf = null,
Object? appLocale = freezed,
Object? appConfBox = freezed,
}) {
return _then(_value.copyWith(
deviceUUID: freezed == deviceUUID
? _value.deviceUUID
: deviceUUID // ignore: cast_nullable_to_non_nullable
as String?,
applicationSupportDir: freezed == applicationSupportDir
? _value.applicationSupportDir
: applicationSupportDir // ignore: cast_nullable_to_non_nullable
as String?,
applicationBinaryModuleDir: freezed == applicationBinaryModuleDir
? _value.applicationBinaryModuleDir
: applicationBinaryModuleDir // ignore: cast_nullable_to_non_nullable
as String?,
networkVersionData: freezed == networkVersionData
? _value.networkVersionData
: networkVersionData // ignore: cast_nullable_to_non_nullable
as AppVersionData?,
themeConf: null == themeConf
? _value.themeConf
: themeConf // ignore: cast_nullable_to_non_nullable
as ThemeConf,
appLocale: freezed == appLocale
? _value.appLocale
: appLocale // ignore: cast_nullable_to_non_nullable
as Locale?,
appConfBox: freezed == appConfBox
? _value.appConfBox
: appConfBox // ignore: cast_nullable_to_non_nullable
as Box<dynamic>?,
) as $Val);
}
/// Create a copy of AppGlobalState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$ThemeConfCopyWith<$Res> get themeConf {
return $ThemeConfCopyWith<$Res>(_value.themeConf, (value) {
return _then(_value.copyWith(themeConf: value) as $Val);
});
}
}
/// @nodoc
abstract class _$$AppGlobalStateImplCopyWith<$Res>
implements $AppGlobalStateCopyWith<$Res> {
factory _$$AppGlobalStateImplCopyWith(_$AppGlobalStateImpl value,
$Res Function(_$AppGlobalStateImpl) then) =
__$$AppGlobalStateImplCopyWithImpl<$Res>;
@override
@useResult
$Res call(
{String? deviceUUID,
String? applicationSupportDir,
String? applicationBinaryModuleDir,
AppVersionData? networkVersionData,
ThemeConf themeConf,
Locale? appLocale,
Box<dynamic>? appConfBox});
@override
$ThemeConfCopyWith<$Res> get themeConf;
}
/// @nodoc
class __$$AppGlobalStateImplCopyWithImpl<$Res>
extends _$AppGlobalStateCopyWithImpl<$Res, _$AppGlobalStateImpl>
implements _$$AppGlobalStateImplCopyWith<$Res> {
__$$AppGlobalStateImplCopyWithImpl(
_$AppGlobalStateImpl _value, $Res Function(_$AppGlobalStateImpl) _then)
: super(_value, _then);
/// Create a copy of AppGlobalState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? deviceUUID = freezed,
Object? applicationSupportDir = freezed,
Object? applicationBinaryModuleDir = freezed,
Object? networkVersionData = freezed,
Object? themeConf = null,
Object? appLocale = freezed,
Object? appConfBox = freezed,
}) {
return _then(_$AppGlobalStateImpl(
deviceUUID: freezed == deviceUUID
? _value.deviceUUID
: deviceUUID // ignore: cast_nullable_to_non_nullable
as String?,
applicationSupportDir: freezed == applicationSupportDir
? _value.applicationSupportDir
: applicationSupportDir // ignore: cast_nullable_to_non_nullable
as String?,
applicationBinaryModuleDir: freezed == applicationBinaryModuleDir
? _value.applicationBinaryModuleDir
: applicationBinaryModuleDir // ignore: cast_nullable_to_non_nullable
as String?,
networkVersionData: freezed == networkVersionData
? _value.networkVersionData
: networkVersionData // ignore: cast_nullable_to_non_nullable
as AppVersionData?,
themeConf: null == themeConf
? _value.themeConf
: themeConf // ignore: cast_nullable_to_non_nullable
as ThemeConf,
appLocale: freezed == appLocale
? _value.appLocale
: appLocale // ignore: cast_nullable_to_non_nullable
as Locale?,
appConfBox: freezed == appConfBox
? _value.appConfBox
: appConfBox // ignore: cast_nullable_to_non_nullable
as Box<dynamic>?,
));
}
}
/// @nodoc
class _$AppGlobalStateImpl implements _AppGlobalState {
const _$AppGlobalStateImpl(
{this.deviceUUID,
this.applicationSupportDir,
this.applicationBinaryModuleDir,
this.networkVersionData,
this.themeConf = const ThemeConf(),
this.appLocale,
this.appConfBox});
@override
final String? deviceUUID;
@override
final String? applicationSupportDir;
@override
final String? applicationBinaryModuleDir;
@override
final AppVersionData? networkVersionData;
@override
@JsonKey()
final ThemeConf themeConf;
@override
final Locale? appLocale;
@override
final Box<dynamic>? appConfBox;
@override
String toString() {
return 'AppGlobalState(deviceUUID: $deviceUUID, applicationSupportDir: $applicationSupportDir, applicationBinaryModuleDir: $applicationBinaryModuleDir, networkVersionData: $networkVersionData, themeConf: $themeConf, appLocale: $appLocale, appConfBox: $appConfBox)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$AppGlobalStateImpl &&
(identical(other.deviceUUID, deviceUUID) ||
other.deviceUUID == deviceUUID) &&
(identical(other.applicationSupportDir, applicationSupportDir) ||
other.applicationSupportDir == applicationSupportDir) &&
(identical(other.applicationBinaryModuleDir,
applicationBinaryModuleDir) ||
other.applicationBinaryModuleDir ==
applicationBinaryModuleDir) &&
(identical(other.networkVersionData, networkVersionData) ||
other.networkVersionData == networkVersionData) &&
(identical(other.themeConf, themeConf) ||
other.themeConf == themeConf) &&
(identical(other.appLocale, appLocale) ||
other.appLocale == appLocale) &&
(identical(other.appConfBox, appConfBox) ||
other.appConfBox == appConfBox));
}
@override
int get hashCode => Object.hash(
runtimeType,
deviceUUID,
applicationSupportDir,
applicationBinaryModuleDir,
networkVersionData,
themeConf,
appLocale,
appConfBox);
/// Create a copy of AppGlobalState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$AppGlobalStateImplCopyWith<_$AppGlobalStateImpl> get copyWith =>
__$$AppGlobalStateImplCopyWithImpl<_$AppGlobalStateImpl>(
this, _$identity);
}
abstract class _AppGlobalState implements AppGlobalState {
const factory _AppGlobalState(
{final String? deviceUUID,
final String? applicationSupportDir,
final String? applicationBinaryModuleDir,
final AppVersionData? networkVersionData,
final ThemeConf themeConf,
final Locale? appLocale,
final Box<dynamic>? appConfBox}) = _$AppGlobalStateImpl;
@override
String? get deviceUUID;
@override
String? get applicationSupportDir;
@override
String? get applicationBinaryModuleDir;
@override
AppVersionData? get networkVersionData;
@override
ThemeConf get themeConf;
@override
Locale? get appLocale;
@override
Box<dynamic>? get appConfBox;
/// Create a copy of AppGlobalState
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$AppGlobalStateImplCopyWith<_$AppGlobalStateImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$ThemeConf {
Color get backgroundColor => throw _privateConstructorUsedError;
Color get menuColor => throw _privateConstructorUsedError;
Color get micaColor => throw _privateConstructorUsedError;
/// Create a copy of ThemeConf
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$ThemeConfCopyWith<ThemeConf> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $ThemeConfCopyWith<$Res> {
factory $ThemeConfCopyWith(ThemeConf value, $Res Function(ThemeConf) then) =
_$ThemeConfCopyWithImpl<$Res, ThemeConf>;
@useResult
$Res call({Color backgroundColor, Color menuColor, Color micaColor});
}
/// @nodoc
class _$ThemeConfCopyWithImpl<$Res, $Val extends ThemeConf>
implements $ThemeConfCopyWith<$Res> {
_$ThemeConfCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of ThemeConf
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? backgroundColor = null,
Object? menuColor = null,
Object? micaColor = null,
}) {
return _then(_value.copyWith(
backgroundColor: null == backgroundColor
? _value.backgroundColor
: backgroundColor // ignore: cast_nullable_to_non_nullable
as Color,
menuColor: null == menuColor
? _value.menuColor
: menuColor // ignore: cast_nullable_to_non_nullable
as Color,
micaColor: null == micaColor
? _value.micaColor
: micaColor // ignore: cast_nullable_to_non_nullable
as Color,
) as $Val);
}
}
/// @nodoc
abstract class _$$ThemeConfImplCopyWith<$Res>
implements $ThemeConfCopyWith<$Res> {
factory _$$ThemeConfImplCopyWith(
_$ThemeConfImpl value, $Res Function(_$ThemeConfImpl) then) =
__$$ThemeConfImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({Color backgroundColor, Color menuColor, Color micaColor});
}
/// @nodoc
class __$$ThemeConfImplCopyWithImpl<$Res>
extends _$ThemeConfCopyWithImpl<$Res, _$ThemeConfImpl>
implements _$$ThemeConfImplCopyWith<$Res> {
__$$ThemeConfImplCopyWithImpl(
_$ThemeConfImpl _value, $Res Function(_$ThemeConfImpl) _then)
: super(_value, _then);
/// Create a copy of ThemeConf
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? backgroundColor = null,
Object? menuColor = null,
Object? micaColor = null,
}) {
return _then(_$ThemeConfImpl(
backgroundColor: null == backgroundColor
? _value.backgroundColor
: backgroundColor // ignore: cast_nullable_to_non_nullable
as Color,
menuColor: null == menuColor
? _value.menuColor
: menuColor // ignore: cast_nullable_to_non_nullable
as Color,
micaColor: null == micaColor
? _value.micaColor
: micaColor // ignore: cast_nullable_to_non_nullable
as Color,
));
}
}
/// @nodoc
class _$ThemeConfImpl implements _ThemeConf {
const _$ThemeConfImpl(
{this.backgroundColor = const Color(0xbf132431),
this.menuColor = const Color(0xf2132431),
this.micaColor = const Color(0xff0a3142)});
@override
@JsonKey()
final Color backgroundColor;
@override
@JsonKey()
final Color menuColor;
@override
@JsonKey()
final Color micaColor;
@override
String toString() {
return 'ThemeConf(backgroundColor: $backgroundColor, menuColor: $menuColor, micaColor: $micaColor)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ThemeConfImpl &&
(identical(other.backgroundColor, backgroundColor) ||
other.backgroundColor == backgroundColor) &&
(identical(other.menuColor, menuColor) ||
other.menuColor == menuColor) &&
(identical(other.micaColor, micaColor) ||
other.micaColor == micaColor));
}
@override
int get hashCode =>
Object.hash(runtimeType, backgroundColor, menuColor, micaColor);
/// Create a copy of ThemeConf
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$ThemeConfImplCopyWith<_$ThemeConfImpl> get copyWith =>
__$$ThemeConfImplCopyWithImpl<_$ThemeConfImpl>(this, _$identity);
}
abstract class _ThemeConf implements ThemeConf {
const factory _ThemeConf(
{final Color backgroundColor,
final Color menuColor,
final Color micaColor}) = _$ThemeConfImpl;
@override
Color get backgroundColor;
@override
Color get menuColor;
@override
Color get micaColor;
/// Create a copy of ThemeConf
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$ThemeConfImplCopyWith<_$ThemeConfImpl> get copyWith =>
throw _privateConstructorUsedError;
}

42
lib/app.g.dart Normal file
View File

@ -0,0 +1,42 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'app.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$routerHash() => r'cdf659da46a6dfbab2368a85be2f803f54823142';
/// See also [router].
@ProviderFor(router)
final routerProvider = AutoDisposeProvider<GoRouter>.internal(
router,
name: r'routerProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$routerHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef RouterRef = AutoDisposeProviderRef<GoRouter>;
String _$appGlobalModelHash() => r'4e372bc744903960e4e7b146dbb394ded15e2c18';
/// See also [AppGlobalModel].
@ProviderFor(AppGlobalModel)
final appGlobalModelProvider =
AutoDisposeNotifierProvider<AppGlobalModel, AppGlobalState>.internal(
AppGlobalModel.new,
name: r'appGlobalModelProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$appGlobalModelHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$AppGlobalModel = AutoDisposeNotifier<AppGlobalState>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

View File

@ -1,212 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:starcitizen_doctor/main.dart';
import 'package:starcitizen_doctor/widgets/my_page_route.dart';
import 'package:window_manager/window_manager.dart';
import 'dart:ui' as ui;
import 'ui_model.dart';
export '../common/utils/base_utils.dart';
export '../widgets/widgets.dart';
export 'package:fluent_ui/fluent_ui.dart';
class BaseUIContainer extends ConsumerStatefulWidget {
final ConsumerState<BaseUIContainer> Function() uiCreate;
final dynamic Function() modelCreate;
const BaseUIContainer(
{Key? key, required this.uiCreate, required this.modelCreate})
: super(key: key);
@override
// ignore: no_logic_in_create_state
ConsumerState<BaseUIContainer> createState() => uiCreate();
Future push(BuildContext context) {
return Navigator.push(context, makeRoute(context, this));
}
// Future pushShowModalBottomSheet(BuildContext context) {
// return showModalBottomSheet(
// context: context,
// isScrollControlled: true,
// builder: (BuildContext context) {
// return this;
// },
// );
// }
///
FluentPageRoute makeRoute(
BuildContext context, BaseUIContainer baseUIContainer) {
return MyPageRoute(
builder: (BuildContext context) {
return baseUIContainer;
},
);
}
// Future pushAndRemoveUntil(BuildContext context) {
// return Navigator.pushAndRemoveUntil(context,
// MaterialPageRoute(builder: (BuildContext context) {
// return this;
// }), (_) => false);
// }
}
abstract class BaseUI<T extends BaseUIModel>
extends ConsumerState<BaseUIContainer> {
BaseUIModel? _needDisposeModel;
late final ChangeNotifierProvider<T> provider = bindUIModel();
// final GlobalKey<ScaffoldState> scaffoldState = GlobalKey();
// RefreshController? refreshController;
@override
Widget build(BuildContext context) {
// get model
final model = ref.watch(provider);
return buildBody(context, model)!;
}
String getUITitle(BuildContext context, T model);
Widget? buildBody(
BuildContext context,
T model,
);
Widget? getBottomNavigationBar(BuildContext context, T model) => null;
Color? getBackgroundColor(BuildContext context, T model) => null;
Widget? getFloatingActionButton(BuildContext context, T model) => null;
FloatingActionButtonLocation? getFloatingActionButtonLocation(
BuildContext context, T model) =>
null;
bool getDrawerEnableOpenDragGesture(BuildContext context, T model) => true;
Widget? getDrawer(BuildContext context, T model) => null;
Widget makeDefaultPage(BuildContext context, T model,
{Widget? titleRow,
List<Widget>? actions,
Widget? content,
bool automaticallyImplyLeading = true}) {
return NavigationView(
pane: NavigationPane(
size: const NavigationPaneSize(openWidth: 0),
),
appBar: NavigationAppBar(
automaticallyImplyLeading: automaticallyImplyLeading,
title: DragToMoveArea(
child: titleRow ??
Row(
children: [
Text(getUITitle(context, model)),
],
),
),
actions: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [...?actions, const WindowButtons()],
)),
paneBodyBuilder: (
PaneItem? item,
Widget? body,
) {
return SizedBox(
height: MediaQuery.of(context).size.height,
child: content ?? makeLoading(context),
);
},
);
}
@mustCallSuper
@override
void initState() {
dPrint("[base] <$runtimeType> UI Init");
super.initState();
}
@mustCallSuper
@override
void dispose() {
dPrint("[base] <$runtimeType> UI Disposed");
_needDisposeModel?.dispose();
_needDisposeModel = null;
super.dispose();
}
///
dismissKeyBoard() {
FocusManager.instance.primaryFocus?.unfocus();
}
Widget errorBody(BuildContext context, Widget? child, T model) {
if (model.uiErrorMsg.isNotEmpty) {
//
return InkWell(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"Error",
style: Theme.of(context).textTheme.bodyLarge,
),
const SizedBox(
height: 6,
),
Text(model.uiErrorMsg),
],
)),
onTap: () async {
await model.onErrorReloadData();
},
);
}
if (child == null) return makeLoading(context);
return child;
}
// void updateStatusBarIconColor(BuildContext context) {
// SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
// statusBarBrightness: Theme.of(context).brightness,
// statusBarIconBrightness: getAndroidIconBrightness(context),
// ));
// }
ChangeNotifierProvider<T> bindUIModel() {
final createdModel = widget.modelCreate();
if (createdModel is T) {
_needDisposeModel = createdModel;
return ChangeNotifierProvider<T>((ref) {
return createdModel..context = context;
});
}
return createdModel;
}
// Widget pullToRefreshBody(
// {required BaseUIModel model, required Widget child}) {
// refreshController ??= RefreshController();
// return AppSmartRefresher(
// enablePullUp: false,
// controller: refreshController,
// onRefresh: () async {
// await model.reloadData();
// refreshController?.refreshCompleted();
// },
// child: child,
// );
// }
makeSvgColor(Color color, {BlendMode blendMode = BlendMode.color}) {
return ui.ColorFilter.mode(color, blendMode);
}
}

View File

@ -1,125 +0,0 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'ui.dart';
export '../common/utils/base_utils.dart';
export 'ui.dart';
class BaseUIModel extends ChangeNotifier {
String uiErrorMsg = "";
bool _isDisposed = false;
bool get mounted => !_isDisposed;
BuildContext? context;
BaseUIModel() {
initModel();
}
@mustCallSuper
void initModel() {
dPrint("[base] <$runtimeType> Model Init");
loadData();
}
@mustCallSuper
@override
void dispose() {
_isDisposed = true;
_childUIModels?.forEach((k, value) {
(value as BaseUIModel).dispose();
_childUIModels?[k] = null;
});
dPrint("[base] <$runtimeType> Model Disposed");
super.dispose();
}
Future loadData() async {}
Future reloadData() async {
return loadData();
}
Future onErrorReloadData() async {
return loadData();
}
@override
void notifyListeners() {
if (!mounted) return;
super.notifyListeners();
}
Future<T?> handleError<T>(Future<T> Function() requestFunc,
{bool showFullScreenError = false, String? errorOverride}) async {
uiErrorMsg = "";
if (mounted) notifyListeners();
try {
return await requestFunc();
} catch (e) {
dPrint("$runtimeType.handleError Error:$e");
String errorMsg = "Unknown Error";
// if (e is AppHttpResultData && stringIsNotEmpty(e.msg)) {
// errorMsg = e.msg!;
// return null;
// } else {
// errorMsg = e.toString();
// }
errorMsg = e.toString();
if (showFullScreenError) {
uiErrorMsg = errorMsg;
notifyListeners();
return null;
}
showToast(context!, errorOverride ?? errorMsg);
}
return null;
}
Map<dynamic, dynamic>? _childUIModels;
Map<dynamic, dynamic>? _childUIProviders;
BaseUIModel? onCreateChildUIModel(modelKey) => null;
dynamic _getChildUIModel(modelKey) {
_childUIModels ??= {};
final cachedModel = _childUIModels![modelKey];
if (cachedModel != null) {
return (cachedModel);
}
final newModel = onCreateChildUIModel(modelKey);
_childUIModels![modelKey] = newModel!;
return newModel;
}
ChangeNotifierProvider<M> getChildUIModelProviders<M extends BaseUIModel>(
modelKey) {
_childUIProviders ??= {};
if (_childUIProviders![modelKey] == null) {
_childUIProviders![modelKey] = ChangeNotifierProvider<M>((ref) {
final c = (_getChildUIModel(modelKey) as M);
return c..context = context;
});
}
return _childUIProviders![modelKey]!;
}
T? getCreatedChildUIModel<T extends BaseUIModel>(String modelKey) {
return _childUIModels?[modelKey] as T?;
}
Future<void> reloadAllChildModels() async {
if (_childUIModels == null) return;
final futureList = <Future>[];
for (var value in _childUIModels!.entries) {
futureList.add(value.value.reloadData());
}
await Future.wait(futureList);
notifyListeners();
}
dismissKeyBoard() {
FocusManager.instance.primaryFocus?.unfocus();
}
}

View File

@ -1,93 +0,0 @@
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter_acrylic/flutter_acrylic.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';
import 'package:starcitizen_doctor/api/api.dart';
import 'package:starcitizen_doctor/data/app_version_data.dart';
import 'package:window_manager/window_manager.dart';
import '../base/ui.dart';
class AppConf {
static const String appVersion = "2.9.5+1 Beta";
static const int appVersionCode = 19;
static const String appVersionDate = "2023-10-18";
static const String gitlabHomeUrl =
"https://jihulab.com/StarCitizenCN_Community/StarCitizenDoctor";
static const String gitlabLocalizationUrl =
"https://jihulab.com/StarCitizenCN_Community/LocalizationData";
static const String apiRepoPath =
"https://jihulab.com/StarCitizenCN_Community/api/-/raw/main/";
static const String gitlabApiPath = "https://jihulab.com/api/v4/";
static late final String applicationSupportDir;
static AppVersionData? networkVersionData;
static bool offlineMode = false;
static late final WindowsDeviceInfo windowsDeviceInfo;
static init() async {
WidgetsFlutterBinding.ensureInitialized();
/// init device info
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
windowsDeviceInfo = await deviceInfo.windowsInfo;
/// init Data
applicationSupportDir =
(await getApplicationSupportDirectory()).absolute.path;
dPrint("applicationSupportDir == $applicationSupportDir");
try {
Hive.init("$applicationSupportDir/db");
await Hive.openBox("app_conf");
} catch (e) {
exit(1);
}
/// init windows
await windowManager.ensureInitialized();
windowManager.waitUntilReadyToShow().then((_) async {
await windowManager.setSize(const Size(1280, 820));
await windowManager.setMinimumSize(const Size(1280, 820));
await windowManager.center(animate: true);
await windowManager.setSkipTaskbar(false);
await windowManager.setTitleBarStyle(
TitleBarStyle.hidden,
windowButtonVisibility: false,
);
await windowManager.show();
await Window.initialize();
if (windowsDeviceInfo.productName.contains("Windows 11")) {
await Window.setEffect(
effect: WindowEffect.acrylic,
);
}
await Window.hideWindowControls();
});
await _checkUpdate();
}
static String getUpgradePath() {
return "${AppConf.applicationSupportDir}/._upgrade";
}
static Future<void> _checkUpdate() async {
// clean path
final dir = Directory(getUpgradePath());
if (await dir.exists()) {
dir.delete(recursive: true);
}
try {
networkVersionData = await Api.getAppVersion();
dPrint(
"lastVersion=${networkVersionData?.lastVersion} ${networkVersionData?.lastVersionCode}");
} catch (e) {
dPrint("_checkUpdate Error:$e");
}
}
}

View File

@ -0,0 +1,47 @@
import 'dart:io';
import 'package:archive/archive.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
class BinaryModuleConf {
static const _modules = {
"aria2c": "0",
"unp4kc": "1",
};
static Future extractModule(List<String> modules, String workingDir) async {
for (var m in _modules.entries) {
if (!modules.contains(m.key)) continue;
final name = m.key;
final version = m.value;
final dir = "$workingDir\\$name";
final versionFile = File("$dir\\version");
if (kReleaseMode &&
await versionFile.exists() &&
(await versionFile.readAsString()).trim() == version) {
dPrint(
"BinaryModuleConf.extractModule skip $name version == $version");
continue;
}
// write model file
final zipBuffer = await rootBundle.load("assets/binary/$name.zip");
final decoder = ZipDecoder().decodeBytes(zipBuffer.buffer.asUint8List());
for (var value in decoder.files) {
final filename = value.name;
if (value.isFile) {
final data = value.content as List<int>;
final file = File('$dir\\$filename');
await file.create(recursive: true);
await file.writeAsBytes(data);
} else {
await Directory('$dir\\$filename').create(recursive: true);
}
}
// write version file
await versionFile.writeAsString(version);
dPrint("BinaryModuleConf.extractModule $name $dir");
}
}
}

26
lib/common/conf/conf.dart Normal file
View File

@ -0,0 +1,26 @@
class ConstConf {
static const String appVersion = "2.14.1";
static const int appVersionCode = 65;
static const String appVersionDate = "2025-05-08";
static const _gameChannels = [
"LIVE",
"4.0_PREVIEW",
"PTU",
"EPTU",
"TECH-PREVIEW",
"HOTFIX",
];
static const isMSE = String.fromEnvironment("MSE", defaultValue: "false") == "true";
static const dohAddress = "https://223.6.6.6/resolve";
static const inputMethodServerPort = 59399;
}
class AppConf {
static List<String>? _networkGameChannels;
static setNetworkChannels(List<String>? channels) {
_networkGameChannels = channels;
}
static List<String> get gameChannels => _networkGameChannels ?? ConstConf._gameChannels;
}

View File

@ -0,0 +1,114 @@
import 'package:starcitizen_doctor/api/api.dart';
import 'package:starcitizen_doctor/common/io/doh_client.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/rust/http_package.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
class URLConf {
/// HOME API
static String gitApiHome = "https://git.scbox.xkeyc.cn";
static String rssApiHome = "https://rss.scbox.xkeyc.cn";
static const String analyticsApiHome = "https://scbox.org";
static bool isUrlCheckPass = false;
/// URLS
static String get giteaAttachmentsUrl => "$gitApiHome/SCToolBox/Release";
static String get gitlabLocalizationUrl =>
"$gitApiHome/SCToolBox/LocalizationData";
static String get gitApiRSILauncherEnhanceUrl =>
"$gitApiHome/SCToolBox/RSILauncherEnhance";
static String get apiRepoPath => "$gitApiHome/SCToolBox/api/raw/branch/main";
static String get gitlabApiPath => "$gitApiHome/api/v1/";
static String get webTranslateHomeUrl =>
"$gitApiHome/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales";
static String get rssVideoUrl =>
"$rssApiHome/bilibili/user/channel/27976358/290653";
static String get rssTextUrl2 =>
"$rssApiHome/baidu/tieba/user/%E7%81%AC%E7%81%ACG%E7%81%AC%E7%81%AC&";
static const String googleTranslateApiUrl =
"https://translate-g-proxy.xkeyc.com";
static const feedbackUrl = "https://support.citizenwiki.cn/all";
static const feedbackFAQUrl = "https://support.citizenwiki.cn/t/sc-toolbox";
static String nav42KitUrl = "https://payload.citizenwiki.cn/api/community-navs?sort=is_sponsored&depth=2&page=1&limit=1000";
static String get devReleaseUrl => "$gitApiHome/SCToolBox/Release/releases";
static Future<bool> checkHost() async {
// 使 DNS
final gitApiList = _genFinalList(await dnsLookupTxt("git.dns.scbox.org"));
dPrint("DNS gitApiList ==== $gitApiList");
final fasterGit = await getFasterUrl(gitApiList);
dPrint("gitApiList.Faster ==== $fasterGit");
if (fasterGit != null) {
gitApiHome = fasterGit;
}
final rssApiList = _genFinalList(await dnsLookupTxt("rss.dns.scbox.org"));
final fasterRss = await getFasterUrl(rssApiList);
dPrint("DNS rssApiList ==== $rssApiList");
dPrint("rssApiList.Faster ==== $fasterRss");
if (fasterRss != null) {
rssApiHome = fasterRss;
}
isUrlCheckPass = fasterGit != null && fasterRss != null;
return isUrlCheckPass;
}
static Future<List<String>> dnsLookupTxt(String host) async {
if (await Api.isUseInternalDNS()) {
dPrint("[URLConf] use internal DNS LookupTxt $host");
return RSHttp.dnsLookupTxt(host);
}
dPrint("[URLConf] use DOH LookupTxt $host");
return (await DohClient.resolveTXT(host)) ?? [];
}
static Future<String?> getFasterUrl(List<String> urls) async {
String firstUrl = "";
int callLen = 0;
void onCall(RustHttpResponse? response, String url) {
callLen++;
if (response != null && response.statusCode == 200 && firstUrl.isEmpty) {
firstUrl = url;
}
}
for (var value in urls) {
RSHttp.head(value).then((resp) => onCall(resp, value), onError: (err) {
callLen++;
dPrint("RSHttp.head error $err");
});
}
while (true) {
await Future.delayed(const Duration(milliseconds: 16));
if (firstUrl.isNotEmpty) {
return firstUrl;
}
if (callLen == urls.length && firstUrl.isEmpty) {
return null;
}
}
}
static List<String> _genFinalList(List<String> sList) {
List<String> list = [];
for (var ll in sList) {
final ssList = ll.split(",");
for (var value in ssList) {
list.add(value);
}
}
return list;
}
}

View File

@ -1,10 +1,13 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import '../utils/base_utils.dart'; import 'package:hive_ce/hive.dart';
import 'package:starcitizen_doctor/common/conf/conf.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
class SCLoggerHelper { class SCLoggerHelper {
static Future<String?> getLogFilePath() async { static Future<String?> getLogFilePath() async {
if (!Platform.isWindows) return null;
Map<String, String> envVars = Platform.environment; Map<String, String> envVars = Platform.environment;
final appDataPath = envVars["appdata"]; final appDataPath = envVars["appdata"];
if (appDataPath == null) { if (appDataPath == null) {
@ -28,19 +31,16 @@ class SCLoggerHelper {
} }
static Future<List?> getLauncherLogList() async { static Future<List?> getLauncherLogList() async {
if (!Platform.isWindows) return [];
try {
final jsonLogPath = await getLogFilePath(); final jsonLogPath = await getLogFilePath();
if (jsonLogPath == null) return null; if (jsonLogPath == null) throw "no file path";
var jsonString = utf8.decode(await File(jsonLogPath).readAsBytes()); var jsonString = utf8.decode(await File(jsonLogPath).readAsBytes());
if (jsonString.endsWith("\n")) { return jsonString.split("\n");
jsonString = jsonString.substring(0, jsonString.length - 3); } catch (e) {
dPrint(e);
return [];
} }
if (jsonString.endsWith(" ")) {
jsonString = jsonString.substring(0, jsonString.length - 3);
}
if (jsonString.endsWith(",")) {
jsonString = jsonString.substring(0, jsonString.length - 3);
}
return json.decode("[$jsonString]");
} }
static Future<List<String>> getGameInstallPath(List listData, static Future<List<String>> getGameInstallPath(List listData,
@ -48,34 +48,146 @@ class SCLoggerHelper {
List<String> withVersion = const ["LIVE"]}) async { List<String> withVersion = const ["LIVE"]}) async {
List<String> scInstallPaths = []; List<String> scInstallPaths = [];
for (var v in withVersion) { checkAndAddPath(String path, bool checkExists) async {
for (var i = listData.length - 1; i > 0; i--) { // \\ \
final m = listData[i]; path = path.replaceAll(RegExp(r'\\+'), "\\");
final info = m["[browser][info] "]; if (path.isNotEmpty && !scInstallPaths.contains(path)) {
if (info is String) {
String installPath = "";
if (info.contains("Installing Star Citizen $v")) {
installPath = "${info.split(" at ")[1]}\\$v";
}
if (info.contains("Launching Star Citizen $v from")) {
installPath = info
.replaceAll("Launching Star Citizen $v from (", "")
.replaceAll(")", "");
}
if (installPath.isNotEmpty && !scInstallPaths.contains(installPath)) {
if (!checkExists) { if (!checkExists) {
dPrint("find installPath == $installPath"); dPrint("find installPath == $path");
scInstallPaths.add(installPath); scInstallPaths.add(path);
} else if (await File("$installPath/Bin64/StarCitizen.exe") } else if (await File("$path/Bin64/StarCitizen.exe").exists() &&
.exists()) { await File("$path/Data.p4k").exists()) {
dPrint("find installPath == $installPath"); dPrint("find installPath == $path");
scInstallPaths.add(installPath); scInstallPaths.add(path);
}
}
} }
} }
} }
final confBox = await Hive.openBox("app_conf");
final path = confBox.get("custom_game_path");
if (path != null && path != "") {
for (var v in withVersion) {
await checkAndAddPath("$path\\$v", checkExists);
}
}
try {
for (var v in withVersion) {
String pattern =
r'([a-zA-Z]:\\\\[^\\\\]*\\\\[^\\\\]*\\\\StarCitizen\\\\' + v + r')';
RegExp regExp = RegExp(pattern, caseSensitive: false);
for (var i = listData.length - 1; i > 0; i--) {
final line = listData[i];
final matches = regExp.allMatches(line);
for (var match in matches) {
await checkAndAddPath(match.group(0)!, checkExists);
}
}
}
if (scInstallPaths.isNotEmpty) {
//
for (var fileName in List.from(scInstallPaths)) {
for (var v in withVersion) {
if (fileName.toString().endsWith(v)) {
for (var nv in withVersion) {
final nextName =
"${fileName.toString().replaceAll("\\$v", "")}\\$nv";
await checkAndAddPath(nextName, true);
}
}
}
}
}
} catch (e) {
dPrint(e);
if (scInstallPaths.isEmpty) rethrow;
}
return scInstallPaths; return scInstallPaths;
} }
static String getGameChannelID(String installPath) {
for (var value in AppConf.gameChannels) {
if (installPath.endsWith("\\$value")) {
return value;
}
}
return "UNKNOWN";
}
static Future<List<String>?> getGameRunningLogs(String gameDir) async {
final logFile = File("$gameDir/Game.log");
if (!await logFile.exists()) {
return null;
}
return await logFile.readAsLines(
encoding: const Utf8Codec(allowMalformed: true));
}
static MapEntry<String, String>? getGameRunningLogInfo(List<String> logs) {
for (var i = logs.length - 1; i > 0; i--) {
final line = logs[i];
final r = _checkRunningLine(line);
if (r != null) {
return r;
}
}
return null;
}
static MapEntry<String, String>? _checkRunningLine(String line) {
if (line.contains("STATUS_CRYENGINE_OUT_OF_SYSMEM")) {
return MapEntry(S.current.doctor_game_error_low_memory,
S.current.doctor_game_error_low_memory_info);
}
if (line.contains("EXCEPTION_ACCESS_VIOLATION")) {
return MapEntry(S.current.doctor_game_error_generic_info,
"https://docs.qq.com/doc/DUURxUVhzTmZoY09Z");
}
if (line.contains("DXGI_ERROR_DEVICE_REMOVED")) {
return MapEntry(S.current.doctor_game_error_gpu_crash,
"https://www.bilibili.com/read/cv19335199");
}
if (line.contains("Wakeup socket sendto error")) {
return MapEntry(S.current.doctor_game_error_socket_error,
S.current.doctor_game_error_socket_error_info);
}
if (line.contains("The requested operation requires elevated")) {
return MapEntry(S.current.doctor_game_error_permissions_error,
S.current.doctor_game_error_permissions_error_info);
}
if (line.contains(
"The process cannot access the file because is is being used by another process")) {
return MapEntry(S.current.doctor_game_error_game_process_error,
S.current.doctor_game_error_game_process_error_info);
}
if (line.contains("0xc0000043")) {
return MapEntry(S.current.doctor_game_error_game_damaged_file,
S.current.doctor_game_error_game_damaged_file_info);
}
if (line.contains("option to verify the content of the Data.p4k file")) {
return MapEntry(S.current.doctor_game_error_game_damaged_p4k_file,
S.current.doctor_game_error_game_damaged_p4k_file_info);
}
if (line.contains("OUTOFMEMORY Direct3D could not allocate")) {
return MapEntry(S.current.doctor_game_error_low_gpu_memory,
S.current.doctor_game_error_low_gpu_memory_info);
}
if (line.contains(
"try disabling with r_vulkanDisableLayers = 1 in your user.cfg")) {
return MapEntry(S.current.doctor_game_error_gpu_vulkan_crash,
S.current.doctor_game_error_gpu_vulkan_crash_info);
}
/// Unknown
if (line.contains("network.replicatedEntityHandle")) {
return const MapEntry("_", "network.replicatedEntityHandle");
}
if (line.contains("Exception Unknown")) {
return const MapEntry("_", "Exception Unknown");
}
return null;
}
} }

View File

@ -1,11 +1,33 @@
import 'dart:io'; import 'dart:io';
import 'package:starcitizen_doctor/common/utils/base_utils.dart'; import 'package:hive_ce/hive.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
class SystemHelper { class SystemHelper {
static String powershellPath = "powershell.exe";
static initPowershellPath() async {
try {
var result = await Process.run(powershellPath, ["echo", "pong"]);
if (!result.stdout.toString().startsWith("pong") &&
powershellPath == "powershell.exe") {
throw "powershell check failed";
}
} catch (e) {
Map<String, String> envVars = Platform.environment;
final systemRoot = envVars["SYSTEMROOT"];
if (systemRoot != null) {
final autoSearchPath =
"$systemRoot\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
dPrint("auto search powershell path === $autoSearchPath");
powershellPath = autoSearchPath;
}
}
}
static Future<bool> checkNvmePatchStatus() async { static Future<bool> checkNvmePatchStatus() async {
try { try {
var result = await Process.run('powershell.exe', [ var result = await Process.run(SystemHelper.powershellPath, [
"Get-ItemProperty", "Get-ItemProperty",
"-Path", "-Path",
"\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"", "\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"",
@ -25,7 +47,7 @@ class SystemHelper {
} }
static Future<String> addNvmePatch() async { static Future<String> addNvmePatch() async {
var result = await Process.run('powershell.exe', [ var result = await Process.run(powershellPath, [
'New-ItemProperty', 'New-ItemProperty',
"-Path", "-Path",
"\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"", "\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"",
@ -41,7 +63,7 @@ class SystemHelper {
static doRemoveNvmePath() async { static doRemoveNvmePath() async {
try { try {
var result = await Process.run('powershell.exe', [ var result = await Process.run(powershellPath, [
"Clear-ItemProperty", "Clear-ItemProperty",
"-Path", "-Path",
"\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"", "\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"",
@ -60,18 +82,32 @@ class SystemHelper {
} }
/// RSI /// RSI
static Future<String> getRSILauncherPath() async { static Future<String> getRSILauncherPath({bool skipEXE = false}) async {
final confBox = await Hive.openBox("app_conf");
final path = confBox.get("custom_launcher_path");
if (path != null && path != "") {
if (await File(path).exists()) {
if (skipEXE) {
return "${path.toString().replaceAll("\\RSI Launcher.exe", "")}\\";
}
return path;
}
}
Map<String, String> envVars = Platform.environment; Map<String, String> envVars = Platform.environment;
final programDataPath = envVars["programdata"]; final programDataPath = envVars["programdata"];
final rsiFilePath = final rsiFilePath =
"$programDataPath\\Microsoft\\Windows\\Start Menu\\Programs\\Roberts Space Industries\\RSI Launcher.lnk"; "$programDataPath\\Microsoft\\Windows\\Start Menu\\Programs\\Roberts Space Industries\\RSI Launcher.lnk";
final rsiLinkFile = File(rsiFilePath); final rsiLinkFile = File(rsiFilePath);
if (await rsiLinkFile.exists()) { if (await rsiLinkFile.exists()) {
final r = await Process.run("powershell.exe", [ final r = await Process.run(SystemHelper.powershellPath, [
"(New-Object -ComObject WScript.Shell).CreateShortcut(\"$rsiFilePath\").targetpath" "(New-Object -ComObject WScript.Shell).CreateShortcut(\"$rsiFilePath\").targetpath"
]); ]);
if (r.stdout.toString().contains("RSI Launcher.exe")) { if (r.stdout.toString().contains("RSI Launcher.exe")) {
final start = r.stdout.toString().split("RSI Launcher.exe"); final start = r.stdout.toString().split("RSI Launcher.exe");
if (skipEXE) {
return start[0];
}
return "${start[0]}RSI Launcher.exe"; return "${start[0]}RSI Launcher.exe";
} }
} }
@ -80,7 +116,7 @@ class SystemHelper {
static killRSILauncher() async { static killRSILauncher() async {
var psr = await Process.run( var psr = await Process.run(
"powershell", ["ps", "\"RSI Launcher\"", "|select -expand id"]); powershellPath, ["ps", "\"RSI Launcher\"", "|select -expand id"]);
if (psr.stderr == "") { if (psr.stderr == "") {
for (var value in (psr.stdout ?? "").toString().split("\n")) { for (var value in (psr.stdout ?? "").toString().split("\n")) {
dPrint(value); dPrint(value);
@ -92,7 +128,7 @@ class SystemHelper {
} }
static Future<List<String>> getPID(String name) async { static Future<List<String>> getPID(String name) async {
final r = await Process.run("powershell", ["(ps $name).Id"]); final r = await Process.run(powershellPath, ["(ps $name).Id"]);
final str = r.stdout.toString().trim(); final str = r.stdout.toString().trim();
dPrint(str); dPrint(str);
if (str.isEmpty) return []; if (str.isEmpty) return [];
@ -103,14 +139,25 @@ class SystemHelper {
// check running and kill // check running and kill
await killRSILauncher(); await killRSILauncher();
// launch // launch
final r = await Process.run("powershell", ["start", "\"$path\""]); final processorAffinity = await SystemHelper.getCpuAffinity();
if (processorAffinity == null) {
Process.run(path, []);
} else {
Process.run("cmd.exe", [
'/C',
'Start',
'""',
'/High',
'/Affinity',
processorAffinity,
path,
]);
}
dPrint(path); dPrint(path);
dPrint(r.stdout);
dPrint(r.stderr);
} }
static Future<int> getSystemMemorySizeGB() async { static Future<int> getSystemMemorySizeGB() async {
final r = await Process.run("powershell", [ final r = await Process.run(powershellPath, [
"(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb" "(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb"
]); ]);
return int.tryParse(r.stdout.toString().trim()) ?? 0; return int.tryParse(r.stdout.toString().trim()) ?? 0;
@ -119,13 +166,19 @@ class SystemHelper {
static Future<String> getSystemCimInstance(String win32InstanceName, static Future<String> getSystemCimInstance(String win32InstanceName,
{pathName = "Name"}) async { {pathName = "Name"}) async {
final r = await Process.run( final r = await Process.run(
"powershell", ["(Get-CimInstance $win32InstanceName).$pathName"]); powershellPath, ["(Get-CimInstance $win32InstanceName).$pathName"]);
return r.stdout.toString().trim(); return r.stdout.toString().trim();
} }
static Future<String> getSystemName() async { static Future<String> getSystemName() async {
final r = await Process.run( final r = await Process.run(
"powershell", ["(Get-ComputerInfo | Select-Object -expand OsName)"]); powershellPath, ["(Get-ComputerInfo | Select-Object -expand OsName)"]);
return r.stdout.toString().trim();
}
static Future<String> getCpuName() async {
final r = await Process.run(
powershellPath, ["(Get-WmiObject -Class Win32_Processor).Name"]);
return r.stdout.toString().trim(); return r.stdout.toString().trim();
} }
@ -139,12 +192,12 @@ foreach ($adapter in $adapterMemory) {
} }
} }
"""; """;
final r = await Process.run("powershell", [cmd]); final r = await Process.run(powershellPath, [cmd]);
return r.stdout.toString().trim(); return r.stdout.toString().trim();
} }
static Future<String> getDiskInfo() async { static Future<String> getDiskInfo() async {
return (await Process.run("powershell", return (await Process.run(powershellPath,
["Get-PhysicalDisk | format-table BusType,FriendlyName,Size"])) ["Get-PhysicalDisk | format-table BusType,FriendlyName,Size"]))
.stdout .stdout
.toString() .toString()
@ -173,4 +226,55 @@ foreach ($adapter in $adapterMemory) {
} catch (_) {} } catch (_) {}
return totalSize; return totalSize;
} }
static Future<int> getNumberOfLogicalProcessors() async {
final cpuNumberResult = await Process.run(powershellPath,
["(Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors"]);
if (cpuNumberResult.exitCode != 0) return 0;
return int.tryParse(cpuNumberResult.stdout.toString().trim()) ?? 0;
}
static Future<String?> getCpuAffinity() async {
final confBox = await Hive.openBox("app_conf");
final eCoreCount = int.tryParse(
confBox.get("gameLaunch_eCore_count", defaultValue: "0")) ??
0;
final cpuNumber = await getNumberOfLogicalProcessors();
if (cpuNumber == 0 || eCoreCount == 0 || eCoreCount > cpuNumber) {
return null;
}
StringBuffer sb = StringBuffer();
for (var i = 0; i < cpuNumber; i++) {
if (i < eCoreCount) {
sb.write("0");
} else {
sb.write("1");
}
}
final binaryString = sb.toString();
int hexDigits = (binaryString.length / 4).ceil();
dPrint("Affinity sb ==== $sb");
return int.parse(binaryString, radix: 2)
.toRadixString(16)
.padLeft(hexDigits, '0')
.toUpperCase();
}
static Future openDir(path, {bool isFile = false}) async {
dPrint("SystemHelper.openDir path === $path");
if (Platform.isWindows) {
await Process.run(SystemHelper.powershellPath,
["explorer.exe", isFile ? "/select,$path" : "\"/select,\"$path\"\""]);
}
}
static String getHostsFilePath() {
if (Platform.isWindows) {
final envVars = Platform.environment;
final systemRoot = envVars["SYSTEMROOT"];
return "$systemRoot\\System32\\drivers\\etc\\hosts";
}
return "/etc/hosts";
}
} }

View File

@ -0,0 +1,46 @@
import 'dart:convert';
import 'package:starcitizen_doctor/common/conf/conf.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
import 'package:starcitizen_doctor/data/doh_client_response_data.dart';
class DohClient {
static Future<DohClientResponseData?> resolve(
String domain, String type) async {
try {
final r = await RSHttp.getText(
"${ConstConf.dohAddress}?name=$domain&type=$type");
final data = DohClientResponseData.fromJson(json.decode(r));
return data;
} catch (e) {
dPrint("DohClient.resolve error: $e");
return null;
}
}
static Future<List<String>?> resolveIP(String domain, String type) async {
final data = await resolve(domain, type);
if (data == null) return [];
return data.answer?.map((e) => _removeDataPadding(e.data)).toList();
}
static Future<List<String>?> resolveTXT(String domain) async {
final data = await resolve(domain, "TXT");
if (data == null) return [];
return data.answer?.map((e) => _removeDataPadding(e.data)).toList();
}
static String _removeDataPadding(String? data) {
// data demo: {"data":"\"https://git.scbox.xkeyc.cn,https://gitapi.scbox.org\""}
if (data == null) return "";
data = data.trim();
if (data.startsWith("\"")) {
data = data.substring(1);
}
if (data.endsWith("\"")) {
data = data.substring(0, data.length - 1);
}
return data;
}
}

View File

@ -0,0 +1,94 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:starcitizen_doctor/common/conf/conf.dart';
import 'package:starcitizen_doctor/common/rust/api/http_api.dart' as rust_http;
import 'package:starcitizen_doctor/common/rust/api/http_api.dart';
import 'package:starcitizen_doctor/common/rust/http_package.dart';
class RSHttp {
static init() async {
await rust_http.setDefaultHeader(headers: {
"User-Agent":
"SCToolBox/${ConstConf.appVersion} (${ConstConf.appVersionCode})${ConstConf.isMSE ? "" : " DEV"} RSHttp"
});
}
static Future<RustHttpResponse> get(
String url, {
Map<String, String>? headers,
String? withIpAddress,
bool? withCustomDns,
}) async {
final r = await rust_http.fetch(
method: MyMethod.gets,
url: url,
headers: headers,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns,
);
return r;
}
static Future<String> getText(
String url, {
Map<String, String>? headers,
String? withIpAddress,
bool? withCustomDns,
}) async {
final r = await get(url,
headers: headers,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns);
if (r.data == null) return "";
final str = utf8.decode(r.data!);
return str;
}
static Future<RustHttpResponse> postData(
String url, {
Map<String, String>? headers,
String? contentType,
Uint8List? data,
String? withIpAddress,
bool? withCustomDns,
}) async {
if (contentType != null) {
headers ??= {};
headers["Content-Type"] = contentType;
}
final r = await rust_http.fetch(
method: MyMethod.post,
url: url,
headers: headers,
inputData: data,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns,
);
return r;
}
static Future<RustHttpResponse> head(
String url, {
Map<String, String>? headers,
String? withIpAddress,
bool? withCustomDns,
}) async {
final r = await rust_http.fetch(
method: MyMethod.head,
url: url,
headers: headers,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns,
);
return r;
}
static Future<List<String>> dnsLookupTxt(String host) async {
return await rust_http.dnsLookupTxt(host: host);
}
static Future<List<String>> dnsLookupIps(String host) async {
return await rust_http.dnsLookupIps(host: host);
}
}

View File

@ -0,0 +1,41 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
Future<RsiLauncherAsarData> getRsiLauncherAsarData(
{required String asarPath}) =>
RustLib.instance.api
.crateApiAsarApiGetRsiLauncherAsarData(asarPath: asarPath);
class RsiLauncherAsarData {
final String asarPath;
final String mainJsPath;
final Uint8List mainJsContent;
const RsiLauncherAsarData({
required this.asarPath,
required this.mainJsPath,
required this.mainJsContent,
});
Future<void> writeMainJs({required List<int> content}) =>
RustLib.instance.api.crateApiAsarApiRsiLauncherAsarDataWriteMainJs(
that: this, content: content);
@override
int get hashCode =>
asarPath.hashCode ^ mainJsPath.hashCode ^ mainJsContent.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is RsiLauncherAsarData &&
runtimeType == other.runtimeType &&
asarPath == other.asarPath &&
mainJsPath == other.mainJsPath &&
mainJsContent == other.mainJsContent;
}

View File

@ -0,0 +1,47 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import '../frb_generated.dart';
import '../http_package.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These functions are ignored because they are not marked as `pub`: `_my_method_to_hyper_method`
Future<void> setDefaultHeader({required Map<String, String> headers}) =>
RustLib.instance.api.crateApiHttpApiSetDefaultHeader(headers: headers);
Future<RustHttpResponse> fetch(
{required MyMethod method,
required String url,
Map<String, String>? headers,
Uint8List? inputData,
String? withIpAddress,
bool? withCustomDns}) =>
RustLib.instance.api.crateApiHttpApiFetch(
method: method,
url: url,
headers: headers,
inputData: inputData,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns);
Future<List<String>> dnsLookupTxt({required String host}) =>
RustLib.instance.api.crateApiHttpApiDnsLookupTxt(host: host);
Future<List<String>> dnsLookupIps({required String host}) =>
RustLib.instance.api.crateApiHttpApiDnsLookupIps(host: host);
enum MyMethod {
options,
gets,
post,
put,
delete,
head,
trace,
connect,
patch,
;
}

View File

@ -0,0 +1,54 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These functions are ignored because they are not marked as `pub`: `_process_output`
// These types are ignored because they are neither used by any `pub` functions nor (for structs and enums) marked `#[frb(unignore)]`: `RsProcess`
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `clone`
Stream<RsProcessStreamData> start(
{required String executable,
required List<String> arguments,
required String workingDirectory}) =>
RustLib.instance.api.crateApiRsProcessStart(
executable: executable,
arguments: arguments,
workingDirectory: workingDirectory);
Future<void> write({required int rsPid, required String data}) =>
RustLib.instance.api.crateApiRsProcessWrite(rsPid: rsPid, data: data);
class RsProcessStreamData {
final RsProcessStreamDataType dataType;
final String data;
final int rsPid;
const RsProcessStreamData({
required this.dataType,
required this.data,
required this.rsPid,
});
@override
int get hashCode => dataType.hashCode ^ data.hashCode ^ rsPid.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is RsProcessStreamData &&
runtimeType == other.runtimeType &&
dataType == other.dataType &&
data == other.data &&
rsPid == other.rsPid;
}
enum RsProcessStreamDataType {
output,
error,
exit,
;
}

View File

@ -0,0 +1,16 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
Future<void> sendNotify(
{String? summary, String? body, String? appName, String? appId}) =>
RustLib.instance.api.crateApiWin32ApiSendNotify(
summary: summary, body: body, appName: appName, appId: appId);
Future<bool> setForegroundWindow({required String windowName}) =>
RustLib.instance.api
.crateApiWin32ApiSetForegroundWindow(windowName: windowName);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,60 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.9.0.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import 'frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
enum MyHttpVersion {
http09,
http10,
http11,
http2,
http3,
httpUnknown,
;
}
class RustHttpResponse {
final int statusCode;
final Map<String, String> headers;
final String url;
final BigInt? contentLength;
final MyHttpVersion version;
final String remoteAddr;
final Uint8List? data;
const RustHttpResponse({
required this.statusCode,
required this.headers,
required this.url,
this.contentLength,
required this.version,
required this.remoteAddr,
this.data,
});
@override
int get hashCode =>
statusCode.hashCode ^
headers.hashCode ^
url.hashCode ^
contentLength.hashCode ^
version.hashCode ^
remoteAddr.hashCode ^
data.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is RustHttpResponse &&
runtimeType == other.runtimeType &&
statusCode == other.statusCode &&
headers == other.headers &&
url == other.url &&
contentLength == other.contentLength &&
version == other.version &&
remoteAddr == other.remoteAddr &&
data == other.data;
}

View File

@ -0,0 +1,17 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:starcitizen_doctor/common/utils/base_utils.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
extension AsyncError on Future {
Future<T?> unwrap<T>({BuildContext? context}) async {
try {
return await this;
} catch (e) {
dPrint("unwrap error:$e");
if (context != null && context.mounted) {
showToast(context, S.current.app_common_error_info(e.toString()));
}
return null;
}
}
}

View File

@ -1,24 +1,21 @@
import 'dart:async';
import 'package:fluent_ui/fluent_ui.dart'; import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'dart:ui' as ui; import 'dart:ui' as ui;
void dPrint(src) { import 'package:flutter/services.dart';
if (kDebugMode) { import 'package:starcitizen_doctor/generated/l10n.dart';
print(src);
}
}
Future showToast(BuildContext context, String msg, Future showToast(BuildContext context, String msg, {BoxConstraints? constraints, String? title}) async {
{BoxConstraints? constraints}) async {
return showBaseDialog(context, return showBaseDialog(context,
title: "提示", title: title ?? S.current.app_common_tip,
content: Text(msg), content: Text(msg),
actions: [ actions: [
FilledButton( FilledButton(
child: const Padding( child: Padding(
padding: EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8), padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
child: Text('关闭'), child: Text(S.current.app_common_tip_i_know),
), ),
onPressed: () => Navigator.pop(context), onPressed: () => Navigator.pop(context),
), ),
@ -26,11 +23,11 @@ Future showToast(BuildContext context, String msg,
constraints: constraints); constraints: constraints);
} }
Future<bool> showConfirmDialogs( Future<bool> showConfirmDialogs(BuildContext context, String title, Widget content,
BuildContext context, String title, Widget content, {String confirm = "", String cancel = "", BoxConstraints? constraints}) async {
{String confirm = "确认", if (confirm.isEmpty) confirm = S.current.app_common_tip_confirm;
String cancel = "取消", if (cancel.isEmpty) cancel = S.current.app_common_tip_cancel;
BoxConstraints? constraints}) async {
final r = await showBaseDialog(context, final r = await showBaseDialog(context,
title: title, title: title,
content: content, content: content,
@ -38,8 +35,7 @@ Future<bool> showConfirmDialogs(
if (confirm.isNotEmpty) if (confirm.isNotEmpty)
FilledButton( FilledButton(
child: Padding( child: Padding(
padding: padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
child: Text(confirm), child: Text(confirm),
), ),
onPressed: () => Navigator.pop(context, true), onPressed: () => Navigator.pop(context, true),
@ -47,8 +43,7 @@ Future<bool> showConfirmDialogs(
if (cancel.isNotEmpty) if (cancel.isNotEmpty)
Button( Button(
child: Padding( child: Padding(
padding: padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
child: Text(cancel), child: Text(cancel),
), ),
onPressed: () => Navigator.pop(context, false), onPressed: () => Navigator.pop(context, false),
@ -58,17 +53,57 @@ Future<bool> showConfirmDialogs(
return r == true; return r == true;
} }
Future showBaseDialog(BuildContext context, Future<String?> showInputDialogs(BuildContext context,
{required String title, {required String title,
required Widget content, required String content,
List<Widget>? actions, BoxConstraints? constraints,
BoxConstraints? constraints}) async { String? initialValue,
List<TextInputFormatter>? inputFormatters}) async {
String? userInput;
constraints ??= BoxConstraints(maxWidth: MediaQuery
.of(context)
.size
.width * .38);
final ok = await showConfirmDialogs(
context,
title,
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (content.isNotEmpty)
Text(
content,
style: TextStyle(color: Colors.white.withValues(alpha: .6)),
),
const SizedBox(height: 8),
TextFormBox(
initialValue: initialValue,
onChanged: (str) {
userInput = str;
},
inputFormatters: inputFormatters,
),
],
),
constraints: constraints);
if (ok == true) return userInput;
return null;
}
Future showBaseDialog(BuildContext context,
{required String title, required Widget content, List<Widget>? actions, BoxConstraints? constraints}) async {
return await showDialog( return await showDialog(
context: context, context: context,
builder: (context) => ContentDialog( builder: (context) =>
ContentDialog(
title: Text(title), title: Text(title),
content: content, content: content,
constraints: constraints ?? kDefaultContentDialogConstraints, constraints: constraints ??
const BoxConstraints(
maxWidth: 512,
maxHeight: 756.0,
),
actions: actions, actions: actions,
), ),
); );
@ -78,10 +113,8 @@ bool stringIsNotEmpty(String? s) {
return s != null && (s.isNotEmpty); return s != null && (s.isNotEmpty);
} }
Future<Uint8List?> widgetToPngImage(GlobalKey repaintBoundaryKey, Future<Uint8List?> widgetToPngImage(GlobalKey repaintBoundaryKey, {double pixelRatio = 3.0}) async {
{double pixelRatio = 3.0}) async { RenderRepaintBoundary? boundary = repaintBoundaryKey.currentContext?.findRenderObject() as RenderRepaintBoundary?;
RenderRepaintBoundary? boundary = repaintBoundaryKey.currentContext
?.findRenderObject() as RenderRepaintBoundary?;
if (boundary == null) return null; if (boundary == null) return null;
ui.Image image = await boundary.toImage(pixelRatio: pixelRatio); ui.Image image = await boundary.toImage(pixelRatio: pixelRatio);
@ -91,5 +124,25 @@ Future<Uint8List?> widgetToPngImage(GlobalKey repaintBoundaryKey,
return pngBytes; return pngBytes;
} }
double roundDoubleTo(double value, double precision) => double roundDoubleTo(double value, double precision) => (value * precision).round() / precision;
(value * precision).round() / precision;
int getMinNumber(List<int> list) {
if (list.isEmpty) return 0;
list.sort((a, b) => a.compareTo(b));
return list.first;
}
String colorToHexCode(Color color, {ignoreTransparency = false}) {
final colorValue = color.toARGB32();
final colorAlpha = ((0xff000000 & colorValue) >> 24);
final r = ((0x00ff0000 & colorValue) >> 16).toRadixString(16).padLeft(2, '0');
final g = ((0x0000ff00 & colorValue) >> 8).toRadixString(16).padLeft(2, '0');
final b = ((0x000000ff & colorValue) >> 0).toRadixString(16).padLeft(2, '0');
final a = colorAlpha.toRadixString(16).padLeft(2, '0');
if (ignoreTransparency || colorAlpha == 255) {
return '#$r$g$b';
} else {
return '#$a$r$g$b';
}
}

View File

@ -0,0 +1,101 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:starcitizen_doctor/common/io/rs_http.dart';
class FileCacheUtils {
//
static final Map<String, Future<File>> _downloadingTasks = {};
//
static Directory? _cacheDir;
///
static Future<Directory> _getCacheDirectory() async {
if (_cacheDir != null) return _cacheDir!;
final tempDir = await getTemporaryDirectory();
_cacheDir = Directory(path.join(tempDir.path, 'ScToolbox_File_Cache'));
if (!await _cacheDir!.exists()) {
await _cacheDir!.create(recursive: true);
}
return _cacheDir!;
}
/// URL获取文件
static Future<File> getFile(String url) async {
//
if (_downloadingTasks.containsKey(url)) {
return _downloadingTasks[url]!;
}
final fileTask = _downloadFile(url);
_downloadingTasks[url] = fileTask;
try {
final file = await fileTask;
return file;
} finally {
//
_downloadingTasks.remove(url);
}
}
///
static Future<File> _downloadFile(String url) async {
// (使URL的MD5哈希作为文件名)
final filename = md5.convert(utf8.encode(url)).toString();
final cacheDir = await _getCacheDirectory();
final file = File(path.join(cacheDir.path, filename));
//
if (await file.exists()) {
return file;
}
//
final response = await RSHttp.get(url);
if (response.statusCode == 200) {
await file.writeAsBytes(response.data ?? []);
return file;
} else {
throw Exception('Failed to download file: ${response.statusCode}');
}
}
/// URL的缓存
static Future<bool> clearCache(String url) async {
try {
final filename = md5.convert(utf8.encode(url)).toString();
final cacheDir = await _getCacheDirectory();
final file = File(path.join(cacheDir.path, filename));
if (await file.exists()) {
await file.delete();
return true;
}
return false;
} catch (e) {
return false;
}
}
///
static Future<void> clearAllCache() async {
try {
final cacheDir = await _getCacheDirectory();
if (await cacheDir.exists()) {
await cacheDir.delete(recursive: true);
await cacheDir.create();
}
} catch (e) {
debugPrint('clear All Cache Error: $e');
}
}
}

View File

@ -0,0 +1 @@

43
lib/common/utils/log.dart Normal file
View File

@ -0,0 +1,43 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:synchronized/synchronized.dart';
export 'package:starcitizen_doctor/generated/l10n.dart';
var _logLock = Lock();
File? _logFile;
void dPrint(src) async {
if (kDebugMode) {
print(src);
return;
}
await _logLock.synchronized(() async {
try {
await _logFile?.writeAsString("$src\n", mode: FileMode.append);
} catch (_) {}
});
}
Future<void> initDPrintFile(String applicationSupportDir) async {
final now = DateTime.now();
final logFile =
File("$applicationSupportDir/logs/${now.millisecondsSinceEpoch}.log");
await logFile.create(recursive: true);
_logFile = logFile;
final logsDir = Directory("$applicationSupportDir/logs");
await for (final files in logsDir.list()) {
if (files is File) {
final stat = await files.stat();
if (stat.type == FileSystemEntityType.file &&
now.difference(await files.lastModified()).inDays > 7) {
await files.delete();
}
}
}
}
File? getDPrintFile() {
return _logFile;
}

View File

@ -0,0 +1,116 @@
import 'dart:convert';
import 'package:desktop_multi_window/desktop_multi_window.dart';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:starcitizen_doctor/app.dart';
import 'package:starcitizen_doctor/common/helper/log_helper.dart';
import 'package:starcitizen_doctor/generated/l10n.dart';
import 'package:starcitizen_doctor/ui/tools/log_analyze_ui/log_analyze_ui.dart';
import 'base_utils.dart';
part 'multi_window_manager.freezed.dart';
part 'multi_window_manager.g.dart';
@freezed
class MultiWindowAppState with _$MultiWindowAppState {
const factory MultiWindowAppState({
required String backgroundColor,
required String menuColor,
required String micaColor,
required List<String> gameInstallPaths,
String? languageCode,
String? countryCode,
}) = _MultiWindowAppState;
factory MultiWindowAppState.fromJson(Map<String, dynamic> json) => _$MultiWindowAppStateFromJson(json);
}
class MultiWindowManager {
static Future<void> launchSubWindow(String type, String title, AppGlobalState appGlobalState) async {
final gameInstallPaths = await SCLoggerHelper.getGameInstallPath(await SCLoggerHelper.getLauncherLogList() ?? []);
final window = await DesktopMultiWindow.createWindow(jsonEncode({
'window_type': type,
'app_state': _appStateToWindowState(
appGlobalState,
gameInstallPaths: gameInstallPaths,
).toJson(),
}));
window.setFrame(const Rect.fromLTWH(0, 0, 900, 1200));
window.setTitle(title);
await window.center();
await window.show();
// sendAppStateBroadcast(appGlobalState);
}
static sendAppStateBroadcast(AppGlobalState appGlobalState) {
DesktopMultiWindow.invokeMethod(
0,
'app_state_broadcast',
_appStateToWindowState(appGlobalState).toJson(),
);
}
static MultiWindowAppState _appStateToWindowState(AppGlobalState appGlobalState, {List<String>? gameInstallPaths}) {
return MultiWindowAppState(
backgroundColor: colorToHexCode(appGlobalState.themeConf.backgroundColor),
menuColor: colorToHexCode(appGlobalState.themeConf.menuColor),
micaColor: colorToHexCode(appGlobalState.themeConf.micaColor),
languageCode: appGlobalState.appLocale?.languageCode,
countryCode: appGlobalState.appLocale?.countryCode,
gameInstallPaths: gameInstallPaths ?? [],
);
}
static void runSubWindowApp(List<String> args) {
final argument = args[2].isEmpty ? const {} : jsonDecode(args[2]) as Map<String, dynamic>;
final windowAppState = MultiWindowAppState.fromJson(argument['app_state'] ?? {});
Widget? windowWidget;
switch (argument["window_type"]) {
case "log_analyze":
windowWidget = ToolsLogAnalyzeDialogUI(appState: windowAppState);
break;
default:
throw Exception('Unknown window type');
}
return runApp(ProviderScope(
child: FluentApp(
title: "StarCitizenToolBox",
restorationScopeId: "StarCitizenToolBox",
themeMode: ThemeMode.dark,
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
FluentLocalizations.delegate,
S.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: windowWidget,
theme: FluentThemeData(
brightness: Brightness.dark,
fontFamily: "SourceHanSansCN-Regular",
navigationPaneTheme: NavigationPaneThemeData(
backgroundColor: HexColor(windowAppState.backgroundColor),
),
menuColor: HexColor(windowAppState.menuColor),
micaBackgroundColor: HexColor(windowAppState.micaColor),
buttonTheme: ButtonThemeData(
defaultButtonStyle: ButtonStyle(
shape: WidgetStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
side: BorderSide(color: Colors.white.withValues(alpha: .01)))),
))),
locale: windowAppState.languageCode != null
? Locale(windowAppState.languageCode!, windowAppState.countryCode)
: null,
debugShowCheckedModeBanner: false,
),
));
}
}

View File

@ -0,0 +1,290 @@
// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
part of 'multi_window_manager.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
T _$identity<T>(T value) => value;
final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
MultiWindowAppState _$MultiWindowAppStateFromJson(Map<String, dynamic> json) {
return _MultiWindowAppState.fromJson(json);
}
/// @nodoc
mixin _$MultiWindowAppState {
String get backgroundColor => throw _privateConstructorUsedError;
String get menuColor => throw _privateConstructorUsedError;
String get micaColor => throw _privateConstructorUsedError;
List<String> get gameInstallPaths => throw _privateConstructorUsedError;
String? get languageCode => throw _privateConstructorUsedError;
String? get countryCode => throw _privateConstructorUsedError;
/// Serializes this MultiWindowAppState to a JSON map.
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
/// Create a copy of MultiWindowAppState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$MultiWindowAppStateCopyWith<MultiWindowAppState> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $MultiWindowAppStateCopyWith<$Res> {
factory $MultiWindowAppStateCopyWith(
MultiWindowAppState value, $Res Function(MultiWindowAppState) then) =
_$MultiWindowAppStateCopyWithImpl<$Res, MultiWindowAppState>;
@useResult
$Res call(
{String backgroundColor,
String menuColor,
String micaColor,
List<String> gameInstallPaths,
String? languageCode,
String? countryCode});
}
/// @nodoc
class _$MultiWindowAppStateCopyWithImpl<$Res, $Val extends MultiWindowAppState>
implements $MultiWindowAppStateCopyWith<$Res> {
_$MultiWindowAppStateCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of MultiWindowAppState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? backgroundColor = null,
Object? menuColor = null,
Object? micaColor = null,
Object? gameInstallPaths = null,
Object? languageCode = freezed,
Object? countryCode = freezed,
}) {
return _then(_value.copyWith(
backgroundColor: null == backgroundColor
? _value.backgroundColor
: backgroundColor // ignore: cast_nullable_to_non_nullable
as String,
menuColor: null == menuColor
? _value.menuColor
: menuColor // ignore: cast_nullable_to_non_nullable
as String,
micaColor: null == micaColor
? _value.micaColor
: micaColor // ignore: cast_nullable_to_non_nullable
as String,
gameInstallPaths: null == gameInstallPaths
? _value.gameInstallPaths
: gameInstallPaths // ignore: cast_nullable_to_non_nullable
as List<String>,
languageCode: freezed == languageCode
? _value.languageCode
: languageCode // ignore: cast_nullable_to_non_nullable
as String?,
countryCode: freezed == countryCode
? _value.countryCode
: countryCode // ignore: cast_nullable_to_non_nullable
as String?,
) as $Val);
}
}
/// @nodoc
abstract class _$$MultiWindowAppStateImplCopyWith<$Res>
implements $MultiWindowAppStateCopyWith<$Res> {
factory _$$MultiWindowAppStateImplCopyWith(_$MultiWindowAppStateImpl value,
$Res Function(_$MultiWindowAppStateImpl) then) =
__$$MultiWindowAppStateImplCopyWithImpl<$Res>;
@override
@useResult
$Res call(
{String backgroundColor,
String menuColor,
String micaColor,
List<String> gameInstallPaths,
String? languageCode,
String? countryCode});
}
/// @nodoc
class __$$MultiWindowAppStateImplCopyWithImpl<$Res>
extends _$MultiWindowAppStateCopyWithImpl<$Res, _$MultiWindowAppStateImpl>
implements _$$MultiWindowAppStateImplCopyWith<$Res> {
__$$MultiWindowAppStateImplCopyWithImpl(_$MultiWindowAppStateImpl _value,
$Res Function(_$MultiWindowAppStateImpl) _then)
: super(_value, _then);
/// Create a copy of MultiWindowAppState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? backgroundColor = null,
Object? menuColor = null,
Object? micaColor = null,
Object? gameInstallPaths = null,
Object? languageCode = freezed,
Object? countryCode = freezed,
}) {
return _then(_$MultiWindowAppStateImpl(
backgroundColor: null == backgroundColor
? _value.backgroundColor
: backgroundColor // ignore: cast_nullable_to_non_nullable
as String,
menuColor: null == menuColor
? _value.menuColor
: menuColor // ignore: cast_nullable_to_non_nullable
as String,
micaColor: null == micaColor
? _value.micaColor
: micaColor // ignore: cast_nullable_to_non_nullable
as String,
gameInstallPaths: null == gameInstallPaths
? _value._gameInstallPaths
: gameInstallPaths // ignore: cast_nullable_to_non_nullable
as List<String>,
languageCode: freezed == languageCode
? _value.languageCode
: languageCode // ignore: cast_nullable_to_non_nullable
as String?,
countryCode: freezed == countryCode
? _value.countryCode
: countryCode // ignore: cast_nullable_to_non_nullable
as String?,
));
}
}
/// @nodoc
@JsonSerializable()
class _$MultiWindowAppStateImpl implements _MultiWindowAppState {
const _$MultiWindowAppStateImpl(
{required this.backgroundColor,
required this.menuColor,
required this.micaColor,
required final List<String> gameInstallPaths,
this.languageCode,
this.countryCode})
: _gameInstallPaths = gameInstallPaths;
factory _$MultiWindowAppStateImpl.fromJson(Map<String, dynamic> json) =>
_$$MultiWindowAppStateImplFromJson(json);
@override
final String backgroundColor;
@override
final String menuColor;
@override
final String micaColor;
final List<String> _gameInstallPaths;
@override
List<String> get gameInstallPaths {
if (_gameInstallPaths is EqualUnmodifiableListView)
return _gameInstallPaths;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_gameInstallPaths);
}
@override
final String? languageCode;
@override
final String? countryCode;
@override
String toString() {
return 'MultiWindowAppState(backgroundColor: $backgroundColor, menuColor: $menuColor, micaColor: $micaColor, gameInstallPaths: $gameInstallPaths, languageCode: $languageCode, countryCode: $countryCode)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$MultiWindowAppStateImpl &&
(identical(other.backgroundColor, backgroundColor) ||
other.backgroundColor == backgroundColor) &&
(identical(other.menuColor, menuColor) ||
other.menuColor == menuColor) &&
(identical(other.micaColor, micaColor) ||
other.micaColor == micaColor) &&
const DeepCollectionEquality()
.equals(other._gameInstallPaths, _gameInstallPaths) &&
(identical(other.languageCode, languageCode) ||
other.languageCode == languageCode) &&
(identical(other.countryCode, countryCode) ||
other.countryCode == countryCode));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(
runtimeType,
backgroundColor,
menuColor,
micaColor,
const DeepCollectionEquality().hash(_gameInstallPaths),
languageCode,
countryCode);
/// Create a copy of MultiWindowAppState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$MultiWindowAppStateImplCopyWith<_$MultiWindowAppStateImpl> get copyWith =>
__$$MultiWindowAppStateImplCopyWithImpl<_$MultiWindowAppStateImpl>(
this, _$identity);
@override
Map<String, dynamic> toJson() {
return _$$MultiWindowAppStateImplToJson(
this,
);
}
}
abstract class _MultiWindowAppState implements MultiWindowAppState {
const factory _MultiWindowAppState(
{required final String backgroundColor,
required final String menuColor,
required final String micaColor,
required final List<String> gameInstallPaths,
final String? languageCode,
final String? countryCode}) = _$MultiWindowAppStateImpl;
factory _MultiWindowAppState.fromJson(Map<String, dynamic> json) =
_$MultiWindowAppStateImpl.fromJson;
@override
String get backgroundColor;
@override
String get menuColor;
@override
String get micaColor;
@override
List<String> get gameInstallPaths;
@override
String? get languageCode;
@override
String? get countryCode;
/// Create a copy of MultiWindowAppState
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$MultiWindowAppStateImplCopyWith<_$MultiWindowAppStateImpl> get copyWith =>
throw _privateConstructorUsedError;
}

View File

@ -0,0 +1,31 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'multi_window_manager.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_$MultiWindowAppStateImpl _$$MultiWindowAppStateImplFromJson(
Map<String, dynamic> json) =>
_$MultiWindowAppStateImpl(
backgroundColor: json['backgroundColor'] as String,
menuColor: json['menuColor'] as String,
micaColor: json['micaColor'] as String,
gameInstallPaths: (json['gameInstallPaths'] as List<dynamic>)
.map((e) => e as String)
.toList(),
languageCode: json['languageCode'] as String?,
countryCode: json['countryCode'] as String?,
);
Map<String, dynamic> _$$MultiWindowAppStateImplToJson(
_$MultiWindowAppStateImpl instance) =>
<String, dynamic>{
'backgroundColor': instance.backgroundColor,
'menuColor': instance.menuColor,
'micaColor': instance.micaColor,
'gameInstallPaths': instance.gameInstallPaths,
'languageCode': instance.languageCode,
'countryCode': instance.countryCode,
};

View File

@ -0,0 +1,12 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_ce/hive.dart';
import 'package:starcitizen_doctor/app.dart';
extension ProviderExtension on AutoDisposeNotifier {
AppGlobalModel get appGlobalModel =>
ref.read(appGlobalModelProvider.notifier);
AppGlobalState get appGlobalState => ref.read(appGlobalModelProvider);
Box<dynamic>? get appConfBox => appGlobalState.appConfBox;
}

View File

@ -0,0 +1,62 @@
class AppAdvancedLocalizationData {
AppAdvancedLocalizationData({
this.classKeys,
});
AppAdvancedLocalizationData.fromJson(dynamic json) {
if (json['class_keys'] != null) {
classKeys = [];
json['class_keys'].forEach((v) {
classKeys?.add(AppAdvancedLocalizationClassKeysData.fromJson(v));
});
}
}
List<AppAdvancedLocalizationClassKeysData>? classKeys;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
if (classKeys != null) {
map['class_keys'] = classKeys?.map((v) => v.toJson()).toList();
}
return map;
}
}
class AppAdvancedLocalizationClassKeysData {
AppAdvancedLocalizationClassKeysData({
this.id,
this.className,
this.keys,
});
AppAdvancedLocalizationClassKeysData.fromJson(dynamic json) {
id = json['id'];
className = json['class_name'];
keys = json['keys'] != null ? json['keys'].cast<String>() : [];
}
String? id;
String? className;
List<String>? keys;
Map<String, String> valuesMap = {};
AppAdvancedLocalizationClassKeysDataMode mode =
AppAdvancedLocalizationClassKeysDataMode.localization;
bool lockMod = false;
bool isWorking = false;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['class_name'] = className;
map['keys'] = keys;
return map;
}
}
enum AppAdvancedLocalizationClassKeysDataMode {
unLocalization,
localization,
mixed,
mixedNewline,
}

View File

@ -14,7 +14,8 @@ class AppPlacardData {
this.link, this.link,
this.linkType, this.linkType,
this.alwaysShow, this.alwaysShow,
this.enable,}); this.enable,
});
AppPlacardData.fromJson(dynamic json) { AppPlacardData.fromJson(dynamic json) {
version = json['version']; version = json['version'];
@ -44,5 +45,4 @@ class AppPlacardData {
map['enable'] = enable; map['enable'] = enable;
return map; return map;
} }
} }

View File

@ -0,0 +1,33 @@
/// name : "Data.p4k"
/// update_at : "2024-09-03 15:00"
/// url : "https://p4k.42kit.com/3.24.1-LIVE.9234446/Data.p4k.torrent"
/// info : "3.24.1-LIVE.9234446"
class AppTorrentData {
AppTorrentData({
this.name,
this.updateAt,
this.url,
this.info,
});
AppTorrentData.fromJson(dynamic json) {
name = json['name'];
updateAt = json['update_at'];
url = json['url'];
info = json['info'];
}
String? name;
String? updateAt;
String? url;
String? info;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['name'] = name;
map['update_at'] = updateAt;
map['url'] = url;
map['info'] = info;
return map;
}
}

View File

@ -0,0 +1,60 @@
/// name : "Data\\Textures\\planets\\surface\\ground\\architecture\\city\\city_suburbs_02_displ.dds.6"
/// size : 524288
/// compressedSize : 169812
/// isDirectory : false
/// isFile : true
/// isEncrypted : false
/// isUnicodeText : false
/// dateTime : "2019-12-16T15:11:18"
/// version : 45
class AppUnp4kP4kItemData {
AppUnp4kP4kItemData({
this.name,
this.size,
this.compressedSize,
this.isDirectory,
this.isFile,
this.isEncrypted,
this.isUnicodeText,
this.dateTime,
this.version,
});
AppUnp4kP4kItemData.fromJson(dynamic json) {
name = json['name'];
size = json['size'];
compressedSize = json['compressedSize'];
isDirectory = json['isDirectory'];
isFile = json['isFile'];
isEncrypted = json['isEncrypted'];
isUnicodeText = json['isUnicodeText'];
dateTime = json['dateTime'];
version = json['version'];
}
String? name;
num? size;
num? compressedSize;
bool? isDirectory;
bool? isFile;
bool? isEncrypted;
bool? isUnicodeText;
String? dateTime;
num? version;
List<AppUnp4kP4kItemData> children = [];
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['name'] = name;
map['size'] = size;
map['compressedSize'] = compressedSize;
map['isDirectory'] = isDirectory;
map['isFile'] = isFile;
map['isEncrypted'] = isEncrypted;
map['isUnicodeText'] = isUnicodeText;
map['dateTime'] = dateTime;
map['version'] = version;
return map;
}
}

View File

@ -1,48 +1,113 @@
/// lastVersion : "V2.9" /// lastVersion : "V2.9.9"
/// lastVersionCode : 13 /// lastVersionCode : 25
/// lastBetaVersion : "V2.9" /// minVersionCode : 15
/// lastBetaVersionCode : 13 /// MSE_lastVersion : "V2.9.13"
/// minVersionCode : 13 /// MSE_lastVersionCode : 27
/// minBetaVersionCode : 13 /// MSE_minVersionCode : 27
/// p4kDownloadUrl : "https://p4k.42kit.com/Data.p4k" /// p4kDownloadUrl : "https://p4k.42kit.com/Data.p4k"
/// activityColors : {"enable":true,"startTime":1700236800000,"endTime":1701360000000,"background":"#290859","menu":"#310666","mica":"#270452"}
class AppVersionData { class AppVersionData {
AppVersionData({ AppVersionData({
this.lastVersion, this.lastVersion,
this.lastVersionCode, this.lastVersionCode,
this.lastBetaVersion,
this.lastBetaVersionCode,
this.minVersionCode, this.minVersionCode,
this.minBetaVersionCode, this.mSELastVersion,
this.p4kDownloadUrl,}); this.mSELastVersionCode,
this.mSEMinVersionCode,
this.p4kDownloadUrl,
this.activityColors,
this.nav42KitUrl,
this.gameChannels,
this.webMirrors,
});
AppVersionData.fromJson(dynamic json) { AppVersionData.fromJson(dynamic json) {
lastVersion = json['lastVersion']; lastVersion = json['lastVersion'];
lastVersionCode = json['lastVersionCode']; lastVersionCode = json['lastVersionCode'];
lastBetaVersion = json['lastBetaVersion'];
lastBetaVersionCode = json['lastBetaVersionCode'];
minVersionCode = json['minVersionCode']; minVersionCode = json['minVersionCode'];
minBetaVersionCode = json['minBetaVersionCode']; mSELastVersion = json['MSE_lastVersion'];
mSELastVersionCode = json['MSE_lastVersionCode'];
mSEMinVersionCode = json['MSE_minVersionCode'];
p4kDownloadUrl = json['p4kDownloadUrl']; p4kDownloadUrl = json['p4kDownloadUrl'];
activityColors = json['activityColors'] != null ? ActivityColors.fromJson(json['activityColors']) : null;
gameChannels = List.from(json["game_channels"]).cast<String>();
webMirrors = json["web_mirrors"];
nav42KitUrl = json['nav_42kit_url'];
} }
String? lastVersion; String? lastVersion;
num? lastVersionCode; num? lastVersionCode;
String? lastBetaVersion;
num? lastBetaVersionCode;
num? minVersionCode; num? minVersionCode;
num? minBetaVersionCode; String? mSELastVersion;
num? mSELastVersionCode;
num? mSEMinVersionCode;
String? p4kDownloadUrl; String? p4kDownloadUrl;
ActivityColors? activityColors;
List<String>? gameChannels;
Map? webMirrors;
String? nav42KitUrl;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
map['lastVersion'] = lastVersion; map['lastVersion'] = lastVersion;
map['lastVersionCode'] = lastVersionCode; map['lastVersionCode'] = lastVersionCode;
map['lastBetaVersion'] = lastBetaVersion;
map['lastBetaVersionCode'] = lastBetaVersionCode;
map['minVersionCode'] = minVersionCode; map['minVersionCode'] = minVersionCode;
map['minBetaVersionCode'] = minBetaVersionCode; map['MSE_lastVersion'] = mSELastVersion;
map['MSE_lastVersionCode'] = mSELastVersionCode;
map['MSE_minVersionCode'] = mSEMinVersionCode;
map['p4kDownloadUrl'] = p4kDownloadUrl; map['p4kDownloadUrl'] = p4kDownloadUrl;
if (activityColors != null) {
map['activityColors'] = activityColors?.toJson();
}
map["web_mirrors"] = webMirrors;
map["game_channels"] = gameChannels;
map["nav_42kit_url"] = nav42KitUrl;
return map;
}
}
/// enable : true
/// startTime : 1700236800000
/// endTime : 1701360000000
/// background : "#290859"
/// menu : "#310666"
/// mica : "#270452"
class ActivityColors {
ActivityColors({
this.enable,
this.startTime,
this.endTime,
this.background,
this.menu,
this.mica,
});
ActivityColors.fromJson(dynamic json) {
enable = json['enable'];
startTime = json['startTime'];
endTime = json['endTime'];
background = json['background'];
menu = json['menu'];
mica = json['mica'];
}
bool? enable;
int? startTime;
int? endTime;
String? background;
String? menu;
String? mica;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['enable'] = enable;
map['startTime'] = startTime;
map['endTime'] = endTime;
map['background'] = background;
map['menu'] = menu;
map['mica'] = mica;
return map; return map;
} }
} }

View File

@ -1,9 +1,10 @@
/// rsi : "0.2.11" /// rsi : "0.2.21"
/// uex : "2.2" /// uex : "2.3"
/// addresses : "1.0" /// addresses : "1.0"
/// concierge : "1.1" /// concierge : "1.1"
/// hangar : "1.2" /// hangar : "1.2"
/// orgs : "1.3" /// orgs : "1.3"
/// dps : "0.1.1"
class AppWebLocalizationVersionsData { class AppWebLocalizationVersionsData {
AppWebLocalizationVersionsData({ AppWebLocalizationVersionsData({
@ -12,7 +13,9 @@ class AppWebLocalizationVersionsData {
this.addresses, this.addresses,
this.concierge, this.concierge,
this.hangar, this.hangar,
this.orgs,}); this.orgs,
this.dps,
});
AppWebLocalizationVersionsData.fromJson(dynamic json) { AppWebLocalizationVersionsData.fromJson(dynamic json) {
rsi = json['rsi']; rsi = json['rsi'];
@ -21,6 +24,7 @@ class AppWebLocalizationVersionsData {
concierge = json['concierge']; concierge = json['concierge'];
hangar = json['hangar']; hangar = json['hangar'];
orgs = json['orgs']; orgs = json['orgs'];
dps = json['dps'];
} }
String? rsi; String? rsi;
String? uex; String? uex;
@ -28,6 +32,7 @@ class AppWebLocalizationVersionsData {
String? concierge; String? concierge;
String? hangar; String? hangar;
String? orgs; String? orgs;
String? dps;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
@ -37,7 +42,7 @@ class AppWebLocalizationVersionsData {
map['concierge'] = concierge; map['concierge'] = concierge;
map['hangar'] = hangar; map['hangar'] = hangar;
map['orgs'] = orgs; map['orgs'] = orgs;
map['dps'] = dps;
return map; return map;
} }
} }

View File

@ -0,0 +1,24 @@
class CountdownFestivalItemData {
CountdownFestivalItemData({
this.name,
this.time,
this.icon,
});
CountdownFestivalItemData.fromJson(dynamic json) {
name = json['name'];
time = json['time'];
icon = json['icon'];
}
String? name;
int? time;
String? icon;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['name'] = name;
map['time'] = time;
map['icon'] = icon;
return map;
}
}

View File

@ -0,0 +1,108 @@
class DohClientResponseData {
DohClientResponseData({
this.status,
this.tc,
this.rd,
this.ra,
this.ad,
this.cd,
this.question,
this.answer,
});
DohClientResponseData.fromJson(dynamic json) {
status = json['Status'];
tc = json['TC'];
rd = json['RD'];
ra = json['RA'];
ad = json['AD'];
cd = json['CD'];
question = json['Question'] != null
? DohClientResponseQuestionData.fromJson(json['Question'])
: null;
if (json['Answer'] != null) {
answer = [];
json['Answer'].forEach((v) {
answer?.add(DohClientResponseAnswerData.fromJson(v));
});
}
}
num? status;
bool? tc;
bool? rd;
bool? ra;
bool? ad;
bool? cd;
DohClientResponseQuestionData? question;
List<DohClientResponseAnswerData>? answer;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['Status'] = status;
map['TC'] = tc;
map['RD'] = rd;
map['RA'] = ra;
map['AD'] = ad;
map['CD'] = cd;
if (question != null) {
map['Question'] = question?.toJson();
}
if (answer != null) {
map['Answer'] = answer?.map((v) => v.toJson()).toList();
}
return map;
}
}
class DohClientResponseAnswerData {
DohClientResponseAnswerData({
this.name,
this.ttl,
this.type,
this.data,
});
DohClientResponseAnswerData.fromJson(dynamic json) {
name = json['name'];
ttl = json['TTL'];
type = json['type'];
data = json['data'];
}
String? name;
num? ttl;
num? type;
String? data;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['name'] = name;
map['TTL'] = ttl;
map['type'] = type;
map['data'] = data;
return map;
}
}
class DohClientResponseQuestionData {
DohClientResponseQuestionData({
this.name,
this.type,
});
DohClientResponseQuestionData.fromJson(dynamic json) {
name = json['name'];
type = json['type'];
}
String? name;
num? type;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['name'] = name;
map['type'] = type;
return map;
}
}

View File

@ -16,7 +16,8 @@ class GamePerformanceData {
this.max, this.max,
this.min, this.min,
this.value, this.value,
this.group,}); this.group,
});
GamePerformanceData.fromJson(dynamic json) { GamePerformanceData.fromJson(dynamic json) {
key = json['key']; key = json['key'];
@ -49,5 +50,4 @@ class GamePerformanceData {
map['group'] = group; map['group'] = group;
return map; return map;
} }
} }

View File

@ -0,0 +1,52 @@
class InputMethodApiData {
InputMethodApiData({
this.enable,
this.languages,
});
InputMethodApiData.fromJson(dynamic json) {
enable = json['enable'];
if (json['languages'] != null) {
languages = <String, InputMethodApiLanguageData>{};
json['languages'].forEach((String key, dynamic v) {
languages![key] = InputMethodApiLanguageData.fromJson(v);
});
}
}
bool? enable;
Map<String, InputMethodApiLanguageData>? languages;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['enable'] = enable;
if (languages != null) {
map['languages'] = languages!.map<String, dynamic>((key, value) {
return MapEntry(key, value.toJson());
});
}
return map;
}
}
class InputMethodApiLanguageData {
InputMethodApiLanguageData({
this.file,
this.version,
});
InputMethodApiLanguageData.fromJson(dynamic json) {
file = json['file'];
version = json['version'];
}
String? file;
String? version;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['file'] = file;
map['version'] = version;
return map;
}
}

246
lib/data/nav_api_data.dart Normal file
View File

@ -0,0 +1,246 @@
import 'package:freezed_annotation/freezed_annotation.dart';
part 'nav_api_data.freezed.dart';
part 'nav_api_data.g.dart';
@freezed
class NavApiDocsItemData with _$NavApiDocsItemData {
const factory NavApiDocsItemData({
@Default('') @JsonKey(name: 'id') String id,
@Default('') @JsonKey(name: 'name') String name,
@Default('') @JsonKey(name: 'slug') String slug,
@Default('') @JsonKey(name: 'abstract') String abstract_,
@Default('') @JsonKey(name: 'description') String description,
@Default(NavApiDocsItemImageData())
@JsonKey(name: 'image')
NavApiDocsItemImageData image,
@Default('') @JsonKey(name: 'link') String link,
@Default(false) @JsonKey(name: 'is_sponsored') bool isSponsored,
@Default(<NavApiDocsItemTagsItemData>[])
@JsonKey(name: 'tags')
List<NavApiDocsItemTagsItemData> tags,
@Default('') @JsonKey(name: 'updatedAt') String updatedAt,
@Default('') @JsonKey(name: 'createdAt') String createdAt,
}) = _NavApiDocsItemData;
const NavApiDocsItemData._();
factory NavApiDocsItemData.fromJson(Map<String, Object?> json) =>
_$NavApiDocsItemDataFromJson(json);
}
@freezed
class NavApiDocsItemImageData with _$NavApiDocsItemImageData {
const factory NavApiDocsItemImageData({
@Default('') @JsonKey(name: 'id') String id,
@Default(NavApiDocsItemImageCreatedByData())
@JsonKey(name: 'createdBy')
NavApiDocsItemImageCreatedByData createdBy,
@Default('') @JsonKey(name: 'title') String title,
@Default(false) @JsonKey(name: 'original') bool original,
@Default('') @JsonKey(name: 'credit') String credit,
@Default('') @JsonKey(name: 'source') String source,
@Default('') @JsonKey(name: 'license') String license,
@JsonKey(name: 'caption') dynamic caption,
@Default('') @JsonKey(name: 'updatedAt') String updatedAt,
@Default('') @JsonKey(name: 'createdAt') String createdAt,
@Default('') @JsonKey(name: 'url') String url,
@Default('') @JsonKey(name: 'filename') String filename,
@Default('') @JsonKey(name: 'mimeType') String mimeType,
@Default(0) @JsonKey(name: 'filesize') int filesize,
@Default(0) @JsonKey(name: 'width') int width,
@Default(0) @JsonKey(name: 'height') int height,
@Default(NavApiDocsItemImageSizesData())
@JsonKey(name: 'sizes')
NavApiDocsItemImageSizesData sizes,
}) = _NavApiDocsItemImageData;
const NavApiDocsItemImageData._();
factory NavApiDocsItemImageData.fromJson(Map<String, Object?> json) =>
_$NavApiDocsItemImageDataFromJson(json);
}
@freezed
class NavApiDocsItemImageCreatedByData with _$NavApiDocsItemImageCreatedByData {
const factory NavApiDocsItemImageCreatedByData({
@Default('') @JsonKey(name: 'id') String id,
@Default('') @JsonKey(name: 'sub') String sub,
@Default('') @JsonKey(name: 'external_provider') String externalProvider,
@Default('') @JsonKey(name: 'username') String username,
@Default('') @JsonKey(name: 'name') String name,
@Default(<String>[]) @JsonKey(name: 'roles') List<String> roles,
@Default('') @JsonKey(name: 'avatar_url') String avatarUrl,
@Default('') @JsonKey(name: 'updatedAt') String updatedAt,
@Default('') @JsonKey(name: 'createdAt') String createdAt,
@Default('') @JsonKey(name: 'email') String email,
@Default(0) @JsonKey(name: 'loginAttempts') int loginAttempts,
@Default('') @JsonKey(name: 'avatar') String avatar,
}) = _NavApiDocsItemImageCreatedByData;
const NavApiDocsItemImageCreatedByData._();
factory NavApiDocsItemImageCreatedByData.fromJson(
Map<String, Object?> json) =>
_$NavApiDocsItemImageCreatedByDataFromJson(json);
}
@freezed
class NavApiDocsItemImageSizesThumbnailData
with _$NavApiDocsItemImageSizesThumbnailData {
const factory NavApiDocsItemImageSizesThumbnailData({
@Default('') @JsonKey(name: 'url') String url,
@Default(0) @JsonKey(name: 'width') int width,
@Default(0) @JsonKey(name: 'height') int height,
@Default('') @JsonKey(name: 'mimeType') String mimeType,
@Default(0) @JsonKey(name: 'filesize') int filesize,
@Default('') @JsonKey(name: 'filename') String filename,
}) = _NavApiDocsItemImageSizesThumbnailData;
const NavApiDocsItemImageSizesThumbnailData._();
factory NavApiDocsItemImageSizesThumbnailData.fromJson(
Map<String, Object?> json) =>
_$NavApiDocsItemImageSizesThumbnailDataFromJson(json);
}
@freezed
class NavApiDocsItemImageSizesData with _$NavApiDocsItemImageSizesData {
const factory NavApiDocsItemImageSizesData({
@Default(NavApiDocsItemImageSizesThumbnailData())
@JsonKey(name: 'thumbnail')
NavApiDocsItemImageSizesThumbnailData thumbnail,
@Default(NavApiDocsItemImageSizesPreloadData())
@JsonKey(name: 'preload')
NavApiDocsItemImageSizesPreloadData preload,
@Default(NavApiDocsItemImageSizesCardData())
@JsonKey(name: 'card')
NavApiDocsItemImageSizesCardData card,
@Default(NavApiDocsItemImageSizesTabletData())
@JsonKey(name: 'tablet')
NavApiDocsItemImageSizesTabletData tablet,
@Default(NavApiDocsItemImageSizesAvatarData())
@JsonKey(name: 'avatar')
NavApiDocsItemImageSizesAvatarData avatar,
}) = _NavApiDocsItemImageSizesData;
const NavApiDocsItemImageSizesData._();
factory NavApiDocsItemImageSizesData.fromJson(Map<String, Object?> json) =>
_$NavApiDocsItemImageSizesDataFromJson(json);
}
@freezed
class NavApiDocsItemImageSizesPreloadData
with _$NavApiDocsItemImageSizesPreloadData {
const factory NavApiDocsItemImageSizesPreloadData({
@JsonKey(name: 'url') dynamic url,
@JsonKey(name: 'width') dynamic width,
@JsonKey(name: 'height') dynamic height,
@JsonKey(name: 'mimeType') dynamic mimeType,
@JsonKey(name: 'filesize') dynamic filesize,
@JsonKey(name: 'filename') dynamic filename,
}) = _NavApiDocsItemImageSizesPreloadData;
const NavApiDocsItemImageSizesPreloadData._();
factory NavApiDocsItemImageSizesPreloadData.fromJson(
Map<String, Object?> json) =>
_$NavApiDocsItemImageSizesPreloadDataFromJson(json);
}
@freezed
class NavApiDocsItemImageSizesCardData with _$NavApiDocsItemImageSizesCardData {
const factory NavApiDocsItemImageSizesCardData({
@Default('') @JsonKey(name: 'url') String url,
@Default(0) @JsonKey(name: 'width') int width,
@Default(0) @JsonKey(name: 'height') int height,
@Default('') @JsonKey(name: 'mimeType') String mimeType,
@Default(0) @JsonKey(name: 'filesize') int filesize,
@Default('') @JsonKey(name: 'filename') String filename,
}) = _NavApiDocsItemImageSizesCardData;
const NavApiDocsItemImageSizesCardData._();
factory NavApiDocsItemImageSizesCardData.fromJson(
Map<String, Object?> json) =>
_$NavApiDocsItemImageSizesCardDataFromJson(json);
}
@freezed
class NavApiDocsItemImageSizesTabletData
with _$NavApiDocsItemImageSizesTabletData {
const factory NavApiDocsItemImageSizesTabletData({
@Default('') @JsonKey(name: 'url') String url,
@Default(0) @JsonKey(name: 'width') int width,
@Default(0) @JsonKey(name: 'height') int height,
@Default('') @JsonKey(name: 'mimeType') String mimeType,
@Default(0) @JsonKey(name: 'filesize') int filesize,
@Default('') @JsonKey(name: 'filename') String filename,
}) = _NavApiDocsItemImageSizesTabletData;
const NavApiDocsItemImageSizesTabletData._();
factory NavApiDocsItemImageSizesTabletData.fromJson(
Map<String, Object?> json) =>
_$NavApiDocsItemImageSizesTabletDataFromJson(json);
}
@freezed
class NavApiDocsItemImageSizesAvatarData
with _$NavApiDocsItemImageSizesAvatarData {
const factory NavApiDocsItemImageSizesAvatarData({
@Default('') @JsonKey(name: 'url') String url,
@Default(0) @JsonKey(name: 'width') int width,
@Default(0) @JsonKey(name: 'height') int height,
@Default('') @JsonKey(name: 'mimeType') String mimeType,
@Default(0) @JsonKey(name: 'filesize') int filesize,
@Default('') @JsonKey(name: 'filename') String filename,
}) = _NavApiDocsItemImageSizesAvatarData;
const NavApiDocsItemImageSizesAvatarData._();
factory NavApiDocsItemImageSizesAvatarData.fromJson(
Map<String, Object?> json) =>
_$NavApiDocsItemImageSizesAvatarDataFromJson(json);
}
@freezed
class NavApiDocsItemTagsItemData with _$NavApiDocsItemTagsItemData {
const factory NavApiDocsItemTagsItemData({
@Default('') @JsonKey(name: 'id') String id,
@Default('') @JsonKey(name: 'name') String name,
@Default('') @JsonKey(name: 'slug') String slug,
@Default('') @JsonKey(name: 'updatedAt') String updatedAt,
@Default('') @JsonKey(name: 'createdAt') String createdAt,
}) = _NavApiDocsItemTagsItemData;
const NavApiDocsItemTagsItemData._();
factory NavApiDocsItemTagsItemData.fromJson(Map<String, Object?> json) =>
_$NavApiDocsItemTagsItemDataFromJson(json);
}
@freezed
class NavApiData with _$NavApiData {
const factory NavApiData({
@Default(<NavApiDocsItemData>[])
@JsonKey(name: 'docs')
List<NavApiDocsItemData> docs,
@Default(false) @JsonKey(name: 'hasNextPage') bool hasNextPage,
@Default(false) @JsonKey(name: 'hasPrevPage') bool hasPrevPage,
@Default(0) @JsonKey(name: 'limit') int limit,
@JsonKey(name: 'nextPage') dynamic nextPage,
@Default(0) @JsonKey(name: 'page') int page,
@Default(0) @JsonKey(name: 'pagingCounter') int pagingCounter,
@JsonKey(name: 'prevPage') dynamic prevPage,
@Default(0) @JsonKey(name: 'totalDocs') int totalDocs,
@Default(0) @JsonKey(name: 'totalPages') int totalPages,
}) = _NavApiData;
const NavApiData._();
factory NavApiData.fromJson(Map<String, Object?> json) =>
_$NavApiDataFromJson(json);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,336 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'nav_api_data.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_$NavApiDocsItemDataImpl _$$NavApiDocsItemDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemDataImpl(
id: json['id'] as String? ?? '',
name: json['name'] as String? ?? '',
slug: json['slug'] as String? ?? '',
abstract_: json['abstract'] as String? ?? '',
description: json['description'] as String? ?? '',
image: json['image'] == null
? const NavApiDocsItemImageData()
: NavApiDocsItemImageData.fromJson(
json['image'] as Map<String, dynamic>),
link: json['link'] as String? ?? '',
isSponsored: json['is_sponsored'] as bool? ?? false,
tags: (json['tags'] as List<dynamic>?)
?.map((e) => NavApiDocsItemTagsItemData.fromJson(
e as Map<String, dynamic>))
.toList() ??
const <NavApiDocsItemTagsItemData>[],
updatedAt: json['updatedAt'] as String? ?? '',
createdAt: json['createdAt'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemDataImplToJson(
_$NavApiDocsItemDataImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'slug': instance.slug,
'abstract': instance.abstract_,
'description': instance.description,
'image': instance.image,
'link': instance.link,
'is_sponsored': instance.isSponsored,
'tags': instance.tags,
'updatedAt': instance.updatedAt,
'createdAt': instance.createdAt,
};
_$NavApiDocsItemImageDataImpl _$$NavApiDocsItemImageDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageDataImpl(
id: json['id'] as String? ?? '',
createdBy: json['createdBy'] == null
? const NavApiDocsItemImageCreatedByData()
: NavApiDocsItemImageCreatedByData.fromJson(
json['createdBy'] as Map<String, dynamic>),
title: json['title'] as String? ?? '',
original: json['original'] as bool? ?? false,
credit: json['credit'] as String? ?? '',
source: json['source'] as String? ?? '',
license: json['license'] as String? ?? '',
caption: json['caption'],
updatedAt: json['updatedAt'] as String? ?? '',
createdAt: json['createdAt'] as String? ?? '',
url: json['url'] as String? ?? '',
filename: json['filename'] as String? ?? '',
mimeType: json['mimeType'] as String? ?? '',
filesize: (json['filesize'] as num?)?.toInt() ?? 0,
width: (json['width'] as num?)?.toInt() ?? 0,
height: (json['height'] as num?)?.toInt() ?? 0,
sizes: json['sizes'] == null
? const NavApiDocsItemImageSizesData()
: NavApiDocsItemImageSizesData.fromJson(
json['sizes'] as Map<String, dynamic>),
);
Map<String, dynamic> _$$NavApiDocsItemImageDataImplToJson(
_$NavApiDocsItemImageDataImpl instance) =>
<String, dynamic>{
'id': instance.id,
'createdBy': instance.createdBy,
'title': instance.title,
'original': instance.original,
'credit': instance.credit,
'source': instance.source,
'license': instance.license,
'caption': instance.caption,
'updatedAt': instance.updatedAt,
'createdAt': instance.createdAt,
'url': instance.url,
'filename': instance.filename,
'mimeType': instance.mimeType,
'filesize': instance.filesize,
'width': instance.width,
'height': instance.height,
'sizes': instance.sizes,
};
_$NavApiDocsItemImageCreatedByDataImpl
_$$NavApiDocsItemImageCreatedByDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageCreatedByDataImpl(
id: json['id'] as String? ?? '',
sub: json['sub'] as String? ?? '',
externalProvider: json['external_provider'] as String? ?? '',
username: json['username'] as String? ?? '',
name: json['name'] as String? ?? '',
roles: (json['roles'] as List<dynamic>?)
?.map((e) => e as String)
.toList() ??
const <String>[],
avatarUrl: json['avatar_url'] as String? ?? '',
updatedAt: json['updatedAt'] as String? ?? '',
createdAt: json['createdAt'] as String? ?? '',
email: json['email'] as String? ?? '',
loginAttempts: (json['loginAttempts'] as num?)?.toInt() ?? 0,
avatar: json['avatar'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemImageCreatedByDataImplToJson(
_$NavApiDocsItemImageCreatedByDataImpl instance) =>
<String, dynamic>{
'id': instance.id,
'sub': instance.sub,
'external_provider': instance.externalProvider,
'username': instance.username,
'name': instance.name,
'roles': instance.roles,
'avatar_url': instance.avatarUrl,
'updatedAt': instance.updatedAt,
'createdAt': instance.createdAt,
'email': instance.email,
'loginAttempts': instance.loginAttempts,
'avatar': instance.avatar,
};
_$NavApiDocsItemImageSizesThumbnailDataImpl
_$$NavApiDocsItemImageSizesThumbnailDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageSizesThumbnailDataImpl(
url: json['url'] as String? ?? '',
width: (json['width'] as num?)?.toInt() ?? 0,
height: (json['height'] as num?)?.toInt() ?? 0,
mimeType: json['mimeType'] as String? ?? '',
filesize: (json['filesize'] as num?)?.toInt() ?? 0,
filename: json['filename'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemImageSizesThumbnailDataImplToJson(
_$NavApiDocsItemImageSizesThumbnailDataImpl instance) =>
<String, dynamic>{
'url': instance.url,
'width': instance.width,
'height': instance.height,
'mimeType': instance.mimeType,
'filesize': instance.filesize,
'filename': instance.filename,
};
_$NavApiDocsItemImageSizesDataImpl _$$NavApiDocsItemImageSizesDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageSizesDataImpl(
thumbnail: json['thumbnail'] == null
? const NavApiDocsItemImageSizesThumbnailData()
: NavApiDocsItemImageSizesThumbnailData.fromJson(
json['thumbnail'] as Map<String, dynamic>),
preload: json['preload'] == null
? const NavApiDocsItemImageSizesPreloadData()
: NavApiDocsItemImageSizesPreloadData.fromJson(
json['preload'] as Map<String, dynamic>),
card: json['card'] == null
? const NavApiDocsItemImageSizesCardData()
: NavApiDocsItemImageSizesCardData.fromJson(
json['card'] as Map<String, dynamic>),
tablet: json['tablet'] == null
? const NavApiDocsItemImageSizesTabletData()
: NavApiDocsItemImageSizesTabletData.fromJson(
json['tablet'] as Map<String, dynamic>),
avatar: json['avatar'] == null
? const NavApiDocsItemImageSizesAvatarData()
: NavApiDocsItemImageSizesAvatarData.fromJson(
json['avatar'] as Map<String, dynamic>),
);
Map<String, dynamic> _$$NavApiDocsItemImageSizesDataImplToJson(
_$NavApiDocsItemImageSizesDataImpl instance) =>
<String, dynamic>{
'thumbnail': instance.thumbnail,
'preload': instance.preload,
'card': instance.card,
'tablet': instance.tablet,
'avatar': instance.avatar,
};
_$NavApiDocsItemImageSizesPreloadDataImpl
_$$NavApiDocsItemImageSizesPreloadDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageSizesPreloadDataImpl(
url: json['url'],
width: json['width'],
height: json['height'],
mimeType: json['mimeType'],
filesize: json['filesize'],
filename: json['filename'],
);
Map<String, dynamic> _$$NavApiDocsItemImageSizesPreloadDataImplToJson(
_$NavApiDocsItemImageSizesPreloadDataImpl instance) =>
<String, dynamic>{
'url': instance.url,
'width': instance.width,
'height': instance.height,
'mimeType': instance.mimeType,
'filesize': instance.filesize,
'filename': instance.filename,
};
_$NavApiDocsItemImageSizesCardDataImpl
_$$NavApiDocsItemImageSizesCardDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageSizesCardDataImpl(
url: json['url'] as String? ?? '',
width: (json['width'] as num?)?.toInt() ?? 0,
height: (json['height'] as num?)?.toInt() ?? 0,
mimeType: json['mimeType'] as String? ?? '',
filesize: (json['filesize'] as num?)?.toInt() ?? 0,
filename: json['filename'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemImageSizesCardDataImplToJson(
_$NavApiDocsItemImageSizesCardDataImpl instance) =>
<String, dynamic>{
'url': instance.url,
'width': instance.width,
'height': instance.height,
'mimeType': instance.mimeType,
'filesize': instance.filesize,
'filename': instance.filename,
};
_$NavApiDocsItemImageSizesTabletDataImpl
_$$NavApiDocsItemImageSizesTabletDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageSizesTabletDataImpl(
url: json['url'] as String? ?? '',
width: (json['width'] as num?)?.toInt() ?? 0,
height: (json['height'] as num?)?.toInt() ?? 0,
mimeType: json['mimeType'] as String? ?? '',
filesize: (json['filesize'] as num?)?.toInt() ?? 0,
filename: json['filename'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemImageSizesTabletDataImplToJson(
_$NavApiDocsItemImageSizesTabletDataImpl instance) =>
<String, dynamic>{
'url': instance.url,
'width': instance.width,
'height': instance.height,
'mimeType': instance.mimeType,
'filesize': instance.filesize,
'filename': instance.filename,
};
_$NavApiDocsItemImageSizesAvatarDataImpl
_$$NavApiDocsItemImageSizesAvatarDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemImageSizesAvatarDataImpl(
url: json['url'] as String? ?? '',
width: (json['width'] as num?)?.toInt() ?? 0,
height: (json['height'] as num?)?.toInt() ?? 0,
mimeType: json['mimeType'] as String? ?? '',
filesize: (json['filesize'] as num?)?.toInt() ?? 0,
filename: json['filename'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemImageSizesAvatarDataImplToJson(
_$NavApiDocsItemImageSizesAvatarDataImpl instance) =>
<String, dynamic>{
'url': instance.url,
'width': instance.width,
'height': instance.height,
'mimeType': instance.mimeType,
'filesize': instance.filesize,
'filename': instance.filename,
};
_$NavApiDocsItemTagsItemDataImpl _$$NavApiDocsItemTagsItemDataImplFromJson(
Map<String, dynamic> json) =>
_$NavApiDocsItemTagsItemDataImpl(
id: json['id'] as String? ?? '',
name: json['name'] as String? ?? '',
slug: json['slug'] as String? ?? '',
updatedAt: json['updatedAt'] as String? ?? '',
createdAt: json['createdAt'] as String? ?? '',
);
Map<String, dynamic> _$$NavApiDocsItemTagsItemDataImplToJson(
_$NavApiDocsItemTagsItemDataImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'slug': instance.slug,
'updatedAt': instance.updatedAt,
'createdAt': instance.createdAt,
};
_$NavApiDataImpl _$$NavApiDataImplFromJson(Map<String, dynamic> json) =>
_$NavApiDataImpl(
docs: (json['docs'] as List<dynamic>?)
?.map(
(e) => NavApiDocsItemData.fromJson(e as Map<String, dynamic>))
.toList() ??
const <NavApiDocsItemData>[],
hasNextPage: json['hasNextPage'] as bool? ?? false,
hasPrevPage: json['hasPrevPage'] as bool? ?? false,
limit: (json['limit'] as num?)?.toInt() ?? 0,
nextPage: json['nextPage'],
page: (json['page'] as num?)?.toInt() ?? 0,
pagingCounter: (json['pagingCounter'] as num?)?.toInt() ?? 0,
prevPage: json['prevPage'],
totalDocs: (json['totalDocs'] as num?)?.toInt() ?? 0,
totalPages: (json['totalPages'] as num?)?.toInt() ?? 0,
);
Map<String, dynamic> _$$NavApiDataImplToJson(_$NavApiDataImpl instance) =>
<String, dynamic>{
'docs': instance.docs,
'hasNextPage': instance.hasNextPage,
'hasPrevPage': instance.hasPrevPage,
'limit': instance.limit,
'nextPage': instance.nextPage,
'page': instance.page,
'pagingCounter': instance.pagingCounter,
'prevPage': instance.prevPage,
'totalDocs': instance.totalDocs,
'totalPages': instance.totalPages,
};

View File

@ -0,0 +1,107 @@
class RsiGameLibraryData {
RsiGameLibraryData({
this.games,
});
RsiGameLibraryData.fromJson(dynamic json) {
if (json['games'] != null) {
games = [];
json['games'].forEach((v) {
games?.add(RsiGameLibraryGamesData.fromJson(v));
});
}
}
List<RsiGameLibraryGamesData>? games;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
if (games != null) {
map['games'] = games?.map((v) => v.toJson()).toList();
}
return map;
}
}
class RsiGameLibraryGamesData {
RsiGameLibraryGamesData({
this.id,
this.name,
this.channels,
});
RsiGameLibraryGamesData.fromJson(dynamic json) {
id = json['id'];
name = json['name'];
if (json['channels'] != null) {
channels = [];
json['channels'].forEach((v) {
channels?.add(RsiGameLibraryChannelsData.fromJson(v));
});
}
}
String? id;
String? name;
List<RsiGameLibraryChannelsData>? channels;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['name'] = name;
if (channels != null) {
map['channels'] = channels?.map((v) => v.toJson()).toList();
}
return map;
}
}
class RsiGameLibraryChannelsData {
RsiGameLibraryChannelsData({
this.id,
this.name,
this.version,
this.versionLabel,
this.servicesEndpoint,
this.network,
this.platformId,
this.nid,
this.weight,
});
RsiGameLibraryChannelsData.fromJson(dynamic json) {
id = json['id'];
name = json['name'];
version = json['version'];
versionLabel = json['versionLabel'];
servicesEndpoint = json['servicesEndpoint'];
network = json['network'];
platformId = json['platformId'];
nid = json['nid'];
weight = json['weight'];
}
String? id;
String? name;
num? version;
String? versionLabel;
String? servicesEndpoint;
dynamic network;
String? platformId;
String? nid;
dynamic weight;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['name'] = name;
map['version'] = version;
map['versionLabel'] = versionLabel;
map['servicesEndpoint'] = servicesEndpoint;
map['network'] = network;
map['platformId'] = platformId;
map['nid'] = nid;
map['weight'] = weight;
return map;
}
}

View File

@ -1,9 +1,9 @@
/// enable : true /// enable : true
/// versionName : "3.20.0(PU)_CN_V1" /// versionName : "3.21.1(PU)_CNE_V2"
/// updateAt : "2023-10-11: 11:10:00" /// updateAt : "2023-12-03: 14:50:00"
/// info : "简体中文汉化" /// info : "简体中文汉化(物品名称英文版)"
/// channel : "PU" /// game_channel : "PU"
/// node : "已知问题:\n3D中文字体不显示临时解决方法将交互恢复成英文但由于数量繁多难免有遗漏汉化组正在尽力找\n·角色抬头显示器(HUD)的中文字体不显示\n·某些元素字体过小\n·搜索栏无法输入中文\n·部位文本未翻译(在翻了,在翻了!)" /// note : ""
class ScLocalizationData { class ScLocalizationData {
ScLocalizationData({ ScLocalizationData({
@ -11,23 +11,24 @@ class ScLocalizationData {
this.versionName, this.versionName,
this.updateAt, this.updateAt,
this.info, this.info,
this.channel, this.gameChannel,
this.node,}); this.note,
});
ScLocalizationData.fromJson(dynamic json) { ScLocalizationData.fromJson(dynamic json) {
enable = json['enable']; enable = json['enable'];
versionName = json['versionName']; versionName = json['versionName'];
updateAt = json['updateAt']; updateAt = json['updateAt'];
info = json['info']; info = json['info'];
channel = json['channel']; gameChannel = json['game_channel'];
node = json['node']; note = json['note'];
} }
bool? enable; bool? enable;
String? versionName; String? versionName;
String? updateAt; String? updateAt;
String? info; String? info;
String? channel; String? gameChannel;
String? node; String? note;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
@ -35,9 +36,8 @@ class ScLocalizationData {
map['versionName'] = versionName; map['versionName'] = versionName;
map['updateAt'] = updateAt; map['updateAt'] = updateAt;
map['info'] = info; map['info'] = info;
map['channel'] = channel; map['game_channel'] = gameChannel;
map['node'] = node; map['note'] = note;
return map; return map;
} }
} }

View File

@ -0,0 +1,84 @@
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
// This is a library that looks up messages for specific locales by
// delegating to the appropriate library.
// Ignore issues from commonly used lints in this file.
// ignore_for_file:implementation_imports, file_names, unnecessary_new
// ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering
// ignore_for_file:argument_type_not_assignable, invalid_assignment
// ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases
// ignore_for_file:comment_references
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';
import 'package:intl/src/intl_helpers.dart';
import 'messages_en.dart' as messages_en;
import 'messages_ja.dart' as messages_ja;
import 'messages_ru.dart' as messages_ru;
import 'messages_zh_CN.dart' as messages_zh_cn;
import 'messages_zh_TW.dart' as messages_zh_tw;
typedef Future<dynamic> LibraryLoader();
Map<String, LibraryLoader> _deferredLibraries = {
'en': () => new SynchronousFuture(null),
'ja': () => new SynchronousFuture(null),
'ru': () => new SynchronousFuture(null),
'zh_CN': () => new SynchronousFuture(null),
'zh_TW': () => new SynchronousFuture(null),
};
MessageLookupByLibrary? _findExact(String localeName) {
switch (localeName) {
case 'en':
return messages_en.messages;
case 'ja':
return messages_ja.messages;
case 'ru':
return messages_ru.messages;
case 'zh_CN':
return messages_zh_cn.messages;
case 'zh_TW':
return messages_zh_tw.messages;
default:
return null;
}
}
/// User programs should call this before using [localeName] for messages.
Future<bool> initializeMessages(String localeName) {
var availableLocale = Intl.verifiedLocale(
localeName,
(locale) => _deferredLibraries[locale] != null,
onFailure: (_) => null,
);
if (availableLocale == null) {
return new SynchronousFuture(false);
}
var lib = _deferredLibraries[availableLocale];
lib == null ? new SynchronousFuture(false) : lib();
initializeInternalMessageLookup(() => new CompositeMessageLookup());
messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor);
return new SynchronousFuture(true);
}
bool _messagesExistFor(String locale) {
try {
return _findExact(locale) != null;
} catch (e) {
return false;
}
}
MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) {
var actualLocale = Intl.verifiedLocale(
locale,
_messagesExistFor,
onFailure: (_) => null,
);
if (actualLocale == null) return null;
return _findExact(actualLocale);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

5925
lib/generated/l10n.dart Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
class NoL10n {
static const String langZHS = '简体中文';
static const String langZHT = '繁體中文';
static const String langEn = 'English';
static const String langJa = '日本語';
static const String langFR = 'Français';
static const String langRU = 'Русский';
static const String langCodeZhCn = 'zh_CN';
}

View File

@ -1,44 +0,0 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'api/api.dart';
import 'base/ui_model.dart';
import 'common/conf.dart';
import 'ui/settings/upgrade_dialog_ui.dart';
import 'ui/settings/upgrade_dialog_ui_model.dart';
final globalUIModel = AppGlobalUIModel();
final globalUIModelProvider = ChangeNotifierProvider((ref) => globalUIModel);
class AppGlobalUIModel extends BaseUIModel {
Future<bool> checkUpdate(BuildContext context, {bool init = true}) async {
if (!init) {
try {
AppConf.networkVersionData = await Api.getAppVersion();
} catch (_) {}
}
await Future.delayed(const Duration(milliseconds: 100));
if (AppConf.networkVersionData == null) {
showToast(context,
"检查更新失败!请检查网络连接... \n进入离线模式.. \n\n请谨慎在离线模式中使用。 \n当前版本构建日期:${AppConf.appVersionDate}\n QQ群940696487");
return false;
}
if (((AppConf.networkVersionData?.lastVersionCode) ?? 0) >
AppConf.appVersionCode) {
// need update
final r = await showDialog(
dismissWithEsc: false,
context: context,
builder: (context) => BaseUIContainer(
uiCreate: () => UpgradeDialogUI(),
modelCreate: () => UpgradeDialogUIModel()));
if (r != true) {
showToast(context, "获取更新信息失败,请稍后重试。");
return false;
}
return true;
}
return false;
}
}

902
lib/l10n/intl_en.arb Normal file
View File

@ -0,0 +1,902 @@
{
"@@locale": "en",
"@@auto_translate_locale": "en",
"app_language_name": "English",
"@app_language_name": {},
"app_language_code": "en",
"app_index_version_info": "SCToolbox V{v0} {v1}",
"@app_index_version_info": {},
"app_shortcut_name": "SCToolboxDEV.lnk",
"@app_shortcut_name": {},
"about_check_update": "Check for Updates",
"@about_check_update": {},
"about_app_description": "Not just Localization!\n\nSCToolbox is your excellent companion for exploring the universe. We are dedicated to solving common in-game issues for citizens and facilitating community Localization, performance optimization, and Localization for popular websites.",
"@about_app_description": {},
"about_online_feedback": "Online Feedback",
"@about_online_feedback": {},
"about_action_qq_group": "QQ Group: 940696487",
"@about_action_qq_group": {},
"about_action_email": "Email: xkeyc@qq.com",
"@about_action_email": {},
"about_action_open_source": "Open Source",
"@about_action_open_source": {},
"about_disclaimer": "This is an unofficial Star Citizen tool and is not affiliated with the Cloud Imperium Group. All content not created by its hosts or users remains the property of their respective owners. \nStar Citizen®, Roberts Space Industries® and Cloud Imperium® are registered trademarks of Cloud Imperium Rights LLC.",
"@about_disclaimer": {},
"about_analytics_launch": "Launch",
"@about_analytics_launch": {},
"about_analytics_launch_game": "Launch Game",
"@about_analytics_launch_game": {},
"about_analytics_total_users": "Total Users",
"@about_analytics_total_users": {},
"about_analytics_install_translation": "Localization Installation",
"@about_analytics_install_translation": {},
"about_analytics_performance_optimization": "Performance Optimization",
"@about_analytics_performance_optimization": {},
"about_analytics_p4k_redirection": "P4K Redirection",
"@about_analytics_p4k_redirection": {},
"about_analytics_units_user": "users",
"@about_analytics_units_user": {},
"about_analytics_units_times": "times",
"@about_analytics_units_times": {},
"about_info_latest_version": "Already the latest version!",
"@about_info_latest_version": {},
"home_holiday_countdown": "Holiday Countdown",
"@home_holiday_countdown": {},
"home_holiday_countdown_disclaimer": "* The holiday dates above are manually collected and maintained, and may contain errors. Feedback is welcome!",
"@home_holiday_countdown_disclaimer": {},
"home_action_one_click_launch": "One-Click Launch",
"@home_action_one_click_launch": {},
"home_title_logging_in": "Logging in...",
"@home_title_logging_in": {},
"home_login_title_welcome_back": "Welcome Back!",
"@home_login_title_welcome_back": {},
"home_login_title_launching_game": "Launching the game for you...",
"@home_login_title_launching_game": {},
"home_action_login_rsi_account": "Login to RSI Account",
"@home_action_login_rsi_account": {},
"home_login_info_game_version_outdated": "Game version outdated",
"@home_login_info_game_version_outdated": {},
"home_login_info_rsi_server_report": "RSI Server reports version: {v1} \n\nLocal version: {v2} \n\nIt is recommended to use RSI Launcher to update the game!",
"@home_login_info_rsi_server_report": {},
"home_login_info_action_ignore": "Ignore",
"@home_login_info_action_ignore": {},
"home_login_action_title_box_one_click_launch": "Toolbox One-Click Launch",
"@home_login_action_title_box_one_click_launch": {},
"home_login_info_one_click_launch_description": "This feature helps you launch the game more conveniently.\n\nTo ensure account safety, this feature uses a localized browser to maintain login status and will not save your password information (unless you enable the auto-fill feature).\n\nWhen using this feature to login, please ensure that your SCToolbox is downloaded from a trusted source.",
"@home_login_info_one_click_launch_description": {},
"home_login_action_title_need_webview2_runtime": "WebView2 Runtime Required",
"@home_login_action_title_need_webview2_runtime": {},
"action_close": "Close",
"@action_close": {},
"downloader_speed_limit_settings": "Speed Limit Settings",
"@downloader_speed_limit_settings": {},
"downloader_action_pause_all": "Pause All",
"@downloader_action_pause_all": {},
"downloader_action_resume_all": "Resume All",
"@downloader_action_resume_all": {},
"downloader_action_cancel_all": "Cancel All",
"@downloader_action_cancel_all": {},
"downloader_info_no_download_tasks": "No download tasks",
"@downloader_info_no_download_tasks": {},
"downloader_info_total_size": "Total Size: {v1}",
"@downloader_info_total_size": {},
"downloader_info_verifying": "Verifying... ({v2})",
"@downloader_info_verifying": {},
"downloader_info_downloading": "Downloading... ({v0}%)",
"@downloader_info_downloading": {},
"downloader_info_status": "Status: {v0}",
"@downloader_info_status": {},
"downloader_info_uploaded": "Uploaded: {v0}",
"@downloader_info_uploaded": {},
"downloader_info_downloaded": "Downloaded: {v0}",
"@downloader_info_downloaded": {},
"downloader_action_options": "Options",
"@downloader_action_options": {},
"downloader_action_continue_download": "Continue Download",
"@downloader_action_continue_download": {},
"downloader_action_pause_download": "Pause Download",
"@downloader_action_pause_download": {},
"downloader_action_cancel_download": "Cancel Download",
"@downloader_action_cancel_download": {},
"action_open_folder": "Open Folder",
"@action_open_folder": {},
"downloader_info_download_upload_speed": "Download: {v0}/s Upload: {v1}/s",
"@downloader_info_download_upload_speed": {},
"downloader_info_downloading_status": "Downloading...",
"@downloader_info_downloading_status": {},
"downloader_info_waiting": "Waiting",
"@downloader_info_waiting": {},
"downloader_info_paused": "Paused",
"@downloader_info_paused": {},
"downloader_info_download_failed": "Download Failed",
"@downloader_info_download_failed": {},
"downloader_info_download_completed": "Download Completed",
"@downloader_info_download_completed": {},
"downloader_info_deleted": "Deleted",
"@downloader_info_deleted": {},
"downloader_title_downloading": "Downloading",
"@downloader_title_downloading": {},
"downloader_title_ended": "Ended",
"@downloader_title_ended": {},
"downloader_action_confirm_cancel_all_tasks": "Confirm cancellation of all tasks?",
"@downloader_action_confirm_cancel_all_tasks": {},
"downloader_info_manual_file_deletion_note": "If the file is no longer needed, you may need to manually delete the downloaded files.",
"@downloader_info_manual_file_deletion_note": {},
"downloader_action_confirm_cancel_download": "Confirm cancellation of download?",
"@downloader_action_confirm_cancel_download": {},
"downloader_info_p2p_network_note": "SCToolbox uses p2p network to accelerate file downloads. If you have limited bandwidth, you can set the upload bandwidth to 1(byte) here.",
"@downloader_info_p2p_network_note": {},
"downloader_info_download_unit_input_prompt": "Please enter download units, e.g.: 1, 100k, 10m. Enter 0 or leave blank for unlimited speed.",
"@downloader_info_download_unit_input_prompt": {},
"downloader_input_upload_speed_limit": "Upload Speed Limit:",
"@downloader_input_upload_speed_limit": {},
"downloader_input_download_speed_limit": "Download Speed Limit:",
"@downloader_input_download_speed_limit": {},
"downloader_input_info_p2p_upload_note": "* P2P upload only occurs when downloading files and will close p2p connections after download completion. If you want to participate in seeding, please contact us through the About page.",
"@downloader_input_info_p2p_upload_note": {},
"doctor_title_one_click_diagnosis": "One-Click Diagnosis -> {v0}",
"@doctor_title_one_click_diagnosis": {},
"doctor_action_rsi_launcher_log": "RSI Launcher log",
"@doctor_action_rsi_launcher_log": {},
"doctor_action_game_run_log": "Game run log",
"@doctor_action_game_run_log": {},
"doctor_info_scan_complete_no_issues": "Scan complete, no issues found!",
"@doctor_info_scan_complete_no_issues": {},
"doctor_info_processing": "Processing...",
"@doctor_info_processing": {},
"doctor_info_game_rescue_service_note": "You are about to access the game anomaly rescue service provided by Deep Space Treatment Center (QQ Group: 536454632), which mainly solves game installation failures and frequent crashes. Please do not join the group for gameplay issues.",
"@doctor_info_game_rescue_service_note": {},
"doctor_info_need_help": "Need help? Click to join the group for free human support!",
"@doctor_info_need_help": {},
"doctor_info_tool_check_result_note": "Note: The detection results of this tool are for reference only. If you do not understand the following operations, please provide screenshots to experienced players!",
"@doctor_info_tool_check_result_note": {},
"doctor_info_result_unsupported_os": "Unsupported operating system, the game may not run",
"@doctor_info_result_unsupported_os": {},
"doctor_info_result_upgrade_system": "Please upgrade your system ({v0})",
"@doctor_info_result_upgrade_system": {},
"doctor_info_result_missing_live_folder": "Installation directory is missing LIVE folder, may cause installation failure",
"@doctor_info_result_missing_live_folder": {},
"doctor_info_result_create_live_folder": "Click to fix and create LIVE folder for you, then retry installation. ({v0})",
"@doctor_info_result_create_live_folder": {},
"doctor_info_result_incompatible_nvme_device": "New type NVME device, not compatible with RSI Launcher, may cause installation failure",
"@doctor_info_result_incompatible_nvme_device": {},
"doctor_info_result_add_registry_value": "Add ForcedPhysicalSectorSizeInBytes value to registry to simulate old devices. Hard disk partition ({v0})",
"@doctor_info_result_add_registry_value": {},
"doctor_info_result_missing_easyanticheat_files": "EasyAntiCheat files missing",
"@doctor_info_result_missing_easyanticheat_files": {},
"doctor_info_result_verify_files_with_rsi_launcher": "EasyAntiCheat files not found in LIVE folder or files are incomplete, please use RSI Launcher to verify files",
"@doctor_info_result_verify_files_with_rsi_launcher": {},
"doctor_info_result_easyanticheat_not_installed": "EasyAntiCheat not installed or abnormal exit",
"@doctor_info_result_easyanticheat_not_installed": {},
"doctor_info_result_install_easyanticheat": "EasyAntiCheat is not installed, please click fix to install it with one click. (This issue will persist until the game starts and exits normally. If your game crashes for other reasons, you can ignore this entry)",
"@doctor_info_result_install_easyanticheat": {},
"doctor_info_result_chinese_username": "Chinese username!",
"@doctor_info_result_chinese_username": {},
"doctor_info_result_chinese_username_error": "Chinese username may cause game startup/installation errors! Click the fix button to view the modification tutorial!",
"@doctor_info_result_chinese_username_error": {},
"doctor_info_result_chinese_install_path": "Chinese installation path!",
"@doctor_info_result_chinese_install_path": {},
"doctor_info_result_chinese_install_path_error": "Chinese installation path! This may cause game startup/installation errors! ({v0}), please change the installation path in the RSI Launcher.",
"@doctor_info_result_chinese_install_path_error": {},
"doctor_info_result_low_physical_memory": "Low physical memory",
"@doctor_info_result_low_physical_memory": {},
"doctor_info_result_memory_requirement": "You need at least 16GB of physical memory (RAM) to run this game. (Current size: {v0})",
"@doctor_info_result_memory_requirement": {},
"doctor_info_result_fix_suggestion": "Fix suggestion: {v0}",
"@doctor_info_result_fix_suggestion": {},
"doctor_info_result_no_solution": "No solution available yet, please take a screenshot and report feedback",
"@doctor_info_result_no_solution": {},
"doctor_info_action_fix": "Fix",
"@doctor_info_action_fix": {},
"doctor_action_view_solution": "View Solution",
"@doctor_action_view_solution": {},
"doctor_tip_title_select_game_directory": "Please select the game installation directory on the home page.",
"@doctor_tip_title_select_game_directory": {},
"doctor_action_result_try_latest_windows": "If your hardware meets the requirements, please try installing the latest Windows system.",
"@doctor_action_result_try_latest_windows": {},
"doctor_action_result_create_folder_success": "Folder creation successful, please try to continue downloading the game!",
"@doctor_action_result_create_folder_success": {},
"doctor_action_result_create_folder_fail": "Failed to create folder, please try to create it manually.\nDirectory: {v0} \nError: {v1}",
"@doctor_action_result_create_folder_fail": {},
"doctor_action_result_fix_success": "Fix successful, please try restarting and continue installing the game! If the registry modification causes compatibility issues with other software, please use the NVME registry cleaner in the Tools section.",
"@doctor_action_result_fix_success": {},
"doctor_action_result_fix_fail": "Fix failed, {v0}",
"@doctor_action_result_fix_fail": {},
"doctor_action_result_game_start_success": "Fix successful, please try to start the game. (If the problem persists, please use the 'Reinstall EAC' tool in the toolbox)",
"@doctor_action_result_game_start_success": {},
"doctor_action_result_redirect_warning": "About to redirect, the tutorial is from the internet, please proceed with caution...",
"@doctor_action_result_redirect_warning": {},
"doctor_action_result_issue_not_supported": "This issue is not currently supported for automatic handling, please provide screenshots to seek help",
"@doctor_action_result_issue_not_supported": {},
"doctor_action_analyzing": "Analyzing...",
"@doctor_action_analyzing": {},
"doctor_action_result_analysis_no_issue": "Analysis complete, no issues found",
"@doctor_action_result_analysis_no_issue": {},
"doctor_action_result_analysis_issues_found": "Analysis complete, found {v0} issues",
"@doctor_action_result_analysis_issues_found": {},
"doctor_action_result_toast_scan_no_issue": "Scan complete, no issues found. If installation still fails, please try using the RSI Launcher in administrator mode from the toolbox.",
"@doctor_action_result_toast_scan_no_issue": {},
"doctor_action_tip_checking_game_log": "Checking: Game.log",
"@doctor_action_tip_checking_game_log": {},
"doctor_action_info_game_abnormal_exit": "Game abnormal exit: {v0}",
"@doctor_action_info_game_abnormal_exit": {},
"doctor_action_info_game_abnormal_exit_unknown": "Game abnormal exit: Unknown exception",
"@doctor_action_info_game_abnormal_exit_unknown": {},
"doctor_action_info_info_feedback": "info:{v0}, please click the bottom right corner to join the group for feedback.",
"@doctor_action_info_info_feedback": {},
"doctor_action_info_checking_eac": "Checking: EAC",
"@doctor_action_info_checking_eac": {},
"doctor_action_info_checking_runtime": "Checking: Runtime environment",
"@doctor_action_info_checking_runtime": {},
"doctor_action_result_info_unsupported_os": "Unsupported operating system: {v0}",
"@doctor_action_result_info_unsupported_os": {},
"doctor_action_info_checking_install_info": "Checking: Installation information",
"@doctor_action_info_checking_install_info": {},
"doctor_action_view_details": "View Details",
"@doctor_action_view_details": {},
"home_install_location": "Installation Location:",
"@home_install_location": {},
"home_not_installed_or_failed": "Not Installed or Installation Failed",
"@home_not_installed_or_failed": {},
"home_action_star_citizen_website_localization": "SC Website Localization",
"@home_action_star_citizen_website_localization": {},
"home_action_info_roberts_space_industries_origin": "Roberts Space Industries, the origin of everything",
"@home_action_info_roberts_space_industries_origin": {},
"home_action_uex_localization": "UEX Localization",
"@home_action_uex_localization": {},
"home_action_info_mining_refining_trade_calculator": "Mining, refining, trade calculator, prices, ship information",
"@home_action_info_mining_refining_trade_calculator": {},
"home_action_dps_calculator_localization": "DPS Calculator Localization",
"@home_action_dps_calculator_localization": {},
"home_action_info_ship_upgrade_damage_value_query": "Online ship modification, damage value query and equipment purchase location",
"@home_action_info_ship_upgrade_damage_value_query": {},
"home_action_external_browser_extension": "External Browser Extension:",
"@home_action_external_browser_extension": {},
"home_action_one_click_diagnosis": "One-Click Diagnosis",
"@home_action_one_click_diagnosis": {},
"home_action_info_one_click_diagnosis_star_citizen": "One-click diagnosis of common Star Citizen issues",
"@home_action_info_one_click_diagnosis_star_citizen": {},
"home_action_localization_management": "Localization Management",
"@home_action_localization_management": {},
"home_action_info_quick_install_localization_resources": "Quick installation of Localization resources",
"@home_action_info_quick_install_localization_resources": {},
"home_action_performance_optimization": "Performance Optimization",
"@home_action_performance_optimization": {},
"home_action_info_engine_config_optimization": "Adjust engine configuration files to optimize game performance",
"@home_action_info_engine_config_optimization": {},
"home_action_rsi_status_platform": "Platform",
"@home_action_rsi_status_platform": {},
"home_action_rsi_status_persistent_universe": "PU",
"@home_action_rsi_status_persistent_universe": {},
"home_action_rsi_status_electronic_access": "EA",
"@home_action_rsi_status_electronic_access": {},
"home_action_rsi_status_arena_commander": "AC",
"@home_action_rsi_status_arena_commander": {},
"home_action_rsi_status_rsi_server_status": "Server Status",
"@home_action_rsi_status_rsi_server_status": {},
"home_action_rsi_status_status": "Status:",
"@home_action_rsi_status_status": {},
"home_announcement_details": "Announcement Details",
"@home_announcement_details": {},
"home_action_info_valid_install_location_required": "This feature requires a valid installation location\n\nIf your game is not fully downloaded, please wait for the download to complete before using this feature.\n\nIf your game has been completely downloaded but isn't recognized, please launch the game once and then reopen SCToolbox or manually set the installation location in settings.",
"@home_action_info_valid_install_location_required": {},
"home_action_info_scanning": "Scanning ...",
"@home_action_info_scanning": {},
"home_action_info_scan_complete_valid_directories_found": "Scan complete, found {v0} valid installation directories",
"@home_action_info_scan_complete_valid_directories_found": {},
"home_action_info_log_file_parse_fail": "Failed to parse log file!",
"@home_action_info_log_file_parse_fail": {},
"home_action_title_star_citizen_website_localization": "SC Site Localization",
"@home_action_title_star_citizen_website_localization": {},
"home_action_info_web_localization_plugin_disclaimer": "This plugin is for general browsing purposes only and is not responsible for any issues that may arise from its use! Please verify the original content of the website before performing any account operations!\n\n\nWhen logging into your account with this feature, please ensure your SCToolbox is downloaded from a trusted source.",
"@home_action_info_web_localization_plugin_disclaimer": {},
"home_action_info_initializing_resources": "Initializing localization resources...",
"@home_action_info_initializing_resources": {},
"home_action_info_initialization_failed": "Failed to initialize web localization resources! {v0}",
"@home_action_info_initialization_failed": {},
"home_title_app_name": "SCToolbox",
"@home_title_app_name": {},
"home_localization_new_version_available": "New localization version available!",
"@home_localization_new_version_available": {},
"home_localization_new_version_installed": "There's a new version of the localization you installed on {v0}!",
"@home_localization_new_version_installed": {},
"home_info_valid_installation_required": "This feature requires a valid installation location",
"@home_info_valid_installation_required": {},
"home_info_one_click_launch_warning": "One-click launch feature notice",
"@home_info_one_click_launch_warning": {},
"home_info_account_security_warning": "To ensure account security, the one-click launch feature has been disabled in the development version. We will provide this feature in the Microsoft Store version.\n\nThe Microsoft Store version provides reliable distribution downloads and digital signatures from Microsoft, which can effectively prevent malicious tampering of the software.\n\nNote: You don't need to use SCToolbox to launch the game to use localization.",
"@home_info_account_security_warning": {},
"home_action_install_microsoft_store_version": "Install Microsoft Store Version",
"@home_action_install_microsoft_store_version": {},
"home_action_cancel": "Cancel",
"@home_action_cancel": {},
"home_action_info_abnormal_game_exit": "Game exited abnormally\nexitCode={v0}\nstdout={v1}\nstderr={v2}\n\nDiagnostic information: {v3} \n{v4}",
"@home_action_info_abnormal_game_exit": {},
"home_action_info_unknown_error": "Unknown error, please use the one-click diagnosis to join the group for feedback.",
"@home_action_info_unknown_error": {},
"home_action_info_check_web_link": "Please check the popup web link for detailed information.",
"@home_action_info_check_web_link": {},
"home_action_info_game_built_in": "Game built-in",
"@home_action_info_game_built_in": {},
"home_action_info_warning": "Warning",
"@home_action_info_warning": {},
"localization_info_machine_translation_warning": "You are using the game's built-in text. The official text is currently machine-translated (as of 3.21.0). We recommend you install the community localization below.",
"@localization_info_machine_translation_warning": {},
"localization_info_translation": "Game Localization",
"@localization_info_translation": {},
"localization_info_enabled": "Enabled ({v0}):",
"@localization_info_enabled": {},
"localization_info_installed_version": "Installed version: {v0}",
"@localization_info_installed_version": {},
"localization_action_translation_feedback": "Localization Feedback",
"@localization_action_translation_feedback": {},
"localization_action_uninstall_translation": "Uninstall Localization",
"@localization_action_uninstall_translation": {},
"localization_info_note": "Note:",
"@localization_info_note": {},
"localization_info_community_translation": "Community Localization",
"@localization_info_community_translation": {},
"localization_info_no_translation_available": "No localization available for this language/version, please stay tuned!",
"@localization_info_no_translation_available": {},
"localization_action_install": "Install",
"@localization_action_install": {},
"localization_info_version_number": "Version number: {v0}",
"@localization_info_version_number": {},
"localization_info_channel": "Channel: {v0}",
"@localization_info_channel": {},
"localization_info_update_time": "Update time: {v0}",
"@localization_info_update_time": {},
"localization_info_installed": "Installed",
"@localization_info_installed": {},
"localization_info_unavailable": "Unavailable",
"@localization_info_unavailable": {},
"localization_info_language": "Language: ",
"@localization_info_language": {},
"localization_info_remove_incompatible_translation_params": "Remove incompatible localization parameters",
"@localization_info_remove_incompatible_translation_params": {},
"localization_info_incompatible_translation_params_warning": "USER.cfg contains incompatible localization parameters, which may be residual information from previous localization files.\n\nThis may cause the localization to be invalid or display garbled characters. Click confirm to remove these with one click (will not affect other configurations).",
"@localization_info_incompatible_translation_params_warning": {},
"localization_info_corrupted_file": "File corrupted, please download again",
"@localization_info_corrupted_file": {},
"localization_info_installation_error": "Installation error!\n\n {v0}",
"@localization_info_installation_error": {},
"localization_info_custom_files": "Custom Files",
"@localization_info_custom_files": {},
"performance_info_graphic_optimization_hint": "Graphics Optimization Tips",
"@performance_info_graphic_optimization_hint": {},
"performance_info_graphic_optimization_warning": "This feature helps significantly with GPU bottlenecks but may have the opposite effect for CPU bottlenecks. If you have a powerful GPU, you can try using better quality settings to achieve higher GPU utilization.",
"@performance_info_graphic_optimization_warning": {},
"performance_info_current_status": "Current status: {v0}",
"@performance_info_current_status": {},
"performance_info_applied": "Applied",
"@performance_info_applied": {},
"performance_info_not_applied": "Not applied",
"@performance_info_not_applied": {},
"performance_action_preset": "Preset:",
"@performance_action_preset": {},
"performance_action_low": "Low",
"@performance_action_low": {},
"performance_action_medium": "Medium",
"@performance_action_medium": {},
"performance_action_high": "High",
"@performance_action_high": {},
"performance_action_super": "Super",
"@performance_action_super": {},
"performance_action_info_preset_only_changes_graphics": "(Preset only changes graphics settings)",
"@performance_action_info_preset_only_changes_graphics": {},
"performance_action_reset_to_default": " Reset to Default ",
"@performance_action_reset_to_default": {},
"performance_action_apply": "Apply",
"@performance_action_apply": {},
"performance_action_apply_and_clear_shaders": "Apply and Clear Shaders (Recommended)",
"@performance_action_apply_and_clear_shaders": {},
"performance_title_performance_optimization": "Performance Optimization -> {v0}",
"@performance_title_performance_optimization": {},
"performance_action_custom_parameters_input": "You can enter custom parameters not included in SCToolbox here. Configuration example:\n\nr_displayinfo=0\nr_VSync=0",
"@performance_action_custom_parameters_input": {},
"performance_info_min_max_values": "{v0} Min value: {v1} / Max value: {v2}",
"@performance_info_min_max_values": {},
"performance_info_graphics": "Graphics",
"@performance_info_graphics": {},
"performance_info_delete_config_file": "Deleting config file...",
"@performance_info_delete_config_file": {},
"performance_action_clear_shaders": "Clear Shaders",
"@performance_action_clear_shaders": {},
"performance_info_done": "Done...",
"@performance_info_done": {},
"performance_info_shader_clearing_warning": "After clearing shaders, the game may stutter when you first enter it. Please wait patiently for the game to complete initialization.",
"@performance_info_shader_clearing_warning": {},
"performance_info_generate_config_file": "Generate Config File",
"@performance_info_generate_config_file": {},
"performance_info_write_out_config_file": "Write Out Config File",
"@performance_info_write_out_config_file": {},
"app_index_menu_home": "Home",
"@app_index_menu_home": {},
"app_index_menu_lobby": "Lobby",
"@app_index_menu_lobby": {},
"app_index_menu_tools": "Tools",
"@app_index_menu_tools": {},
"app_index_menu_settings": "Settings",
"@app_index_menu_settings": {},
"app_index_menu_about": "About",
"@app_index_menu_about": {},
"lobby_online_lobby_coming_soon": "Online lobby, coming soon!",
"@lobby_online_lobby_coming_soon": {},
"lobby_invitation_to_participate": "You are invited to participate in ",
"@lobby_invitation_to_participate": {},
"lobby_survey": "a survey.",
"@lobby_survey": {},
"setting_action_create_settings_shortcut": "Create Settings Shortcut",
"@setting_action_create_settings_shortcut": {},
"setting_action_create_desktop_shortcut": "Create SCToolbox shortcut on desktop",
"@setting_action_create_desktop_shortcut": {},
"setting_action_reset_auto_password_fill": "Reset Auto Password Fill",
"@setting_action_reset_auto_password_fill": {},
"setting_action_ignore_efficiency_cores_on_launch": "Ignore efficiency cores when launching game (For Intel 12th+ processors)",
"@setting_action_ignore_efficiency_cores_on_launch": {},
"setting_action_set_core_count": "Number of cores set: {v0} (This feature applies to SCToolbox one-click launch on the homepage or RSI Launcher admin mode in tools. When set to 0, this feature is not enabled)",
"@setting_action_set_core_count": {},
"setting_action_set_launcher_file": "Set Launcher File (RSI Launcher.exe)",
"@setting_action_set_launcher_file": {},
"setting_action_info_manual_launcher_location_setting": "Manually set launcher location, recommended only when automatic installation location scanning is not available",
"@setting_action_info_manual_launcher_location_setting": {},
"setting_action_set_game_file": "Set Game File (StarCitizen.exe)",
"@setting_action_set_game_file": {},
"setting_action_info_manual_game_location_setting": "Manually set game installation location, recommended only when automatic installation location scanning is not available",
"@setting_action_info_manual_game_location_setting": {},
"setting_action_clear_translation_file_cache": "Clear Localization File Cache",
"@setting_action_clear_translation_file_cache": {},
"setting_action_info_cache_clearing_info": "Cache size {v0}MB, clears the localization file cache downloaded by SCToolbox, does not affect installed localizations",
"@setting_action_info_cache_clearing_info": {},
"setting_action_tool_site_access_acceleration": "Tool Site Access Acceleration",
"@setting_action_tool_site_access_acceleration": {},
"setting_action_info_mirror_server_info": "Use mirror server to accelerate access to tool websites such as Dps, Uex, etc. If access is abnormal, please turn off this feature. To protect account security, the RSI official website will never be accelerated under any circumstances.",
"@setting_action_info_mirror_server_info": {},
"setting_action_view_log": "View log",
"@setting_action_view_log": {},
"setting_action_info_view_log_file": "View the log file of SCToolbox to locate bugs in the box",
"@setting_action_info_view_log_file": {},
"setting_action_info_confirm_reset_autofill": "Confirm reset auto-fill?",
"@setting_action_info_confirm_reset_autofill": {},
"setting_action_info_delete_local_account_warning": "This will delete the local account record, or select 'no' for auto-fill the next time you launch the game to disable auto-fill.",
"@setting_action_info_delete_local_account_warning": {},
"setting_action_info_autofill_data_cleared": "Auto-fill data cleared",
"@setting_action_info_autofill_data_cleared": {},
"setting_action_info_enter_cpu_core_to_ignore": "Please enter the number of CPU cores to ignore",
"@setting_action_info_enter_cpu_core_to_ignore": {},
"setting_action_info_cpu_core_tip": "Tip: Enter how many efficiency cores your device has, keep 0 for non-big.LITTLE devices\n\nThis feature applies to SCToolbox one-click launch on the home page or RSI Launcher admin mode in tools. When set to 0, this feature is not enabled.",
"@setting_action_info_cpu_core_tip": {},
"setting_action_info_select_rsi_launcher_location": "Please select RSI launcher location (RSI Launcher.exe)",
"@setting_action_info_select_rsi_launcher_location": {},
"setting_action_info_setting_success": "Setting successful, click refresh on the corresponding page to scan for the new path",
"@setting_action_info_setting_success": {},
"setting_action_info_file_error": "File error!",
"@setting_action_info_file_error": {},
"setting_action_info_select_game_install_location": "Please select game installation location (StarCitizen.exe)",
"@setting_action_info_select_game_install_location": {},
"setting_action_info_confirm_clear_cache": "Confirm clearing localization cache?",
"@setting_action_info_confirm_clear_cache": {},
"setting_action_info_clear_cache_warning": "This will not affect installed localizations.",
"@setting_action_info_clear_cache_warning": {},
"setting_action_info_microsoft_version_limitation": "Due to Microsoft version feature limitations, please manually drag SCToolbox to the desktop in the window that opens next to create a shortcut.",
"@setting_action_info_microsoft_version_limitation": {},
"setting_action_info_shortcut_created": "Creation complete, please check your desktop",
"@setting_action_info_shortcut_created": {},
"app_upgrade_title_new_version_found": "New version found -> {v0}",
"@app_upgrade_title_new_version_found": {},
"app_upgrade_info_getting_new_version_details": "Getting new version details...",
"@app_upgrade_info_getting_new_version_details": {},
"app_upgrade_info_update_server_tip": "Note: Currently using diversion server for updates, which may result in decreased download speed but helps us with cost control. If the download is abnormal, please click here to switch to manual installation.",
"@app_upgrade_info_update_server_tip": {},
"app_upgrade_info_installing": "Installing: ",
"@app_upgrade_info_installing": {},
"app_upgrade_info_downloading": "Downloading: {v0}% ",
"@app_upgrade_info_downloading": {},
"app_upgrade_action_update_now": "Update Now",
"@app_upgrade_action_update_now": {},
"app_upgrade_action_next_time": "Next Time",
"@app_upgrade_action_next_time": {},
"app_upgrade_info_download_failed": "Download failed, please try manual installation!",
"@app_upgrade_info_download_failed": {},
"app_upgrade_info_run_failed": "Run failed, please try manual installation!",
"@app_upgrade_info_run_failed": {},
"app_splash_checking_availability": "Checking availability, this may take a moment...",
"@app_splash_checking_availability": {},
"app_splash_checking_for_updates": "Checking for updates...",
"@app_splash_checking_for_updates": {},
"app_splash_almost_done": "Almost done...",
"@app_splash_almost_done": {},
"tools_hosts_info_rsi_official_website": "RSI Official Website",
"@tools_hosts_info_rsi_official_website": {},
"tools_hosts_info_rsi_customer_service": "RSI Customer Service",
"@tools_hosts_info_rsi_customer_service": {},
"tools_hosts_info_dns_query_and_test": "Querying DNS and testing accessibility, please wait patiently...",
"@tools_hosts_info_dns_query_and_test": {},
"tools_hosts_info_writing_hosts": "Writing to Hosts...",
"@tools_hosts_info_writing_hosts": {},
"tools_hosts_info_reading_config": "Reading configuration...",
"@tools_hosts_info_reading_config": {},
"tools_hosts_info_hosts_acceleration": "Hosts Acceleration",
"@tools_hosts_info_hosts_acceleration": {},
"tools_hosts_info_open_hosts_file": "Open Hosts File",
"@tools_hosts_info_open_hosts_file": {},
"tools_hosts_info_status": "Status",
"@tools_hosts_info_status": {},
"tools_hosts_info_site": "Site",
"@tools_hosts_info_site": {},
"tools_hosts_info_enable": "Enable",
"@tools_hosts_info_enable": {},
"tools_hosts_action_one_click_acceleration": "One-Click Acceleration",
"@tools_hosts_action_one_click_acceleration": {},
"tools_info_scanning": "Scanning...",
"@tools_info_scanning": {},
"tools_info_processing_failed": "Processing failed!: {v0}",
"@tools_info_processing_failed": {},
"tools_info_game_install_location": "Game installation location: ",
"@tools_info_game_install_location": {},
"tools_info_rsi_launcher_location": "RSI Launcher location:",
"@tools_info_rsi_launcher_location": {},
"tools_action_view_system_info": "View System Info",
"@tools_action_view_system_info": {},
"tools_action_info_view_critical_system_info": "View critical system information for quick diagnosis\n\nThis operation takes time, please wait patiently.",
"@tools_action_info_view_critical_system_info": {},
"tools_action_p4k_download_repair": "P4K Diversion Download / Repair",
"@tools_action_p4k_download_repair": {},
"tools_action_info_p4k_download_repair_tip": "Use the diversion download service provided by Star Citizen Chinese Wiki for downloading or repairing p4k.\nVersion info: {v0}",
"@tools_action_info_p4k_download_repair_tip": {},
"tools_action_hosts_acceleration_experimental": "Hosts Acceleration (Experimental)",
"@tools_action_hosts_acceleration_experimental": {},
"tools_action_info_hosts_acceleration_experimental_tip": "Write IP information to the Hosts file to solve issues such as DNS pollution in some regions that prevent logging in to the official website.\nThis feature is in its first testing phase, please provide feedback if you encounter any issues.",
"@tools_action_info_hosts_acceleration_experimental_tip": {},
"tools_action_reinstall_easyanticheat": "Reinstall EasyAntiCheat",
"@tools_action_reinstall_easyanticheat": {},
"tools_action_info_reinstall_eac": "If you encounter EAC errors and automatic repair is ineffective, please try using this feature to reinstall EAC.",
"@tools_action_info_reinstall_eac": {},
"tools_action_rsi_launcher_admin_mode": "RSI Launcher Admin Mode",
"@tools_action_rsi_launcher_admin_mode": {},
"tools_action_info_run_rsi_as_admin": "Run the RSI launcher as administrator, which may solve some issues.\n\nIf efficiency core blocking parameters are set, they will also be applied here.",
"@tools_action_info_run_rsi_as_admin": {},
"tools_action_info_init_failed": "Initialization failed, please take a screenshot to report to the developer. {v0}",
"@tools_action_info_init_failed": {},
"tools_action_rsi_launcher_log_fix": "RSI Launcher Log Fix",
"@tools_action_rsi_launcher_log_fix": {},
"tools_action_info_rsi_launcher_log_issue": "In some cases, the log file of the RSI Launcher may be corrupted, preventing problem scanning from completing. Use this tool to clean up corrupted log files.\n\nCurrent log file size: {v0} MB",
"@tools_action_info_rsi_launcher_log_issue": {},
"tools_action_remove_nvme_registry_patch": "Remove NVME Registry Patch",
"@tools_action_remove_nvme_registry_patch": {},
"tools_action_info_nvme_patch_issue": "If you have issues with the nvme patch, please run this tool. (May cause game installation/updates to be unavailable.)\n\nCurrent patch status: {v0}",
"@tools_action_info_nvme_patch_issue": {},
"tools_action_info_not_installed": "Not installed",
"@tools_action_info_not_installed": {},
"tools_action_info_removed_restart_effective": "Removed, restart computer for changes to take effect!",
"@tools_action_info_removed_restart_effective": {},
"tools_action_write_nvme_registry_patch": "Write NVME Registry Patch",
"@tools_action_write_nvme_registry_patch": {},
"tools_action_info_manual_nvme_patch": "Manually write NVM patch, only use this feature if you know what you're doing",
"@tools_action_info_manual_nvme_patch": {},
"tools_action_info_fix_success_restart": "Fixed successfully, please try restarting your computer and then continue installing the game! If the registry modification causes compatibility issues with other software, please use the NVME Registry Cleanup in Tools.",
"@tools_action_info_fix_success_restart": {},
"tools_action_clear_shader_cache": "Clear Shader Cache",
"@tools_action_clear_shader_cache": {},
"tools_action_info_shader_cache_issue": "If game graphics appear abnormal or after version updates, you can use this tool to clear expired shaders (also restores Vulkan to DX11)\n\nCache size: {v0} MB",
"@tools_action_info_shader_cache_issue": {},
"tools_action_close_photography_mode": "Close Photography Mode",
"@tools_action_close_photography_mode": {},
"tools_action_open_photography_mode": "Open Photography Mode",
"@tools_action_open_photography_mode": {},
"tools_action_info_restore_lens_shake": "Restore lens shake effect.\n\n@Lapernum provides parameter information.",
"@tools_action_info_restore_lens_shake": {},
"tools_action_info_one_key_close_lens_shake": "One-click disable in-game lens shake for better photography operations.\n\n@Lapernum provides parameter information.",
"@tools_action_info_one_key_close_lens_shake": {},
"tools_action_info_log_file_parse_failed": "Failed to parse log file!\nPlease try using the RSI Launcher Log Fix tool!",
"@tools_action_info_log_file_parse_failed": {},
"tools_action_info_rsi_launcher_not_found": "RSI launcher not found, please try reinstalling or manually adding it in settings.",
"@tools_action_info_rsi_launcher_not_found": {},
"tools_action_info_star_citizen_not_found": "Star Citizen game installation location not found, please complete at least one game launch operation or manually add it in settings.",
"@tools_action_info_star_citizen_not_found": {},
"tools_action_info_valid_game_directory_needed": "This feature requires a valid game installation directory",
"@tools_action_info_valid_game_directory_needed": {},
"tools_action_info_eac_file_removed": "EAC files have been removed for you. Next, we'll open the RSI launcher for you. Please go to SETTINGS -> VERIFY to reinstall EAC.",
"@tools_action_info_eac_file_removed": {},
"tools_action_info_error_occurred": "An error occurred: {v0}",
"@tools_action_info_error_occurred": {},
"tools_action_info_system_info_content": "System: {v0}\n\nProcessor: {v1}\n\nMemory size: {v2}GB\n\nGPU information:\n{v3}\n\nStorage information:\n{v4}\n\n",
"@tools_action_info_system_info_content": {},
"tools_action_info_rsi_launcher_directory_not_found": "RSI launcher directory not found, please try manual operation.",
"@tools_action_info_rsi_launcher_directory_not_found": {},
"tools_action_info_log_file_not_exist": "Log file does not exist. Please try launching the game or installing the game once and then exit the launcher. If the problem persists, please try updating the launcher to the latest version!",
"@tools_action_info_log_file_not_exist": {},
"tools_action_info_cleanup_complete": "Cleanup complete, please complete one installation / game launch operation.",
"@tools_action_info_cleanup_complete": {},
"tools_action_info_cleanup_failed": "Cleanup failed, please remove manually, file location: {v0}",
"@tools_action_info_cleanup_failed": {},
"tools_action_info_system_info_title": "System Information",
"@tools_action_info_system_info_title": {},
"tools_action_info_rsi_launcher_running_warning": "RSI Launcher is running! Please close the launcher before using this feature!",
"@tools_action_info_rsi_launcher_running_warning": {},
"tools_action_info_p4k_file_description": "P4k is Star Citizen's core game file, over 100GB+. The offline download provided by SCToolbox is to help users who have extremely slow p4k file downloads or to repair p4k files that the official launcher cannot fix.\n\nNext, a dialog will ask for your save location (you can choose the Star Citizen folder or elsewhere). After downloading, please make sure the P4K file is placed in the LIVE folder, then verify and update using the Star Citizen launcher.",
"@tools_action_info_p4k_file_description": {},
"tools_action_info_p4k_download_in_progress": "A p4k download task is already in progress, please check the download manager!",
"@tools_action_info_p4k_download_in_progress": {},
"tools_action_info_function_under_maintenance": "Function under maintenance, please try again later!",
"@tools_action_info_function_under_maintenance": {},
"tools_action_info_config_file_not_exist": "Configuration file does not exist, please try running the game once",
"@tools_action_info_config_file_not_exist": {},
"webview_localization_name_member": "Member",
"@webview_localization_name_member": {},
"webview_localization_total_invitations": "Total invitations:",
"@webview_localization_total_invitations": {},
"webview_localization_unfinished_invitations": "Unfinished invitations",
"@webview_localization_unfinished_invitations": {},
"webview_localization_finished_invitations": "Finished invitations",
"@webview_localization_finished_invitations": {},
"app_init_failed_with_reason": "Initialization failed: {v0}",
"@app_init_failed_with_reason": {},
"settings_app_language": "Language",
"settings_app_language_auto": "Auto",
"app_common_network_error": "Network connection failed!\nEntering offline mode...\n\nPlease check your network connection or get the latest information on social forums. You can try enabling built-in DNS mode in the app settings\nCurrent version build date: {v0}\nQQ group: 940696487\nError message: {v1}",
"app_common_upgrade_info_error": "Failed to get update information, please try again later.",
"doctor_game_error_low_memory": "Insufficient available memory",
"doctor_game_error_low_memory_info": "Please try increasing virtual memory (at 1080p, physical available + virtual memory should be > 64GB)",
"doctor_game_error_generic_info": "The game triggered the most common crash issue, please check the troubleshooting guide",
"doctor_game_error_gpu_crash": "Your GPU has crashed! Please check the troubleshooting guide",
"doctor_game_error_socket_error": "Socket error detected",
"doctor_game_error_socket_error_info": "If using X-Black Box accelerator, please try changing the acceleration mode",
"doctor_game_error_permissions_error": "Insufficient permissions",
"doctor_game_error_permissions_error_info": "Please try running the launcher with administrator privileges or use SCToolbox (Microsoft Store version) to launch.",
"doctor_game_error_game_process_error": "Game process is in use",
"doctor_game_error_game_process_error_info": "Please try restarting the launcher or restarting your computer directly",
"doctor_game_error_game_damaged_file": "Game program files corrupted",
"doctor_game_error_game_damaged_file_info": "Please try deleting the Bin64 folder and verify in the launcher.",
"doctor_game_error_game_damaged_p4k_file": "P4K file corrupted",
"doctor_game_error_game_damaged_p4k_file_info": "Please try deleting the Data.p4k file and verify in the launcher or use the diversion in SCToolbox.",
"doctor_game_error_low_gpu_memory": "Insufficient GPU memory",
"doctor_game_error_low_gpu_memory_info": "Please don't run other games/applications with high GPU usage in the background, or upgrade your GPU.",
"doctor_game_error_gpu_vulkan_crash": "GPU Vulkan crash",
"doctor_game_error_gpu_vulkan_crash_info": "Vulkan crash! This may be a driver version or game engine issue. Please try updating GPU drivers or use the clear shader feature to fall back to DX11",
"app_common_error_info": "An error occurred: {v0}",
"app_common_tip": "Tip",
"app_common_tip_i_know": "I know",
"app_common_tip_confirm": "Confirm",
"app_common_tip_cancel": "Cancel",
"settings_app_language_switch_info": "Switch application display language",
"home_holiday_countdown_days": "{v0} days ",
"home_holiday_countdown_in_progress": "In progress",
"app_common_loading_images": "Loading images...",
"app_splash_dialog_u_a_p_p": "User Agreement and Privacy Policy",
"app_splash_dialog_u_a_p_p_content": "Thank you for choosing SCToolbox. We are committed to providing you with a safe, convenient, and reliable user experience. Before you start using the application, please read and agree to the following content:\n\n1. This application is open source software under the GNU General Public License v3.0, which you can freely use, modify, and distribute in compliance with the license. Our source code is located at: [Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app).\n2. Internet content in this application (including but not limited to localization files, tool websites, news, videos, etc.) is copyrighted by its authors and is not part of the GPL. Please use it in compliance with the corresponding authorization agreements.\n3. The official free distribution channels for this application are: [Microsoft App Store](https://apps.microsoft.com/detail/9NF3SWFWNKL1) and [Star Citizen Chinese Localization Team Website](https://www.starcitizenzw.com/). If you obtained it from third parties, please carefully verify to avoid financial loss.\n4. This application sends anonymous statistical data to our servers during use to improve software quality. We do not collect any of your personal privacy information.\n5. This application is community-supported and has no direct affiliation with Cloud Imperium Games or other third-party commercial companies.\n6. We provide limited community support. If needed, please visit the About page to learn how to contact us.",
"tools_unp4k_msg_init": "Initializing...",
"tools_unp4k_msg_reading": "Reading P4K file...",
"tools_unp4k_msg_reading2": "Processing files...",
"tools_unp4k_msg_reading3": "Processing files ({v0}/{v1})...",
"tools_unp4k_msg_read_completed": "Loading complete: {v0} files, time taken: {v1} ms",
"tools_unp4k_msg_open_file": "Opening file: {v0}",
"tools_unp4k_msg_read_file": "Reading file: {v0}...",
"home_localization_advanced_title": "Advanced Localization -> {v0}",
"home_localization_advanced_msg_version": "Loaded localization version: {v0}",
"home_localization_advanced_title_msg": "Localization text lines: {v0} P4K text lines: {v1}",
"home_localization_advanced_action_install": "Install Localization",
"home_localization_advanced_action_mod_change": "Regenerating text...",
"home_localization_advanced_action_mode": "Mode",
"home_localization_advanced_title_preview": "Preview: {v0}",
"home_localization_advanced_json_text_location_other": "Locations-Other",
"home_localization_advanced_json_text_location_used": "Locations-Common",
"home_localization_advanced_json_text_things_other": "Items-Other",
"home_localization_advanced_json_text_things_used": "Items-Common",
"home_localization_advanced_json_text_vehicle_other": "Vehicles-Other",
"home_localization_advanced_json_text_vehicle_used": "Vehicles-Common",
"home_localization_advanced_json_text_mission_or_logs": "Missions/Logs",
"home_localization_advanced_json_text_subtitle": "Subtitles",
"home_localization_advanced_json_text_ui_or_hud_or_menu": "UI/HUD/Menu",
"home_localization_advanced_json_text_un_localization": "Not Localized",
"home_localization_advanced_json_text_others": "Others",
"home_localization_advanced_action_mod_change_localization": "Localized",
"home_localization_advanced_action_mod_change_un_localization": "Original English",
"home_localization_advanced_action_mod_change_mixed": "Bilingual",
"home_localization_advanced_action_mod_change_mixed_newline": "Bilingual (New Line)",
"home_localization_advanced_msg_classifying": "Classifying...",
"home_localization_advanced_msg_reading_p4k": "Reading p4k file...",
"home_localization_advanced_msg_reading_server_localization_text": "Getting localization text...",
"home_localization_advanced_msg_gen_localization_text": "Generating localization file...",
"home_localization_advanced_msg_gen_localization_install": "Installing localization file...",
"home_localization_msg_version_advanced": " (Advanced Localization)",
"home_localization_msg_no_note": "This version does not provide a description",
"home_localization_action_rsi_launcher_localization": "RSI Launcher Localization",
"home_localization_action_rsi_launcher_no_game_path_msg": "You currently don't have the game installed or haven't selected a game installation directory. You can only use the launcher localization feature. Please make sure the game is installed or add the game installation directory in the SCToolbox settings and try again.",
"home_localization_action_advanced": "Advanced Localization",
"home_localization_action_install_customize": "Install Custom Files",
"home_localization_title_localization_tools": "Localization Tools",
"performance_json_text_dof": "Depth of Field Effect",
"performance_json_text_dof_info": "Controls depth of field effect for mobiglas pages, etc.",
"performance_json_text_ssdo": "Screen Light Post-processing",
"performance_json_text_ssdo_info": "Adjusts light post-processing level",
"performance_json_text_title_graphics": "Graphics (Shader cleaning recommended after modifications)",
"performance_json_text_antialiasing": "Anti-aliasing",
"performance_json_text_antialiasing_info": "0 off, 1 SMAA, 2 temporal filter + SMAA, 3 SMAA with temporal filtering and projection matrix jitter",
"performance_json_text_game_effects": "Effects Level",
"performance_json_text_game_effects_info": "Game effects level",
"performance_json_text_texture": "Texture Level",
"performance_json_text_texture_info": "Model texture detail",
"performance_json_text_volumetric_effects": "Volumetric Effects",
"performance_json_text_volumetric_effects_info": "Volumetric clouds, volumetric lighting, etc.",
"performance_json_text_water": "Water Effects",
"performance_json_text_water_info": "Various water level effects",
"performance_json_text_object_detail": "Object Detail",
"performance_json_text_object_detail_info": "Model object detail, affects LOD, etc.",
"performance_json_text_particles": "Particle Detail",
"performance_json_text_physics": "Physics Detail",
"performance_json_text_physics_info": "Physics effect range",
"performance_json_text_shading": "Shader Detail",
"performance_json_text_shading_info": "Shader related",
"performance_json_text_shadows": "Shadow Detail",
"performance_json_text_shadows_info": "Shadow effects",
"performance_json_text_postprocessing": "Post-processing Detail",
"performance_json_text_postprocessing_info": "Post-processing shaders, motion blur effects, etc.",
"performance_json_text_renderer": "Renderer Quality",
"performance_json_text_renderer_info": "CryEngine renderer quality",
"performance_json_text_shader_decal": "Decal Quality",
"performance_json_text_shader_decal_info": "(Logos, symbols, etc.)",
"performance_json_text_shader_post_process": "Shader Quality",
"performance_json_text_shader_fx": "FX Quality",
"performance_json_text_shader_general": "General Quality",
"performance_json_text_shader_general_info": "Overall model quality",
"performance_json_text_shader_glass": "Glass Quality",
"performance_json_text_shader_glass_info": "Windows, mirrors, etc.",
"performance_json_text_shader_hdr": "HDR Quality",
"performance_json_text_shader_hdr_info": "HDR color difference, brightness level processing, etc.",
"performance_json_text_shader_particle": "Particle Quality",
"performance_json_text_shader_particle_info": "Particle effect quality",
"performance_json_text_shader_terrain": "Terrain Quality",
"performance_json_text_shader_shadow": "Shadow Quality",
"performance_json_text_shader_sky": "Sky Quality",
"performance_json_text_particles_object_collisions": "Particle Collisions",
"performance_json_text_particles_object_collisions_info": "1 static particles only, 2 includes dynamic particles",
"performance_json_text_displayinfo": "Screen Info (Show FPS)",
"performance_json_text_displayinfo_info": "Display FPS, server information, etc. in the upper right corner of the screen",
"performance_json_text_max_fps": "Maximum FPS",
"performance_json_text_max_fps_info": "Adjust the game's maximum frame rate, 0 for unlimited",
"performance_json_text_display_session": "Display Session Info",
"performance_json_text_display_session_info": "When enabled, displays a QR code on screen for quickly locating relevant information when providing feedback to CIG",
"performance_json_text_vsync": "V-Sync",
"performance_json_text_vsync_info": "Enable to prevent tearing, disable to increase frame rate",
"performance_json_text_motion_blur": "Motion Blur",
"performance_json_text_motion_blur_info": "Enable for enhanced motion feel, disable for improved visuals",
"performance_json_text_fov": "Set FOV",
"performance_json_text_ui_animation": "UI Fade Animation",
"performance_json_text_custom_parameters": "Custom Parameters",
"performance_json_text_title_custom": "Custom",
"tools_rsi_launcher_enhance_init_msg1": "Reading launcher information...",
"tools_rsi_launcher_enhance_init_msg2": "Getting enhancement data from network...",
"tools_rsi_launcher_enhance_working_msg1": "Generating patch...",
"tools_rsi_launcher_enhance_working_msg2": "Installing patch, this will take some time depending on your computer's performance...",
"tools_rsi_launcher_enhance_title": "RSI Launcher Enhancement",
"tools_rsi_launcher_enhance_msg_version": "Launcher internal version information: {v0}",
"tools_rsi_launcher_enhance_msg_patch_status": "Patch status: {v0}",
"tools_rsi_launcher_enhance_msg_error": "Failed to get enhancement data, possibly due to network issues or the current version is not supported",
"tools_rsi_launcher_enhance_title_localization": "RSI Launcher Localization",
"tools_rsi_launcher_enhance_subtitle_localization": "Add multi-language support to RSI Launcher.",
"tools_rsi_launcher_enhance_title_download_booster": "RSI Launcher Download Enhancement",
"tools_rsi_launcher_enhance_subtitle_download_booster": "Use more threads to improve download speed when downloading the game. After enabling, please modify the number of threads in the launcher settings.",
"tools_rsi_launcher_enhance_action_install": "Install Enhancement Patch",
"tools_rsi_launcher_enhance_msg_uninstall": "* To uninstall the enhancement patch, please reinstall the RSI launcher.",
"tools_rsi_launcher_enhance_msg_error_launcher_notfound": "RSI launcher not found",
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error": "Failed to read launcher information!",
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args": "Failed to read launcher information: {v0}",
"tools_action_rsi_launcher_enhance_info": "Launcher localization, download thread enhancement",
"tools_rsi_launcher_enhance_note_title": "RSI Launcher Enhancement Usage Notice",
"tools_rsi_launcher_enhance_note_msg": "RSI Launcher Enhancement is a community feature that unpacks the \"RSI Launcher\" on your computer and adds additional enhancement features. Which features to use is up to you.\n\nCurrently, only multi-language operations are officially permitted by CIG. Launcher download enhancement is an extra feature we consider useful, but violating the CIG user agreement (https://robertsspaceindustries.com/eula) may result in serious consequences such as account banning. Whether to enable it is your decision, and we are not responsible for any consequences (game damage, account banning, etc.) that may arise.\n\nThe modifications to the launcher are open-sourced at: https://github.com/StarCitizenToolBox/RSILauncherEnhance, which you can check if needed.\n\nIf for any reason you need to cancel this enhancement patch, please directly reinstall the official launcher.",
"tools_action_unp4k": "P4K Viewer",
"tools_action_unp4k_info": "Unpack Star Citizen p4k files",
"tools_unp4k_title": "P4K Viewer -> {v0}",
"tools_unp4k_view_file": "Click file to preview",
"tools_unp4k_msg_unknown_file_type": "Unknown file type\n{v0}",
"home_localization_select_customize_file_ini": "Please select ini file",
"home_localization_select_customize_file": "Please select custom localization file",
"home_localization_action_select_customize_file": "Click to select ini file",
"home_localization_ptu_advanced_localization_tip_title": "Advanced Localization Recommended",
"home_localization_ptu_advanced_localization_tip_title_info": "In PTU/EPTU and other test channels, current localization text may not be synchronized with the game. Using advanced localization can reduce the occurrence of garbled text.",
"tools_rsi_launcher_enhance_action_fold": "Collapse Additional Features",
"tools_rsi_launcher_enhance_action_expand": "Expand Additional Features",
"tools_unp4k_missing_runtime": "Missing Runtime",
"tools_unp4k_missing_runtime_info": "Using this feature requires .NET8 runtime. Please click the button below to download and install it. After successful installation, reopen this page to continue using.",
"tools_unp4k_missing_runtime_action_install": "Install Runtime",
"settings_title_general": "General",
"settings_item_dns": "Use Built-in DNS",
"settings_item_dns_info": "When enabled, may solve DNS pollution issues in some regions",
"settings_title_game": "Game",
"about_action_btn_faq": "FAQ",
"guide_title_welcome": "Welcome",
"guide_info_check_settings": "Please check if the following settings are correct. If there are errors, click the icon on the right to correct them before continuing",
"guide_info_game_download_note": "* If your game is currently downloading, please launch the game once after the download is complete and click the refresh button. If you only want to use launcher enhancement localization, make sure the launcher path is correct and click Complete Setup",
"guide_action_get_help": "Get Help",
"guide_action_complete_setup": "Complete Setup",
"guide_dialog_confirm_complete_setup": "Confirm complete setup?",
"guide_action_info_no_launcher_path_warning": "You have not selected a launcher installation path. Are you sure you want to complete the setup?\n\nAfter the guide page closes, you will need to manually go to the settings page to operate.",
"guide_action_info_no_game_path_warning": "You have not selected a game installation path. Are you sure you want to complete the setup?\n\nAfter the guide page closes, you will need to manually go to the settings page to operate.",
"setting_toast_select_launcher_exe": "Select launcher exe file: \"RSI Launcher.exe\"",
"setting_toast_select_game_file": "Select the corresponding game file to: Bin64/StarCitizen.exe",
"input_method_feature_maintenance": "Feature under maintenance, please try again later",
"input_method_community_input_method_not_installed": "Community input method support not installed",
"input_method_install_community_input_method_prompt": "Do you want to go to Localization Management to install?\n\nIf you have already installed localization, please uninstall it and enable the community input method support switch when reinstalling.",
"input_method_usage_instructions": "Instructions",
"input_method_input_text_instructions": "Enter text in the text box above, and paste (Ctrl+V) the encoded text below into the game's text box to send characters that the game doesn't support input for in chat channels.",
"input_method_input_placeholder": "Please enter text...",
"input_method_encoded_text_placeholder": "Encoded text will appear here...",
"input_method_remote_input_service": "Remote Input Service:",
"input_method_disclaimer": "*This feature is recommended for use only in non-public channels. If users choose to use this feature in public channels, any consequences (including but not limited to being reported by other players for spam, etc.) are the user's sole responsibility.\n*If this feature is abused, we will disable it.",
"input_method_experimental_input_method": "Community Input Method (Experimental)",
"input_method_auto_copy": "Auto Copy",
"input_method_confirm_enable_remote_input": "Confirm enable remote input?",
"input_method_enable_remote_input_instructions": "After enabling this feature, you can access the remote service address via mobile phone for quick text input, saving the hassle of switching windows and not interrupting game flow.\n\nIf a firewall prompt appears, please expand the dialog, manually check all network types and allow, otherwise you may not be able to access this feature normally.",
"input_method_address_fetch_failed": "Failed to fetch address, please check computer IP manually",
"input_method_text_cannot_be_empty": "Text cannot be empty!",
"input_method_send_success": "Sent successfully!",
"input_method_ip_address_not_found": "We couldn't find an appropriate IP address to access the service. Please try the following addresses (swipe left/right)",
"input_method_scan_qr_code": "Please scan the QR code below with your mobile device, or manually visit the link",
"input_method_service_qr_code": "Service QR Code",
"input_method_confirm_install_advanced_localization": "Confirm install advanced localization?",
"input_method_install_community_input_method_support": "Install Community Input Method Support",
"input_method_community_input_method_support_version": "Community Input Method Support: {v0}",
"input_method_online_version_prompt": "An online standalone version of this feature is also available. Click to visit >",
"input_method_support_updated": "Community input method support updated",
"input_method_support_updated_to_version": "Community input method support updated to: {v0}",
"input_method_auto_translate": "Bilingual Translation:",
"input_method_auto_translate_dialog_title": "Enable bilingual translation?",
"input_method_auto_translate_dialog_title_content": "When enabled, Google Translate service will be used to add English subtitles to your input content, which may cause response lag. If the feature is abnormal, please turn it off.\n\nText will be forwarded to Google servers, please refer to Google's privacy policy.",
"support_dev_thanks_message": "Thank you for using SCToolbox, I'm its developer xkeyC\nSCToolbox is committed to open source and providing free services to players. Free service is a challenging job, and if you consider buying me a drink, I would be very grateful.\nDonated funds will be used for server expenses, new feature development, and increasing motivation for software maintenance.",
"support_dev_referral_code_message": "If you haven't registered for the game or entered a referral code yet, you can consider mine: STAR-3YXS-SWTC. Thanks for reading this far",
"support_dev_title": "Support Developer",
"support_dev_github_star_message": "You can also give my project a Star on GitHub",
"support_dev_github_star_button": "Star Project",
"support_dev_in_game_currency_title": "In-game Currency",
"support_dev_in_game_id": "Game ID: xkeyC",
"support_dev_in_game_id_copied": "Game ID copied",
"support_dev_copy_button": "Copy",
"support_dev_in_game_currency_message": "You can send aUEC to me in the game as support, which will help me get a better gaming experience in limited time",
"support_dev_alipay": "Alipay",
"support_dev_wechat": "WeChat",
"support_dev_donation_disclaimer": "* Please note: Donation is a gratuitous gift, you will not receive additional benefits in software experience.",
"support_dev_back_button": "Back",
"support_dev_scroll_hint": "Scroll down for more",
"log_analyzer_filter_all": "All",
"log_analyzer_filter_basic_info": "Basic Info",
"log_analyzer_filter_account_related": "Account Related",
"log_analyzer_filter_fatal_collision": "Fatal Collision",
"log_analyzer_filter_vehicle_damaged": "Vehicle Damaged",
"log_analyzer_filter_character_death": "Character Death",
"log_analyzer_filter_statistics": "Statistics",
"log_analyzer_filter_game_crash": "Game Crash",
"log_analyzer_filter_local_inventory": "Local Inventory",
"log_analyzer_no_log_file": "Log file not found",
"log_analyzer_one_click_diagnosis_header": "----- SCToolbox One-Click Diagnosis -----",
"log_analyzer_details_info": "Detailed information: {v0}",
"log_analyzer_no_crash_detected": "No game crash information detected",
"log_analyzer_game_crash": "Game Crash ",
"log_analyzer_kill_summary": "Kill Summary",
"log_analyzer_kill_death_suicide_count": "Kills: {v0} Deaths: {v1} Suicides: {v2} \nVehicle Destruction (Soft Death): {v3} Vehicle Destruction (Disintegration): {v4}",
"log_analyzer_play_time": "Play Time",
"log_analyzer_play_time_format": "{v0} hours {v1} minutes {v2} seconds",
"log_analyzer_game_start": "Game Start",
"log_analyzer_game_loading": "Game Loading",
"log_analyzer_mode_loading_time": "Mode: {v0} Time taken: {v1} seconds",
"log_analyzer_game_close": "Game Close",
"log_analyzer_collision_details": "Area: {v0} Player driving: {v1} Collision entity: {v2} \nCollision vehicle: {v3} Collision distance: {v4} ",
"log_analyzer_soft_death": "Soft Death",
"log_analyzer_disintegration": "Disintegration",
"log_analyzer_vehicle_damage_details": "Vehicle model: {v0} \nArea: {v1} \nDamage level: {v2} ({v3}) Responsible party: {v4}",
"log_analyzer_death_details": "Victim ID: {v0} Cause of death: {v1} \nKiller ID: {v2} \nArea: {v3}",
"log_analyzer_player_login": "Player {v0} logged in...",
"log_analyzer_view_local_inventory": "View Local Inventory",
"log_analyzer_player_location": "Player ID: {v0} Location: {v1}",
"log_analyzer_game_installation_path": "Game Installation Path",
"log_analyzer_select_game_path": "Please select game installation path",
"log_analyzer_search_placeholder": "Enter keywords to search content",
"log_analyzer_title": "Log Analyzer",
"log_analyzer_description": "Analyze your gameplay records (login, death, kills, and other information)",
"log_analyzer_window_title": "SCToolbox: Log Analyzer",
"nav_title": "Navigation",
"nav_third_party_service_disclaimer": "*The services linked correspond to third-party providers. We do not make any guarantees and users should assess the risks of using them. | ",
"nav_website_navigation_data_provided_by": "Website navigation data provided by",
"nav_provided_by": "",
"nav_fetching_data": "Fetching data..."
}

896
lib/l10n/intl_ja.arb Normal file
View File

@ -0,0 +1,896 @@
{
"@@locale": "ja",
"@@auto_translate_locale": "ja",
"app_language_name": "日本語",
"@app_language_name": {},
"app_language_code": "ja",
"app_index_version_info": "SCToolbox V{v0} {v1}",
"@app_index_version_info": {},
"app_shortcut_name": "SCToolboxDEV.lnk",
"@app_shortcut_name": {},
"about_check_update": "アップデートを確認",
"@about_check_update": {},
"about_app_description": "ローカライズだけではありません!\n\nSCToolboxは宇宙探検の強力なサポートツールです。私たちはゲーム内の一般的な問題を解決し、コミュニティローカライズ、パフォーマンス最適化、一般的なウェブサイトのローカライズなどの操作を容易にするためにプレイヤーを支援することに専念しています。",
"@about_app_description": {},
"about_online_feedback": "オンラインフィードバック",
"@about_online_feedback": {},
"about_action_qq_group": "QQグループ: 940696487",
"@about_action_qq_group": {},
"about_action_email": "メール: xkeyc@qq.com",
"@about_action_email": {},
"about_action_open_source": "オープンソース",
"@about_action_open_source": {},
"about_disclaimer": "これはStar Citizenの非公式ツールであり、Cloud Imperium企業グループに所属していません。ホストまたはユーザーによって作成されていないすべてのコンテンツは、それぞれの所有者の財産です。\nStar Citizen®、Roberts Space Industries®およびCloud Imperium®はCloud Imperium Rights LLCの登録商標です。",
"@about_disclaimer": {},
"about_analytics_launch": "起動",
"@about_analytics_launch": {},
"about_analytics_launch_game": "ゲームを起動",
"@about_analytics_launch_game": {},
"about_analytics_total_users": "累計ユーザー",
"@about_analytics_total_users": {},
"about_analytics_install_translation": "ローカリゼーション インストール",
"@about_analytics_install_translation": {},
"about_analytics_performance_optimization": "パフォーマンス最適化",
"@about_analytics_performance_optimization": {},
"about_analytics_p4k_redirection": "P4K迂回",
"@about_analytics_p4k_redirection": {},
"about_analytics_units_user": "名",
"@about_analytics_units_user": {},
"about_analytics_units_times": "回",
"@about_analytics_units_times": {},
"about_info_latest_version": "最新バージョンです!",
"@about_info_latest_version": {},
"home_holiday_countdown": "祝日カウントダウン",
"@home_holiday_countdown": {},
"home_holiday_countdown_disclaimer": "* 上記の祝日日付は手動で収集・管理されており、誤りがある可能性があります。フィードバックを歓迎します!",
"@home_holiday_countdown_disclaimer": {},
"home_action_one_click_launch": "ワンクリック起動",
"@home_action_one_click_launch": {},
"home_title_logging_in": "ログイン中...",
"@home_title_logging_in": {},
"home_login_title_welcome_back": "おかえりなさい!",
"@home_login_title_welcome_back": {},
"home_login_title_launching_game": "ゲームを起動しています...",
"@home_login_title_launching_game": {},
"home_action_login_rsi_account": "RSIアカウントにログイン",
"@home_action_login_rsi_account": {},
"home_login_info_game_version_outdated": "ゲームバージョンが古くなっています",
"@home_login_info_game_version_outdated": {},
"home_login_info_rsi_server_report": "RSIサーバーが報告するバージョン{v1} \n\nローカルバージョン{v2} \n\nRSI Launcherを使用してゲームを更新することをお勧めします",
"@home_login_info_rsi_server_report": {},
"home_login_info_action_ignore": "無視",
"@home_login_info_action_ignore": {},
"home_login_action_title_box_one_click_launch": "ツールボックスワンクリック起動",
"@home_login_action_title_box_one_click_launch": {},
"home_login_info_one_click_launch_description": "この機能はゲームをより便利に起動するのに役立ちます。\n\nアカウントセキュリティを確保するために、この機能はローカリゼーションブラウザを使用してログイン状態を保持し、パスワード情報を保存しません自動入力機能を有効にしていない限り。\n\nこの機能を使用してアカウントにログインする場合は、信頼できるソースからSCToolboxをダウンロードしていることを確認してください。",
"@home_login_info_one_click_launch_description": {},
"home_login_action_title_need_webview2_runtime": "WebView2 Runtimeのインストールが必要です",
"@home_login_action_title_need_webview2_runtime": {},
"action_close": "閉じる",
"@action_close": {},
"downloader_speed_limit_settings": "速度制限設定",
"@downloader_speed_limit_settings": {},
"downloader_action_pause_all": "すべて一時停止",
"@downloader_action_pause_all": {},
"downloader_action_resume_all": "すべて再開",
"@downloader_action_resume_all": {},
"downloader_action_cancel_all": "すべてキャンセル",
"@downloader_action_cancel_all": {},
"downloader_info_no_download_tasks": "ダウンロードタスクはありません",
"@downloader_info_no_download_tasks": {},
"downloader_info_total_size": "合計サイズ:{v1}",
"@downloader_info_total_size": {},
"downloader_info_verifying": "検証中...{v2}",
"@downloader_info_verifying": {},
"downloader_info_downloading": "ダウンロード中... ({v0}%)",
"@downloader_info_downloading": {},
"downloader_info_status": "ステータス:{v0}",
"@downloader_info_status": {},
"downloader_info_uploaded": "アップロード済み:{v0}",
"@downloader_info_uploaded": {},
"downloader_info_downloaded": "ダウンロード済み:{v0}",
"@downloader_info_downloaded": {},
"downloader_action_options": "オプション",
"@downloader_action_options": {},
"downloader_action_continue_download": "ダウンロードを続ける",
"@downloader_action_continue_download": {},
"downloader_action_pause_download": "ダウンロードを一時停止",
"@downloader_action_pause_download": {},
"downloader_action_cancel_download": "ダウンロードをキャンセル",
"@downloader_action_cancel_download": {},
"action_open_folder": "フォルダを開く",
"@action_open_folder": {},
"downloader_info_download_upload_speed": "ダウンロード: {v0}/s アップロード:{v1}/s",
"@downloader_info_download_upload_speed": {},
"downloader_info_downloading_status": "ダウンロード中...",
"@downloader_info_downloading_status": {},
"downloader_info_waiting": "待機中",
"@downloader_info_waiting": {},
"downloader_info_paused": "一時停止中",
"@downloader_info_paused": {},
"downloader_info_download_failed": "ダウンロード失敗",
"@downloader_info_download_failed": {},
"downloader_info_download_completed": "ダウンロード完了",
"@downloader_info_download_completed": {},
"downloader_info_deleted": "削除済み",
"@downloader_info_deleted": {},
"downloader_title_downloading": "ダウンロード中",
"@downloader_title_downloading": {},
"downloader_title_ended": "終了済み",
"@downloader_title_ended": {},
"downloader_action_confirm_cancel_all_tasks": "すべてのタスクをキャンセルしますか?",
"@downloader_action_confirm_cancel_all_tasks": {},
"downloader_info_manual_file_deletion_note": "ファイルが不要になった場合は、手動で削除する必要があるかもしれません。",
"@downloader_info_manual_file_deletion_note": {},
"downloader_action_confirm_cancel_download": "ダウンロードをキャンセルしますか?",
"@downloader_action_confirm_cancel_download": {},
"downloader_info_p2p_network_note": "SCToolboxはファイルダウンロードを高速化するためにP2Pネットワークを使用しています。通信量に制限がある場合は、アップロード帯域幅を1(byte)に設定できます。",
"@downloader_info_p2p_network_note": {},
"downloader_info_download_unit_input_prompt": "ダウンロード単位を入力してください。例1、100k、10m、0または空白で制限なし。",
"@downloader_info_download_unit_input_prompt": {},
"downloader_input_upload_speed_limit": "アップロード制限:",
"@downloader_input_upload_speed_limit": {},
"downloader_input_download_speed_limit": "ダウンロード制限:",
"@downloader_input_download_speed_limit": {},
"downloader_input_info_p2p_upload_note": "* P2Pアップロードはファイルのダウンロード中にのみ行われ、ダウンロードが完了するとP2P接続は閉じられます。シードに参加したい場合は、「アバウト」ページから私たちにご連絡ください。",
"@downloader_input_info_p2p_upload_note": {},
"doctor_title_one_click_diagnosis": "ワンクリック診断 -> {v0}",
"@doctor_title_one_click_diagnosis": {},
"doctor_action_rsi_launcher_log": "RSIランチャーログ",
"@doctor_action_rsi_launcher_log": {},
"doctor_action_game_run_log": "ゲーム実行ログ",
"@doctor_action_game_run_log": {},
"doctor_info_scan_complete_no_issues": "スキャン完了、問題は見つかりませんでした!",
"@doctor_info_scan_complete_no_issues": {},
"doctor_info_processing": "処理中...",
"@doctor_info_processing": {},
"doctor_info_game_rescue_service_note": "深宇宙治療センターQQグループ番号536454632によるゲーム異常救済サービスにアクセスしようとしています。これは主にゲームのインストール失敗や頻繁なクラッシュに対応するものです。ゲームプレイの問題に関しては、グループに参加しないでください。",
"@doctor_info_game_rescue_service_note": {},
"doctor_info_need_help": "助けが必要ですか?クリックしてグループに参加し、無料のサポートを受けましょう!",
"@doctor_info_need_help": {},
"doctor_info_tool_check_result_note": "注意:このツールの検出結果は参考用です。以下の操作が理解できない場合は、スクリーンショットを経験豊富なプレイヤーに提供してください!",
"@doctor_info_tool_check_result_note": {},
"doctor_info_result_unsupported_os": "サポートされていないオペレーティングシステムです。ゲームが実行できない可能性があります",
"@doctor_info_result_unsupported_os": {},
"doctor_info_result_upgrade_system": "システムをアップグレードしてください ({v0})",
"@doctor_info_result_upgrade_system": {},
"doctor_info_result_missing_live_folder": "インストールディレクトリにLIVEフォルダがありません。インストールが失敗する可能性があります",
"@doctor_info_result_missing_live_folder": {},
"doctor_info_result_create_live_folder": "クリックして修復すると、LIVEフォルダが作成されます。完了したらインストールを再試行してください。({v0})",
"@doctor_info_result_create_live_folder": {},
"doctor_info_result_incompatible_nvme_device": "新しいタイプのNVMEデバイスで、RSIランチャーとの互換性がありません。インストールが失敗する可能性があります",
"@doctor_info_result_incompatible_nvme_device": {},
"doctor_info_result_add_registry_value": "レジストリにForcedPhysicalSectorSizeInBytes値を追加して古いデバイスをエミュレートします。ハードディスクパーティション({v0})",
"@doctor_info_result_add_registry_value": {},
"doctor_info_result_missing_easyanticheat_files": "EasyAntiCheatファイルが見つかりません",
"@doctor_info_result_missing_easyanticheat_files": {},
"doctor_info_result_verify_files_with_rsi_launcher": "LIVEフォルダ内にEasyAntiCheatファイルが見つからないか、ファイルが不完全です。RSIランチャーを使用してファイルを検証してください",
"@doctor_info_result_verify_files_with_rsi_launcher": {},
"doctor_info_result_easyanticheat_not_installed": "EasyAntiCheatがインストールされていないか、正常に終了していません",
"@doctor_info_result_easyanticheat_not_installed": {},
"doctor_info_result_install_easyanticheat": "EasyAntiCheatがインストールされていません。クリックして修復するとワンクリックでインストールします。ゲームが正常に起動して終了するまで、この問題は常に表示されます。他の理由でゲームがクラッシュする場合は、この項目を無視できます",
"@doctor_info_result_install_easyanticheat": {},
"doctor_info_result_chinese_username": "中国語ユーザー名!",
"@doctor_info_result_chinese_username": {},
"doctor_info_result_chinese_username_error": "中国語のユーザー名はゲームの起動/インストールエラーを引き起こす可能性があります!修復ボタンをクリックして変更チュートリアルを表示してください!",
"@doctor_info_result_chinese_username_error": {},
"doctor_info_result_chinese_install_path": "中国語のインストールパス!",
"@doctor_info_result_chinese_install_path": {},
"doctor_info_result_chinese_install_path_error": "中国語のインストールパスです!これはゲームの起動/インストールエラーを引き起こす可能性があります!({v0}、RSIランチャーでインストールパスを変更してください。",
"@doctor_info_result_chinese_install_path_error": {},
"doctor_info_result_low_physical_memory": "物理メモリが不足しています",
"@doctor_info_result_low_physical_memory": {},
"doctor_info_result_memory_requirement": "このゲームを実行するには、少なくとも16GBの物理メモリRAMが必要です。現在のサイズ{v0}",
"@doctor_info_result_memory_requirement": {},
"doctor_info_result_fix_suggestion": "修正提案: {v0}",
"@doctor_info_result_fix_suggestion": {},
"doctor_info_result_no_solution": "現在解決策はありません。スクリーンショットを撮ってフィードバックしてください",
"@doctor_info_result_no_solution": {},
"doctor_info_action_fix": "修復",
"@doctor_info_action_fix": {},
"doctor_action_view_solution": "解決策を表示",
"@doctor_action_view_solution": {},
"doctor_tip_title_select_game_directory": "ホームページでゲームインストールディレクトリを選択してください。",
"@doctor_tip_title_select_game_directory": {},
"doctor_action_result_try_latest_windows": "ハードウェアが条件を満たしている場合は、最新のWindowsシステムをインストールしてみてください。",
"@doctor_action_result_try_latest_windows": {},
"doctor_action_result_create_folder_success": "フォルダの作成に成功しました。ゲームのダウンロードを続けてみてください!",
"@doctor_action_result_create_folder_success": {},
"doctor_action_result_create_folder_fail": "フォルダの作成に失敗しました。手動で作成してみてください。\nディレクトリ{v0} \nエラー{v1}",
"@doctor_action_result_create_folder_fail": {},
"doctor_action_result_fix_success": "修復に成功しました。再起動してからゲームのインストールを続けてみてくださいレジストリの変更が他のソフトウェアに互換性の問題を引き起こす場合は、ツールのNVMEレジストリクリーナーを使用してください。",
"@doctor_action_result_fix_success": {},
"doctor_action_result_fix_fail": "修復に失敗しました、{v0}",
"@doctor_action_result_fix_fail": {},
"doctor_action_result_game_start_success": "修復に成功しました。ゲームを起動してみてください。問題が解決しない場合は、ツールボックスの「EACを再インストール」を使用してください",
"@doctor_action_result_game_start_success": {},
"doctor_action_result_redirect_warning": "リダイレクトします。チュートリアルはインターネットから取得したものですので、注意して操作してください...",
"@doctor_action_result_redirect_warning": {},
"doctor_action_result_issue_not_supported": "この問題は現在自動処理をサポートしていません。スクリーンショットを撮って助けを求めてください",
"@doctor_action_result_issue_not_supported": {},
"doctor_action_analyzing": "分析中...",
"@doctor_action_analyzing": {},
"doctor_action_result_analysis_no_issue": "分析完了、問題は見つかりませんでした",
"@doctor_action_result_analysis_no_issue": {},
"doctor_action_result_analysis_issues_found": "分析完了、{v0}個の問題が見つかりました",
"@doctor_action_result_analysis_issues_found": {},
"doctor_action_result_toast_scan_no_issue": "スキャン完了、問題は見つかりませんでした。それでもインストールに失敗する場合は、ツールボックスの管理者モードでRSIランチャーを試してみてください。",
"@doctor_action_result_toast_scan_no_issue": {},
"doctor_action_tip_checking_game_log": "確認中Game.log",
"@doctor_action_tip_checking_game_log": {},
"doctor_action_info_game_abnormal_exit": "ゲームが異常終了しました:{v0}",
"@doctor_action_info_game_abnormal_exit": {},
"doctor_action_info_game_abnormal_exit_unknown": "ゲームが異常終了しました:不明なエラー",
"@doctor_action_info_game_abnormal_exit_unknown": {},
"doctor_action_info_info_feedback": "info:{v0}、右下の「グループに参加」をクリックしてフィードバックしてください。",
"@doctor_action_info_info_feedback": {},
"doctor_action_info_checking_eac": "確認中EAC",
"@doctor_action_info_checking_eac": {},
"doctor_action_info_checking_runtime": "確認中:実行環境",
"@doctor_action_info_checking_runtime": {},
"doctor_action_result_info_unsupported_os": "サポートされていないオペレーティングシステム:{v0}",
"@doctor_action_result_info_unsupported_os": {},
"doctor_action_info_checking_install_info": "確認中:インストール情報",
"@doctor_action_info_checking_install_info": {},
"doctor_action_view_details": "詳細を表示",
"@doctor_action_view_details": {},
"home_install_location": "インストール場所:",
"@home_install_location": {},
"home_not_installed_or_failed": "インストールされていないか、インストールに失敗しました",
"@home_not_installed_or_failed": {},
"home_action_star_citizen_website_localization": "SC 公式サイト",
"@home_action_star_citizen_website_localization": {},
"home_action_info_roberts_space_industries_origin": "Roberts Space Industries、すべての始まり",
"@home_action_info_roberts_space_industries_origin": {},
"home_action_uex_localization": "UEX ローカリゼーション",
"@home_action_uex_localization": {},
"home_action_info_mining_refining_trade_calculator": "採掘、精製、取引計算機、価格、船舶情報",
"@home_action_info_mining_refining_trade_calculator": {},
"home_action_dps_calculator_localization": "DPS計算機 ローカリゼーション",
"@home_action_dps_calculator_localization": {},
"home_action_info_ship_upgrade_damage_value_query": "オンライン船舶アップグレード、ダメージ値と装備購入場所の照会",
"@home_action_info_ship_upgrade_damage_value_query": {},
"home_action_external_browser_extension": "外部ブラウザ拡張機能:",
"@home_action_external_browser_extension": {},
"home_action_one_click_diagnosis": "ワンクリック診断",
"@home_action_one_click_diagnosis": {},
"home_action_info_one_click_diagnosis_star_citizen": "Star Citizenの一般的な問題をワンクリックで診断",
"@home_action_info_one_click_diagnosis_star_citizen": {},
"home_action_localization_management": "ローカリゼーション管理",
"@home_action_localization_management": {},
"home_action_info_quick_install_localization_resources": "ローカリゼーションリソースを簡単にインストール",
"@home_action_info_quick_install_localization_resources": {},
"home_action_performance_optimization": "パフォーマンス最適化",
"@home_action_performance_optimization": {},
"home_action_info_engine_config_optimization": "エンジン設定ファイルを調整し、ゲームのパフォーマンスを最適化",
"@home_action_info_engine_config_optimization": {},
"home_action_rsi_status_platform": "プラットフォーム",
"@home_action_rsi_status_platform": {},
"home_action_rsi_status_persistent_universe": "PU",
"@home_action_rsi_status_persistent_universe": {},
"home_action_rsi_status_electronic_access": "EA",
"@home_action_rsi_status_electronic_access": {},
"home_action_rsi_status_arena_commander": "AC",
"@home_action_rsi_status_arena_commander": {},
"home_action_rsi_status_rsi_server_status": "RSIサーバーステータス",
"@home_action_rsi_status_rsi_server_status": {},
"home_action_rsi_status_status": "ステータス:",
"@home_action_rsi_status_status": {},
"home_announcement_details": "お知らせ詳細",
"@home_announcement_details": {},
"home_action_info_valid_install_location_required": "この機能には有効なインストール場所が必要です\n\nゲームのダウンロードが完了していない場合は、ダウンロードが完了するまで待ってから、この機能を使用してください。\n\nゲームのダウンロードが完了しているが認識されていない場合は、ゲームを一度起動してからツールボックスを再度開くか、設定オプションでインストール場所を手動で設定してください。",
"@home_action_info_valid_install_location_required": {},
"home_action_info_scanning": "スキャン中 ...",
"@home_action_info_scanning": {},
"home_action_info_scan_complete_valid_directories_found": "スキャン完了、{v0}個の有効なインストールディレクトリが見つかりました",
"@home_action_info_scan_complete_valid_directories_found": {},
"home_action_info_log_file_parse_fail": "ログファイルの解析に失敗しました!",
"@home_action_info_log_file_parse_fail": {},
"home_action_title_star_citizen_website_localization": "SC 公式サイトローカリゼーション",
"@home_action_title_star_citizen_website_localization": {},
"home_action_info_web_localization_plugin_disclaimer": "このプラグイン機能は概要閲覧のみを目的としており、この機能に関連する問題について一切責任を負いません!アカウント操作を行う前に、ウェブサイトのオリジナルコンテンツを確認してください!\n\n\nこの機能を使用してアカウントにログインする場合は、信頼できるソースからSCToolboxをダウンロードしていることを確認してください。",
"@home_action_info_web_localization_plugin_disclaimer": {},
"home_action_info_initializing_resources": "ローカリゼーションリソースを初期化中...",
"@home_action_info_initializing_resources": {},
"home_action_info_initialization_failed": "ウェブローカリゼーションリソースの初期化に失敗しました!{v0}",
"@home_action_info_initialization_failed": {},
"home_title_app_name": "SCToolbox",
"@home_title_app_name": {},
"home_localization_new_version_available": "ローカリゼーションの新しいバージョンが利用可能です!",
"@home_localization_new_version_available": {},
"home_localization_new_version_installed": "{v0}にインストールしたローカリゼーションに新しいバージョンがあります!",
"@home_localization_new_version_installed": {},
"home_info_valid_installation_required": "この機能には有効なインストール場所が必要です",
"@home_info_valid_installation_required": {},
"home_info_one_click_launch_warning": "ワンクリック起動機能の注意",
"@home_info_one_click_launch_warning": {},
"home_info_account_security_warning": "アカウントセキュリティを確保するため、ワンクリック起動機能は開発版では無効化されています。この機能はMicrosoft Storeバージョンで提供される予定です。\n\nMicrosoft Storeバージョンは、Microsoftが信頼性の高い配布ダウンロードとデジタル署名を提供し、ソフトウェアが悪意を持って改ざんされるのを効果的に防ぎます。\n\nヒントゲームの起動にツールボックスを使用しなくても、ローカリゼーションを使用できます。",
"@home_info_account_security_warning": {},
"home_action_install_microsoft_store_version": "Microsoft Storeバージョンをインストール",
"@home_action_install_microsoft_store_version": {},
"home_action_cancel": "キャンセル",
"@home_action_cancel": {},
"home_action_info_abnormal_game_exit": "ゲームが正常に終了しませんでした\nexitCode={v0}\nstdout={v1}\nstderr={v2}\n\n診断情報{v3} \n{v4}",
"@home_action_info_abnormal_game_exit": {},
"home_action_info_unknown_error": "不明なエラー、ワンクリック診断を使用してグループに参加し、フィードバックしてください。",
"@home_action_info_unknown_error": {},
"home_action_info_check_web_link": "詳細情報を確認するには、ポップアップしたウェブリンクを確認してください。",
"@home_action_info_check_web_link": {},
"home_action_info_game_built_in": "ゲーム内蔵",
"@home_action_info_game_built_in": {},
"home_action_info_warning": "警告",
"@home_action_info_warning": {},
"localization_info_machine_translation_warning": "ゲーム内蔵テキストを使用しています。公式テキストは現在機械翻訳です3.21.0まで)。下記のコミュニティローカリゼーションをインストールすることをお勧めします。",
"@localization_info_machine_translation_warning": {},
"localization_info_translation": "ゲームローカリゼーション",
"@localization_info_translation": {},
"localization_info_enabled": "有効({v0}",
"@localization_info_enabled": {},
"localization_info_installed_version": "インストール済みバージョン:{v0}",
"@localization_info_installed_version": {},
"localization_action_translation_feedback": "ローカリゼーションフィードバック",
"@localization_action_translation_feedback": {},
"localization_action_uninstall_translation": "ローカリゼーションをアンインストール",
"@localization_action_uninstall_translation": {},
"localization_info_note": "備考:",
"@localization_info_note": {},
"localization_info_community_translation": "コミュニティローカリゼーション",
"@localization_info_community_translation": {},
"localization_info_no_translation_available": "この言語/バージョンには現在利用可能なローカリゼーションがありません。お待ちください!",
"@localization_info_no_translation_available": {},
"localization_action_install": "インストール",
"@localization_action_install": {},
"localization_info_version_number": "バージョン番号:{v0}",
"@localization_info_version_number": {},
"localization_info_channel": "チャネル:{v0}",
"@localization_info_channel": {},
"localization_info_update_time": "更新時間:{v0}",
"@localization_info_update_time": {},
"localization_info_installed": "インストール済み",
"@localization_info_installed": {},
"localization_info_unavailable": "利用不可",
"@localization_info_unavailable": {},
"localization_info_language": "言語: ",
"@localization_info_language": {},
"localization_info_remove_incompatible_translation_params": "互換性のないローカリゼーションパラメータを削除しますか",
"@localization_info_remove_incompatible_translation_params": {},
"localization_info_incompatible_translation_params_warning": "USER.cfgに互換性のないローカリゼーションパラメータが含まれています。これは以前のローカリゼーションファイルの残りである可能性があります。\n\nこれによりローカリゼーションが無効になったり文字化けしたりする可能性があります。確認をクリックすると、ワンクリックで削除されます他の設定には影響しません。",
"@localization_info_incompatible_translation_params_warning": {},
"localization_info_corrupted_file": "ファイルが破損しています。再ダウンロードしてください",
"@localization_info_corrupted_file": {},
"localization_info_installation_error": "インストールエラー!\n\n {v0}",
"@localization_info_installation_error": {},
"localization_info_custom_files": "カスタムファイル",
"@localization_info_custom_files": {},
"performance_info_graphic_optimization_hint": "グラフィック最適化のヒント",
"@performance_info_graphic_optimization_hint": {},
"performance_info_graphic_optimization_warning": "この機能はグラフィックカードのボトルネックの最適化に役立ちますが、CPUのボトルネックには逆効果になることがあります。グラフィックカードの性能が高い場合は、より良い画質を使用してグラフィックカードの利用率を高めることができます。",
"@performance_info_graphic_optimization_warning": {},
"performance_info_current_status": "現在の状態:{v0}",
"@performance_info_current_status": {},
"performance_info_applied": "適用済み",
"@performance_info_applied": {},
"performance_info_not_applied": "未適用",
"@performance_info_not_applied": {},
"performance_action_preset": "プリセット:",
"@performance_action_preset": {},
"performance_action_low": "低",
"@performance_action_low": {},
"performance_action_medium": "中",
"@performance_action_medium": {},
"performance_action_high": "高",
"@performance_action_high": {},
"performance_action_super": "超高",
"@performance_action_super": {},
"performance_action_info_preset_only_changes_graphics": "(プリセットはグラフィック設定のみを変更します)",
"@performance_action_info_preset_only_changes_graphics": {},
"performance_action_reset_to_default": " デフォルトに戻す ",
"@performance_action_reset_to_default": {},
"performance_action_apply": "適用",
"@performance_action_apply": {},
"performance_action_apply_and_clear_shaders": "適用してシェーダーをクリア(推奨)",
"@performance_action_apply_and_clear_shaders": {},
"performance_title_performance_optimization": "パフォーマンス最適化 -> {v0}",
"@performance_title_performance_optimization": {},
"performance_action_custom_parameters_input": "ツールボックスに収録されていないカスタムパラメーターをここに入力できます。設定例:\n\nr_displayinfo=0\nr_VSync=0",
"@performance_action_custom_parameters_input": {},
"performance_info_min_max_values": "{v0} 最小値: {v1} / 最大値: {v2}",
"@performance_info_min_max_values": {},
"performance_info_graphics": "グラフィック",
"@performance_info_graphics": {},
"performance_info_delete_config_file": "設定ファイルを削除中...",
"@performance_info_delete_config_file": {},
"performance_action_clear_shaders": "シェーダーをクリア",
"@performance_action_clear_shaders": {},
"performance_info_done": "完了...",
"@performance_info_done": {},
"performance_info_shader_clearing_warning": "シェーダーをクリアした後、最初にゲームに入るとカクつく可能性があります。ゲームの初期化が完了するまで辛抱強くお待ちください。",
"@performance_info_shader_clearing_warning": {},
"performance_info_generate_config_file": "設定ファイルを生成",
"@performance_info_generate_config_file": {},
"performance_info_write_out_config_file": "設定ファイルを書き出し",
"@performance_info_write_out_config_file": {},
"app_index_menu_home": "ホーム",
"@app_index_menu_home": {},
"app_index_menu_lobby": "ロビー",
"@app_index_menu_lobby": {},
"app_index_menu_tools": "ツール",
"@app_index_menu_tools": {},
"app_index_menu_settings": "設定",
"@app_index_menu_settings": {},
"app_index_menu_about": "アバウト",
"@app_index_menu_about": {},
"lobby_online_lobby_coming_soon": "オンラインロビー、乞うご期待!",
"@lobby_online_lobby_coming_soon": {},
"lobby_invitation_to_participate": "ぜひご参加ください ",
"@lobby_invitation_to_participate": {},
"lobby_survey": "アンケート調査。",
"@lobby_survey": {},
"setting_action_create_settings_shortcut": "設定ショートカットを作成",
"@setting_action_create_settings_shortcut": {},
"setting_action_create_desktop_shortcut": "デスクトップに「SCToolbox」ショートカットを作成",
"@setting_action_create_desktop_shortcut": {},
"setting_action_reset_auto_password_fill": "自動パスワード入力をリセット",
"@setting_action_reset_auto_password_fill": {},
"setting_action_ignore_efficiency_cores_on_launch": "ゲーム起動時に効率コアを無視Intel第12世代以降のプロセッサに適用",
"@setting_action_ignore_efficiency_cores_on_launch": {},
"setting_action_set_core_count": "設定されたコア数:{v0} この機能はホームページのツールボックスワンクリック起動またはツールのRSIランチャー管理者モードに適用されます。0の場合、この機能は有効になりません",
"@setting_action_set_core_count": {},
"setting_action_set_launcher_file": "ランチャーファイルを設定RSI Launcher.exe",
"@setting_action_set_launcher_file": {},
"setting_action_info_manual_launcher_location_setting": "ランチャーの場所を手動で設定します。インストール場所の自動スキャンができない場合のみ使用することをお勧めします",
"@setting_action_info_manual_launcher_location_setting": {},
"setting_action_set_game_file": "ゲームファイルを設定StarCitizen.exe",
"@setting_action_set_game_file": {},
"setting_action_info_manual_game_location_setting": "ゲームのインストール場所を手動で設定します。インストール場所の自動スキャンができない場合のみ使用することをお勧めします",
"@setting_action_info_manual_game_location_setting": {},
"setting_action_clear_translation_file_cache": "ローカリゼーションファイルキャッシュをクリア",
"@setting_action_clear_translation_file_cache": {},
"setting_action_info_cache_clearing_info": "キャッシュサイズ {v0}MB、ツールボックスがダウンロードしたローカリゼーションファイルキャッシュをクリアします。インストール済みのローカリゼーションには影響しません",
"@setting_action_info_cache_clearing_info": {},
"setting_action_tool_site_access_acceleration": "ツールサイトアクセス加速",
"@setting_action_tool_site_access_acceleration": {},
"setting_action_info_mirror_server_info": "ミラーサーバーを使用してDps、Uexなどのツールウェブサイトへのアクセスを高速化します。アクセスに異常がある場合は、この機能をオフにしてください。アカウントセキュリティを保護するために、どのような状況でもRSI公式サイトは加速されません。",
"@setting_action_info_mirror_server_info": {},
"setting_action_view_log": "ログを表示",
"@setting_action_view_log": {},
"setting_action_info_view_log_file": "SCToolboxのログファイルを表示して、ツールのバグを特定します",
"@setting_action_info_view_log_file": {},
"setting_action_info_confirm_reset_autofill": "自動入力をリセットしますか?",
"@setting_action_info_confirm_reset_autofill": {},
"setting_action_info_delete_local_account_warning": "これにより、ローカルアカウント記録が削除されるか、次回ゲームを起動するときに自動入力を選択する際に「いいえ」を選択して自動入力を無効にします。",
"@setting_action_info_delete_local_account_warning": {},
"setting_action_info_autofill_data_cleared": "自動入力データがクリアされました",
"@setting_action_info_autofill_data_cleared": {},
"setting_action_info_enter_cpu_core_to_ignore": "無視するCPUコア数を入力してください",
"@setting_action_info_enter_cpu_core_to_ignore": {},
"setting_action_info_cpu_core_tip": "ヒントあなたのデバイスに効率コアがいくつあるかを入力してください。大小コア設計でないデバイスは0のままにしてください\n\nこの機能はホームページのツールボックスワンクリック起動またはツールのRSIランチャー管理者モードに適用されます。0の場合、この機能は有効になりません。",
"@setting_action_info_cpu_core_tip": {},
"setting_action_info_select_rsi_launcher_location": "RSIランチャーの場所を選択してくださいRSI Launcher.exe",
"@setting_action_info_select_rsi_launcher_location": {},
"setting_action_info_setting_success": "設定成功、対応するページで更新をクリックすると新しいパスがスキャンされます",
"@setting_action_info_setting_success": {},
"setting_action_info_file_error": "ファイルエラー!",
"@setting_action_info_file_error": {},
"setting_action_info_select_game_install_location": "ゲームのインストール場所を選択してくださいStarCitizen.exe",
"@setting_action_info_select_game_install_location": {},
"setting_action_info_confirm_clear_cache": "ローカリゼーションキャッシュをクリアしますか?",
"@setting_action_info_confirm_clear_cache": {},
"setting_action_info_clear_cache_warning": "これはインストール済みのローカリゼーションには影響しません。",
"@setting_action_info_clear_cache_warning": {},
"setting_action_info_microsoft_version_limitation": "Microsoft版の機能制限により、次に開かれるウィンドウで手動で「SCToolbox」をデスクトップにドラッグしてショートカットを作成してください。",
"@setting_action_info_microsoft_version_limitation": {},
"setting_action_info_shortcut_created": "作成完了、デスクトップに戻って確認してください",
"@setting_action_info_shortcut_created": {},
"app_upgrade_title_new_version_found": "新しいバージョンが見つかりました -> {v0}",
"@app_upgrade_title_new_version_found": {},
"app_upgrade_info_getting_new_version_details": "新しいバージョンの詳細を取得中...",
"@app_upgrade_info_getting_new_version_details": {},
"app_upgrade_info_update_server_tip": "ヒント:現在、コスト管理に役立つ分散サーバーを使用して更新しています。ダウンロード速度が低下する可能性がありますが、ダウンロードに問題がある場合は、ここをクリックして手動インストールに切り替えてください。",
"@app_upgrade_info_update_server_tip": {},
"app_upgrade_info_installing": "インストール中: ",
"@app_upgrade_info_installing": {},
"app_upgrade_info_downloading": "ダウンロード中: {v0}% ",
"@app_upgrade_info_downloading": {},
"app_upgrade_action_update_now": "今すぐ更新",
"@app_upgrade_action_update_now": {},
"app_upgrade_action_next_time": "次回にする",
"@app_upgrade_action_next_time": {},
"app_upgrade_info_download_failed": "ダウンロードに失敗しました。手動インストールを試してください!",
"@app_upgrade_info_download_failed": {},
"app_upgrade_info_run_failed": "実行に失敗しました。手動インストールを試してください!",
"@app_upgrade_info_run_failed": {},
"app_splash_checking_availability": "利用可能性を確認中、少し時間がかかる場合があります...",
"@app_splash_checking_availability": {},
"app_splash_checking_for_updates": "更新を確認中...",
"@app_splash_checking_for_updates": {},
"app_splash_almost_done": "もうすぐ完了…",
"@app_splash_almost_done": {},
"tools_hosts_info_rsi_official_website": "RSI公式サイト",
"@tools_hosts_info_rsi_official_website": {},
"tools_hosts_info_rsi_customer_service": "RSIカスタマーサービスサイト",
"@tools_hosts_info_rsi_customer_service": {},
"tools_hosts_info_dns_query_and_test": "DNSを問い合わせてアクセス可能性をテスト中です。しばらくお待ちください...",
"@tools_hosts_info_dns_query_and_test": {},
"tools_hosts_info_writing_hosts": "Hostsファイルに書き込み中 ...",
"@tools_hosts_info_writing_hosts": {},
"tools_hosts_info_reading_config": "設定を読み込み中 ...",
"@tools_hosts_info_reading_config": {},
"tools_hosts_info_hosts_acceleration": "Hosts加速",
"@tools_hosts_info_hosts_acceleration": {},
"tools_hosts_info_open_hosts_file": "Hostsファイルを開く",
"@tools_hosts_info_open_hosts_file": {},
"tools_hosts_info_status": "ステータス",
"@tools_hosts_info_status": {},
"tools_hosts_info_site": "サイト",
"@tools_hosts_info_site": {},
"tools_hosts_info_enable": "有効にする",
"@tools_hosts_info_enable": {},
"tools_hosts_action_one_click_acceleration": "ワンクリック加速",
"@tools_hosts_action_one_click_acceleration": {},
"tools_info_scanning": "スキャン中...",
"@tools_info_scanning": {},
"tools_info_processing_failed": "処理に失敗しました!:{v0}",
"@tools_info_processing_failed": {},
"tools_info_game_install_location": "ゲームインストール場所: ",
"@tools_info_game_install_location": {},
"tools_info_rsi_launcher_location": "RSIランチャー場所",
"@tools_info_rsi_launcher_location": {},
"tools_action_view_system_info": "システム情報を表示",
"@tools_action_view_system_info": {},
"tools_action_info_view_critical_system_info": "診断に役立つ重要なシステム情報を表示 \n\n時間のかかる操作です、お待ちください。",
"@tools_action_info_view_critical_system_info": {},
"tools_action_p4k_download_repair": "P4K 分散ダウンロード / 修復",
"@tools_action_p4k_download_repair": {},
"tools_action_info_p4k_download_repair_tip": "Star Citizen中国語百科事典が提供する分散ダウンロードサービスを使用して、p4kのダウンロードや修復ができます。 \nバージョン情報{v0}",
"@tools_action_info_p4k_download_repair_tip": {},
"tools_action_hosts_acceleration_experimental": "Hosts加速実験的",
"@tools_action_hosts_acceleration_experimental": {},
"tools_action_info_hosts_acceleration_experimental_tip": "IP情報をHostsファイルに書き込み、一部の地域でのDNS汚染による公式サイトへのログイン問題などを解決します。\nこの機能は第一段階のテスト中です。問題が発生した場合はすぐにフィードバックしてください。",
"@tools_action_info_hosts_acceleration_experimental_tip": {},
"tools_action_reinstall_easyanticheat": "EasyAntiCheat アンチチートを再インストール",
"@tools_action_reinstall_easyanticheat": {},
"tools_action_info_reinstall_eac": "EACエラーが発生し、自動修復が効かない場合は、この機能を使用してEACを再インストールしてください。",
"@tools_action_info_reinstall_eac": {},
"tools_action_rsi_launcher_admin_mode": "RSI Launcher 管理者モード",
"@tools_action_rsi_launcher_admin_mode": {},
"tools_action_info_run_rsi_as_admin": "RSIランチャーを管理者権限で実行すると、一部の問題が解決する場合があります。\n\n効率コア無視パラメータを設定している場合は、ここでも適用されます。",
"@tools_action_info_run_rsi_as_admin": {},
"tools_action_info_init_failed": "初期化に失敗しました。スクリーンショットを撮って開発者に報告してください。{v0}",
"@tools_action_info_init_failed": {},
"tools_action_rsi_launcher_log_fix": "RSI Launcher ログ修復",
"@tools_action_rsi_launcher_log_fix": {},
"tools_action_info_rsi_launcher_log_issue": "特定の状況でRSIランチャーのログファイルが破損し、問題スキャンが完了できなくなることがあります。このツールを使用して破損したログファイルをクリーンアップしてください。\n\n現在のログファイルサイズ{v0} MB",
"@tools_action_info_rsi_launcher_log_issue": {},
"tools_action_remove_nvme_registry_patch": "nvmeレジストリパッチを削除",
"@tools_action_remove_nvme_registry_patch": {},
"tools_action_info_nvme_patch_issue": "nvmeパッチを使用して問題が発生した場合は、このツールを実行してください。ゲームのインストール/更新が使用できなくなる可能性があります。)\n\n現在のパッチ状態{v0}",
"@tools_action_info_nvme_patch_issue": {},
"tools_action_info_not_installed": "インストールされていません",
"@tools_action_info_not_installed": {},
"tools_action_info_removed_restart_effective": "削除されました、コンピュータを再起動すると有効になります!",
"@tools_action_info_removed_restart_effective": {},
"tools_action_write_nvme_registry_patch": "nvmeレジストリパッチを書き込む",
"@tools_action_write_nvme_registry_patch": {},
"tools_action_info_manual_nvme_patch": "NVMパッチを手動で書き込みます。この機能は、自分が何をしているかを理解している場合にのみ使用してください",
"@tools_action_info_manual_nvme_patch": {},
"tools_action_info_fix_success_restart": "修復が成功しました。コンピュータを再起動してからゲームのインストールを続けてみてくださいレジストリの変更が他のソフトウェアに互換性の問題を引き起こす場合は、ツールの「NVMEレジストリクリーナー」を使用してください。",
"@tools_action_info_fix_success_restart": {},
"tools_action_clear_shader_cache": "シェーダーキャッシュをクリア",
"@tools_action_clear_shader_cache": {},
"tools_action_info_shader_cache_issue": "ゲームの表示に異常が発生した場合や、バージョン更新後に、このツールを使用して古いシェーダーをクリアできます同時にVulkanをDX11に戻します \n\nキャッシュサイズ{v0} MB",
"@tools_action_info_shader_cache_issue": {},
"tools_action_close_photography_mode": "撮影モードを閉じる",
"@tools_action_close_photography_mode": {},
"tools_action_open_photography_mode": "撮影モードを開く",
"@tools_action_open_photography_mode": {},
"tools_action_info_restore_lens_shake": "レンズの揺れ効果を復元します。\n\n@拉邦那 Lapernum 提供のパラメータ情報。",
"@tools_action_info_restore_lens_shake": {},
"tools_action_info_one_key_close_lens_shake": "ゲーム内のレンズの揺れをワンクリックでオフにして、撮影操作を容易にします。\n\n @拉邦那 Lapernum 提供のパラメータ情報。",
"@tools_action_info_one_key_close_lens_shake": {},
"tools_action_info_log_file_parse_failed": "ログファイルの解析に失敗しました!\n「RSI Launcher ログ修復」ツールを使用してみてください!",
"@tools_action_info_log_file_parse_failed": {},
"tools_action_info_rsi_launcher_not_found": "RSIランチャーが見つかりません。再インストールするか、設定で手動で追加してください。",
"@tools_action_info_rsi_launcher_not_found": {},
"tools_action_info_star_citizen_not_found": "Star Citizenゲームのインストール場所が見つかりません。少なくとも1回ゲームを起動するか、設定で手動で追加してください。",
"@tools_action_info_star_citizen_not_found": {},
"tools_action_info_valid_game_directory_needed": "この機能には有効なゲームインストールディレクトリが必要です",
"@tools_action_info_valid_game_directory_needed": {},
"tools_action_info_eac_file_removed": "EACファイルが削除されました。次にRSIランチャーを開きます。SETTINGS -> VERIFYに移動してEACを再インストールしてください。",
"@tools_action_info_eac_file_removed": {},
"tools_action_info_error_occurred": "エラーが発生しました:{v0}",
"@tools_action_info_error_occurred": {},
"tools_action_info_system_info_content": "システム:{v0}\n\nプロセッサ{v1}\n\nメモリサイズ{v2}GB\n\nグラフィックカード情報\n{v3}\n\nハードドライブ情報\n{v4}\n\n",
"@tools_action_info_system_info_content": {},
"tools_action_info_rsi_launcher_directory_not_found": "RSIランチャーディレクトリが見つかりません。手動で操作してください。",
"@tools_action_info_rsi_launcher_directory_not_found": {},
"tools_action_info_log_file_not_exist": "ログファイルが存在しません。ゲームを一度起動またはインストールしてから、ランチャーを終了してください。問題が解決しない場合は、ランチャーを最新バージョンに更新してみてください!",
"@tools_action_info_log_file_not_exist": {},
"tools_action_info_cleanup_complete": "クリーンアップが完了しました。インストールまたはゲーム起動操作を完了してください。",
"@tools_action_info_cleanup_complete": {},
"tools_action_info_cleanup_failed": "クリーンアップに失敗しました。手動で削除してください。ファイルの場所:{v0}",
"tools_action_info_system_info_title": "システム情報",
"@tools_action_info_system_info_title": {},
"tools_action_info_rsi_launcher_running_warning": "RSIランチャーが実行中ですこの機能を使用する前にランチャーを閉じてください",
"@tools_action_info_rsi_launcher_running_warning": {},
"tools_action_info_p4k_file_description": "P4kはStar Citizenのコアゲームファイルで、100GB以上のサイズです。SCToolboxが提供するオフラインダウンロードは、p4kファイルのダウンロードが非常に遅いユーザーをサポートするため、または公式ランチャーで修復できないp4kファイルを修正するためのものです。\n\n次に保存先を選択するダイアログが表示されますStar Citizenフォルダでも他の場所でも選択可能。ダウンロード完了後、P4KファイルがLIVEフォルダ内にあることを確認し、Star Citizenランチャーで検証と更新を行ってください。",
"@tools_action_info_p4k_file_description": {},
"tools_action_info_p4k_download_in_progress": "p4kのダウンロードタスクが既に進行中です。ダウンロードマネージャーで確認してください",
"@tools_action_info_p4k_download_in_progress": {},
"tools_action_info_function_under_maintenance": "機能はメンテナンス中です。後でもう一度お試しください!",
"@tools_action_info_function_under_maintenance": {},
"tools_action_info_config_file_not_exist": "設定ファイルが存在しません。一度ゲームを実行してみてください",
"@tools_action_info_config_file_not_exist": {},
"webview_localization_name_member": "メンバー名",
"@webview_localization_name_member": {},
"webview_localization_total_invitations": "招待総数:",
"@webview_localization_total_invitations": {},
"webview_localization_unfinished_invitations": "未完了の招待",
"@webview_localization_unfinished_invitations": {},
"webview_localization_finished_invitations": "完了した招待",
"@webview_localization_finished_invitations": {},
"app_init_failed_with_reason": "初期化に失敗:{v0}",
"@app_init_failed_with_reason": {},
"settings_app_language": "言語",
"settings_app_language_auto": "自動",
"app_common_network_error": "ネットワーク接続に失敗しました! \nオフラインモードに入ります... \n\nネットワーク接続を確認するか、ソーシャルフォーラムで最新情報を入手してください。アプリ設定で組み込みDNSモードをオンにすることもお試しください。 \n現在のバージョンのビルド日{v0}\n QQグループ940696487 \nエラーメッセージ{v1}",
"app_common_upgrade_info_error": "アップデート情報の取得に失敗しました。後でもう一度お試しください。",
"doctor_game_error_low_memory": "利用可能メモリ不足",
"doctor_game_error_low_memory_info": "仮想メモリを増やしてみてください1080pでは、物理メモリ+仮想メモリが64GBを超える必要があります",
"doctor_game_error_generic_info": "ゲームが最も一般的なクラッシュ問題を引き起こしました。トラブルシューティングガイドを確認してください",
"doctor_game_error_gpu_crash": "グラフィックカードがクラッシュしました!トラブルシューティングガイドを確認してください",
"doctor_game_error_socket_error": "ソケットエラーが検出されました",
"doctor_game_error_socket_error_info": "X黑盒加速器を使用している場合は、加速モードを変更してみてください",
"doctor_game_error_permissions_error": "権限不足",
"doctor_game_error_permissions_error_info": "管理者権限でランチャーを実行するか、SCToolboxMicrosoft Store版を使用して起動してみてください。",
"doctor_game_error_game_process_error": "ゲームプロセスが使用中です",
"doctor_game_error_game_process_error_info": "ランチャーを再起動するか、PCを再起動してみてください",
"doctor_game_error_game_damaged_file": "ゲームプログラムファイルが破損しています",
"doctor_game_error_game_damaged_file_info": "Bin64フォルダを削除してランチャーで検証してみてください。",
"doctor_game_error_game_damaged_p4k_file": "P4Kファイルが破損しています",
"doctor_game_error_game_damaged_p4k_file_info": "Data.p4kファイルを削除してランチャーで検証するか、SCToolboxの配布を使用してみてください。",
"doctor_game_error_low_gpu_memory": "利用可能なグラフィックメモリ不足",
"doctor_game_error_low_gpu_memory_info": "バックグラウンドで他のグラフィック集中型のゲーム/アプリを実行しないようにするか、グラフィックカードをアップグレードしてください。",
"doctor_game_error_gpu_vulkan_crash": "GPU Vulkanクラッシュ",
"doctor_game_error_gpu_vulkan_crash_info": "Vulkanがクラッシュしましたこれはドライバーバージョンまたはゲームエンジンの問題かもしれません。GPUドライバーを更新するか、シェーダークリーニング機能を使用してDX11に戻すことをお試しください",
"app_common_error_info": "エラーが発生しました:{v0}",
"app_common_tip": "ヒント",
"app_common_tip_i_know": "理解しました",
"app_common_tip_confirm": "確認",
"app_common_tip_cancel": "キャンセル",
"settings_app_language_switch_info": "アプリの表示言語を切り替える",
"home_holiday_countdown_days": "{v0}日 ",
"home_holiday_countdown_in_progress": "進行中",
"app_common_loading_images": "画像を読み込み中...",
"app_splash_dialog_u_a_p_p": "ユーザー契約とプライバシーポリシー",
"app_splash_dialog_u_a_p_p_content": "SCToolboxをお選びいただきありがとうございます。私たちは安全で便利、信頼性の高い体験を提供することに努めています。アプリを使用する前に、以下をお読みいただき同意してください\n\n 1. このアプリケーションはGNU General Public License v3.0の下でのオープンソースソフトウェアです。ライセンスに従って自由に使用、変更、配布することができます。ソースコードは[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)にあります。 \n2. このアプリケーション内のインターネットコンテンツローカリゼーションファイル、ツールウェブサイト、ニュース、ビデオなどを含むの著作権はその作者に帰属し、GPLの一部ではありません。対応するライセンス契約を遵守して使用してください。\n3. このアプリケーションの公式無料配布チャンネルは[Microsoft Store](https://apps.microsoft.com/detail/9NF3SWFWNKL1)と[Star Citizen ローカリゼーションチームの公式ウェブサイト](https://www.starcitizenzw.com/)です。他のサードパーティから入手した場合は、財産損失を避けるため慎重に判断してください。\n4. このアプリケーションはソフトウェア品質向上のため、使用中に匿名の統計データを当社サーバーに送信します。個人的なプライバシー情報は収集しません。 \n5. このアプリケーションはコミュニティサポートにより提供され、Cloud Imperium Gamesや他のサードパーティの商業会社とは直接関連していません。\n6. 私たちは限定的なコミュニティサポートを提供しています。必要な場合は、「概要」ページで連絡方法をご確認ください。",
"tools_unp4k_msg_init": "初期化中...",
"tools_unp4k_msg_reading": "P4Kファイルを読み込み中...",
"tools_unp4k_msg_reading2": "ファイルを処理中...",
"tools_unp4k_msg_reading3": "ファイルを処理中({v0}/{v1})...",
"tools_unp4k_msg_read_completed": "読み込み完了:{v0}ファイル、所要時間:{v1} ms",
"tools_unp4k_msg_open_file": "ファイルを開く:{v0}",
"tools_unp4k_msg_read_file": "ファイルを読み込み中:{v0}...",
"home_localization_advanced_title": "高度なローカリゼーション -> {v0}",
"home_localization_advanced_msg_version": "読み込まれたローカリゼーションバージョン:{v0}",
"home_localization_advanced_title_msg": "ローカリゼーションテキスト行数:{v0} P4Kテキスト行数{v1}",
"home_localization_advanced_action_install": "ローカリゼーションをインストール",
"home_localization_advanced_action_mod_change": "テキストを再生成中...",
"home_localization_advanced_action_mode": "モード",
"home_localization_advanced_title_preview": "プレビュー:{v0}",
"home_localization_advanced_json_text_location_other": "場所-その他",
"home_localization_advanced_json_text_location_used": "場所-よく使用",
"home_localization_advanced_json_text_things_other": "アイテム-その他",
"home_localization_advanced_json_text_things_used": "アイテム-よく使用",
"home_localization_advanced_json_text_vehicle_other": "ビークル-その他",
"home_localization_advanced_json_text_vehicle_used": "ビークル-よく使用",
"home_localization_advanced_json_text_mission_or_logs": "ミッション/ログ",
"home_localization_advanced_json_text_subtitle": "字幕",
"home_localization_advanced_json_text_ui_or_hud_or_menu": "UI/HUD/メニュー",
"home_localization_advanced_json_text_un_localization": "未ローカリゼーション",
"home_localization_advanced_json_text_others": "その他",
"home_localization_advanced_action_mod_change_localization": "ローカリゼーション",
"home_localization_advanced_action_mod_change_un_localization": "英語原文",
"home_localization_advanced_action_mod_change_mixed": "バイリンガル",
"home_localization_advanced_action_mod_change_mixed_newline": "バイリンガル(改行)",
"home_localization_advanced_msg_classifying": "分類中...",
"home_localization_advanced_msg_reading_p4k": "p4kファイルを読み込み中...",
"home_localization_advanced_msg_reading_server_localization_text": "ローカリゼーションテキストを取得中...",
"home_localization_advanced_msg_gen_localization_text": "ローカリゼーションファイルを生成中...",
"home_localization_advanced_msg_gen_localization_install": "ローカリゼーションファイルをインストール中...",
"home_localization_msg_version_advanced": " (高度なローカリゼーション)",
"home_localization_msg_no_note": "このバージョンには説明がありません",
"home_localization_action_rsi_launcher_localization": "RSIランチャーローカリゼーション",
"home_localization_action_rsi_launcher_no_game_path_msg": "現在ゲーム本体がインストールされていないか、ゲームインストールディレクトリが選択されていません。ランチャーローカリゼーション機能のみ使用できます。ゲームのインストールが完了しているか、SCToolbox設定でゲームインストールディレクトリを追加した後に再試行してください。",
"home_localization_action_advanced": "高度なローカリゼーション",
"home_localization_action_install_customize": "カスタムファイルをインストール",
"home_localization_title_localization_tools": "ローカリゼーションツール",
"performance_json_text_dof": "被写界深度効果",
"performance_json_text_dof_info": "モビグラスページなどの被写界深度効果を制御",
"performance_json_text_ssdo": "スクリーンスペース光後処理",
"performance_json_text_ssdo_info": "光の後処理レベルを調整",
"performance_json_text_title_graphics": "グラフィック(変更後はシェーダーをクリアすることをお勧めします)",
"performance_json_text_antialiasing": "アンチエイリアス",
"performance_json_text_antialiasing_info": "0 オフ、1 SMAA、2 テンポラルフィルタリング+SMAA、3 テンポラルフィルタリングとプロジェクションマトリックスジッタを使用したSMAA",
"performance_json_text_game_effects": "エフェクトレベル",
"performance_json_text_game_effects_info": "ゲームエフェクトレベル",
"performance_json_text_texture": "テクスチャレベル",
"performance_json_text_texture_info": "モデルテクスチャの詳細",
"performance_json_text_volumetric_effects": "ボリューメトリック効果",
"performance_json_text_volumetric_effects_info": "ボリューメトリッククラウド、ボリューメトリック照明など",
"performance_json_text_water": "水の効果",
"performance_json_text_water_info": "様々な水のレベル",
"performance_json_text_object_detail": "オブジェクト詳細",
"performance_json_text_object_detail_info": "モデルオブジェクトの詳細、LODに影響など...",
"performance_json_text_particles": "パーティクル詳細",
"performance_json_text_physics": "物理詳細",
"performance_json_text_physics_info": "物理効果範囲",
"performance_json_text_shading": "シェーディング詳細",
"performance_json_text_shading_info": "シェーダー関連",
"performance_json_text_shadows": "影の詳細",
"performance_json_text_shadows_info": "影の効果",
"performance_json_text_postprocessing": "後処理詳細",
"performance_json_text_postprocessing_info": "後処理シェーダー、モーションブラー効果など",
"performance_json_text_renderer": "レンダラー品質",
"performance_json_text_renderer_info": "cryengineレンダラー品質",
"performance_json_text_shader_decal": "デカール品質",
"performance_json_text_shader_decal_info": "(ロゴ、マークなど)",
"performance_json_text_shader_post_process": "シェーダー品質",
"performance_json_text_shader_fx": "FX品質",
"performance_json_text_shader_general": "一般的な品質",
"performance_json_text_shader_general_info": "全体的なモデル品質",
"performance_json_text_shader_glass": "ガラス品質",
"performance_json_text_shader_glass_info": "窓、鏡など",
"performance_json_text_shader_hdr": "HDR品質",
"performance_json_text_shader_hdr_info": "HDRカラーアベレーション、輝度レベル処理など",
"performance_json_text_shader_particle": "パーティクル品質",
"performance_json_text_shader_particle_info": "パーティクル効果の品質",
"performance_json_text_shader_terrain": "地形品質",
"performance_json_text_shader_shadow": "影品質",
"performance_json_text_shader_sky": "空品質",
"performance_json_text_particles_object_collisions": "パーティクル衝突",
"performance_json_text_particles_object_collisions_info": "1 静的パーティクルのみ 2 動的パーティクルを含む",
"performance_json_text_displayinfo": "画面情報(フレームレート表示)",
"performance_json_text_displayinfo_info": "画面右上にフレームレート、サーバー情報などを表示",
"performance_json_text_max_fps": "最大フレームレート",
"performance_json_text_max_fps_info": "ゲームの最大フレームレートを調整、0は制限なし",
"performance_json_text_display_session": "セッション情報を表示",
"performance_json_text_display_session_info": "有効にするとQRコードが画面に表示され、フィードバック時にCIGが関連情報をすばやく特定できるようになります",
"performance_json_text_vsync": "垂直同期",
"performance_json_text_vsync_info": "画面の裂けを防ぐためにオン、フレームレートを上げるためにオフ",
"performance_json_text_motion_blur": "モーションブラー",
"performance_json_text_motion_blur_info": "動きの感覚を高めるためにオン、視覚的体験を向上させるためにオフ",
"performance_json_text_fov": "視野角FOVを設定",
"performance_json_text_ui_animation": "UIフェードインアウトアニメーション",
"performance_json_text_custom_parameters": "カスタムパラメータ",
"performance_json_text_title_custom": "カスタム",
"tools_rsi_launcher_enhance_init_msg1": "ランチャー情報を読み込み中...",
"tools_rsi_launcher_enhance_init_msg2": "ネットワークから機能強化データを取得中...",
"tools_rsi_launcher_enhance_working_msg1": "パッチを生成中...",
"tools_rsi_launcher_enhance_working_msg2": "パッチをインストール中、これはコンピュータのパフォーマンスによって時間がかかります...",
"tools_rsi_launcher_enhance_title": "RSIランチャー機能強化",
"tools_rsi_launcher_enhance_msg_version": "ランチャー内部バージョン情報:{v0}",
"tools_rsi_launcher_enhance_msg_patch_status": "パッチ状態:{v0}",
"tools_rsi_launcher_enhance_msg_error": "機能強化データの取得に失敗しました。ネットワークの問題または現在のバージョンがサポートされていない可能性があります",
"tools_rsi_launcher_enhance_title_localization": "RSIランチャーローカリゼーション",
"tools_rsi_launcher_enhance_subtitle_localization": "RSIランチャーに多言語サポートを追加します。",
"tools_rsi_launcher_enhance_title_download_booster": "RSIランチャーダウンロード機能強化",
"tools_rsi_launcher_enhance_subtitle_download_booster": "ゲームのダウンロード時に、より多くのスレッドを使用してダウンロード速度を向上させることができます。有効にした後、ランチャー設定でスレッド数を変更してください。",
"tools_rsi_launcher_enhance_action_install": "機能強化パッチをインストール",
"tools_rsi_launcher_enhance_msg_uninstall": "* 機能強化パッチをアンインストールするには、RSIランチャーを上書きインストールしてください。",
"tools_rsi_launcher_enhance_msg_error_launcher_notfound": "RSIランチャーが見つかりません",
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error": "ランチャー情報の読み込みに失敗しました!",
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args": "ランチャー情報の読み込みに失敗:{v0}",
"tools_action_rsi_launcher_enhance_info": "ランチャーローカリゼーション、ダウンロードスレッド強化",
"tools_rsi_launcher_enhance_note_title": "RSIランチャー機能強化の使用上の注意",
"tools_rsi_launcher_enhance_note_msg": "RSIランチャー機能強化はコミュニティ機能で、お使いのコンピューターで「RSI Launcher」を解凍し、追加の機能強化を加えます。どの機能を使用するかはあなた次第です。\n\n現在、公式CIGは多言語操作のみを許可していますが、ランチャーダウンロード機能強化は私たちが有用だと考える追加機能です。cigユーザー契約https://robertsspaceindustries.com/eulaに違反すると、アカウント禁止などの深刻な結果を招く可能性があり、使用するかどうかはあなた自身の判断によります。私たちは発生する可能性のある結果ゲームの損傷、アカウント禁止などに対して責任を負いません。\n\nランチャーの変更内容については、https://github.com/StarCitizenToolBox/RSILauncherEnhanceでオープンソースとして公開しています。必要に応じて確認できます。\n\n何らかの理由でこの機能強化パッチをキャンセルする必要がある場合は、公式ランチャーを直接上書きインストールしてください。",
"tools_action_unp4k": "P4Kビューア",
"tools_action_unp4k_info": "Star Citizen p4kファイルを解凍",
"tools_unp4k_title": "P4Kビューア -> {v0}",
"tools_unp4k_view_file": "プレビューするファイルをクリック",
"tools_unp4k_msg_unknown_file_type": "不明なファイルタイプ\n{v0}",
"home_localization_select_customize_file_ini": "iniファイルを選択してください",
"home_localization_select_customize_file": "カスタムローカリゼーションファイルを選択してください",
"home_localization_action_select_customize_file": "iniファイルを選択するにはクリック",
"home_localization_ptu_advanced_localization_tip_title": "高度なローカリゼーションの使用をお勧めします",
"home_localization_ptu_advanced_localization_tip_title_info": "PTU/EPTUなどのテストチャンネルでは、現在のローカリゼーションテキストがゲームと同期していない可能性があります。高度なローカリゼーションを使用することで文字化けの発生を減らすことができます。",
"tools_rsi_launcher_enhance_action_fold": "追加機能を折りたたむ",
"tools_rsi_launcher_enhance_action_expand": "追加機能を展開",
"tools_unp4k_missing_runtime": "ランタイムがありません",
"tools_unp4k_missing_runtime_info": "この機能を使用するには.NET8ランタイムをインストールする必要があります。下のボタンをクリックしてダウンロードしてインストールし、インストールが成功したらこのページを再度開いて使用を続行してください。",
"tools_unp4k_missing_runtime_action_install": "ランタイムをインストール",
"settings_title_general": "一般",
"settings_item_dns": "組み込みDNSを使用",
"settings_item_dns_info": "有効にすると、一部の地域でのDNS汚染問題を解決する可能性があります",
"settings_title_game": "ゲーム",
"about_action_btn_faq": "よくある質問",
"guide_title_welcome": "ようこそ",
"guide_info_check_settings": "以下の設定が正しいことを確認してください。間違いがある場合は、右側のアイコンをクリックして修正してから続行してください",
"guide_info_game_download_note": "* ゲームをダウンロード中の場合は、ダウンロードが完了した後にゲームを一度起動し、更新ボタンをクリックしてください。ランチャー機能強化ローカリゼーションのみを使用する場合は、ランチャーパスが正しいことを確認して設定完了をクリックしてください",
"guide_action_get_help": "ヘルプを取得",
"guide_action_complete_setup": "設定を完了",
"guide_dialog_confirm_complete_setup": "設定を完了しますか?",
"guide_action_info_no_launcher_path_warning": "ランチャーのインストールパスを選択していません。設定を完了しますか?\n\nガイドページを閉じた後、設定ページで手動操作する必要があります。",
"guide_action_info_no_game_path_warning": "ゲームのインストールパスを選択していません。設定を完了しますか?\n\nガイドページを閉じた後、設定ページで手動操作する必要があります。",
"setting_toast_select_launcher_exe": "ランチャーのexeファイルを選択「RSI Launcher.exe」",
"setting_toast_select_game_file": "対応するゲームファイルを選択: Bin64/StarCitizen.exe",
"input_method_feature_maintenance": "機能はメンテナンス中です、後でもう一度お試しください",
"input_method_community_input_method_not_installed": "コミュニティ入力メソッドサポートがインストールされていません",
"input_method_install_community_input_method_prompt": "ローカリゼーション管理に行ってインストールしますか?\n\nすでにローカリゼーションをインストールしている場合は、アンインストールして再インストール時にコミュニティ入力メソッドサポートスイッチをオンにしてください。",
"input_method_usage_instructions": "使用方法",
"input_method_input_text_instructions": "上のテキストボックスにテキストを入力し、下のエンコードされたテキストをゲームのテキストボックスに貼り付けCtrl+Vて、チャットチャンネルでゲームがサポートしていない文字を送信できます。",
"input_method_input_placeholder": "テキストを入力してください...",
"input_method_encoded_text_placeholder": "ここにエンコードされたテキストが表示されます...",
"input_method_remote_input_service": "リモート入力サービス:",
"input_method_disclaimer": "*この機能は非公開チャンネルでのみ使用することをお勧めします。ユーザーがこの機能を公開チャンネルで使用することを選択した場合、それによって生じる結果(他のプレイヤーによるスパム報告など)はすべてユーザー自身の責任となります。\n*この機能が乱用された場合、機能を無効にする場合があります。",
"input_method_experimental_input_method": "コミュニティ入力メソッド(実験的)",
"input_method_auto_copy": "自動コピー",
"input_method_confirm_enable_remote_input": "リモート入力を有効にしますか?",
"input_method_enable_remote_input_instructions": "この機能を有効にすると、スマートフォンからリモートサービスアドレスにアクセスして、ウィンドウの切り替えなしにテキストをすばやく入力でき、ゲームの流れが中断されません。\n\nファイアウォールの通知が表示された場合は、ポップアップを展開し、すべてのネットワークタイプを手動でチェックして許可してください。そうしないと、この機能に正常にアクセスできない場合があります。",
"input_method_address_fetch_failed": "アドレスの取得に失敗しました。PCのIPを手動で確認してください",
"input_method_text_cannot_be_empty": "テキストを空にすることはできません!",
"input_method_send_success": "送信成功!",
"input_method_ip_address_not_found": "サービスにアクセスするための適切なIPアドレスが見つかりませんでした。次のアドレスをお試しください左右に切り替え",
"input_method_scan_qr_code": "モバイルデバイスで次のQRコードをスキャンするか、接続に手動でアクセスしてください",
"input_method_service_qr_code": "サービスQRコード",
"input_method_confirm_install_advanced_localization": "高度なローカリゼーションをインストールしますか?",
"input_method_install_community_input_method_support": "コミュニティ入力メソッドサポートをインストール",
"input_method_community_input_method_support_version": "コミュニティ入力メソッドサポート:{v0}",
"input_method_online_version_prompt": "この機能のオンラインスタンドアロン版も提供されています。アクセスするにはクリック >",
"input_method_support_updated": "コミュニティ入力メソッドサポートが更新されました",
"input_method_support_updated_to_version": "コミュニティ入力メソッドサポートが更新されました:{v0}",
"input_method_auto_translate": "バイリンガル翻訳:",
"input_method_auto_translate_dialog_title": "バイリンガル翻訳を有効にしますか?",
"input_method_auto_translate_dialog_title_content": "有効にすると、Google翻訳サービスを使用して入力内容に英語の副本を追加します。応答が遅延する可能性があります。機能に異常がある場合は無効にしてください。\n\nテキストはGoogleサーバーに転送されます。Googleのプライバシーポリシーを参照してください。",
"support_dev_thanks_message": "SCToolboxをご利用いただきありがとうございます。私は開発者のxkeyCです。\nSCToolboxはオープンソースにコミットし、プレイヤーに無料のサービスを提供することに努めています。無償のサービスは挑戦的な作業です。飲み物代を贈っていただければ大変感謝します。\n寄付された資金はサーバー費用、新機能の開発、そしてソフトウェアメンテナンスのモチベーション向上に使われます。",
"support_dev_referral_code_message": "まだゲームに登録していないか招待コードを入力していない場合は、私のコードを検討してくださいSTAR-3YXS-SWTC、ここまで読んでいただきありがとうございます",
"support_dev_title": "開発者をサポート",
"support_dev_github_star_message": "GitHubで私のプロジェクトにスターを付けることもできます",
"support_dev_github_star_button": "プロジェクトにスター",
"support_dev_in_game_currency_title": "ゲーム内通貨",
"support_dev_in_game_id": "ゲームID: xkeyC",
"support_dev_in_game_id_copied": "ゲームIDがコピーされました",
"support_dev_copy_button": "コピー",
"support_dev_in_game_currency_message": "ゲーム内でaUECを送信してサポートすることができます。これは限られた時間の中で私がより良いゲーム体験を得るのに役立ちます",
"support_dev_alipay": "Alipay",
"support_dev_wechat": "WeChat",
"support_dev_donation_disclaimer": "* 注意:寄付は無償の贈与であり、ソフトウェア体験において追加の特典を得ることはありません。",
"support_dev_back_button": "戻る",
"support_dev_scroll_hint": "下にスクロールしてさらに表示",
"log_analyzer_filter_all": "すべて",
"log_analyzer_filter_basic_info": "基本情報",
"log_analyzer_filter_account_related": "アカウント関連",
"log_analyzer_filter_fatal_collision": "致命的な衝突",
"log_analyzer_filter_vehicle_damaged": "ビークル損傷",
"log_analyzer_filter_character_death": "キャラクター死亡",
"log_analyzer_filter_statistics": "統計情報",
"log_analyzer_filter_game_crash": "ゲームクラッシュ",
"log_analyzer_filter_local_inventory": "ローカルインベントリ",
"log_analyzer_no_log_file": "logファイルが見つかりません",
"log_analyzer_one_click_diagnosis_header": "----- SCToolbox ワンクリック診断 -----",
"log_analyzer_details_info": "詳細情報:{v0}",
"log_analyzer_no_crash_detected": "ゲームクラッシュ情報は検出されませんでした",
"log_analyzer_game_crash": "ゲームクラッシュ ",
"log_analyzer_kill_summary": "キル概要",
"log_analyzer_kill_death_suicide_count": "キル数:{v0} デス数:{v1} 自殺回数:{v2} \n機体破壊ソフトデス{v3} 機体破壊(解体):{v4}",
"log_analyzer_play_time": "プレイ時間",
"log_analyzer_play_time_format": "{v0}時間{v1}分{v2}秒",
"log_analyzer_game_start": "ゲーム起動",
"log_analyzer_game_loading": "ゲーム読み込み",
"log_analyzer_mode_loading_time": "モード:{v0} 所要時間:{v1}秒",
"log_analyzer_game_close": "ゲーム終了",
"log_analyzer_collision_details": "エリア:{v0} プレイヤー操縦:{v1} 衝突エンティティ:{v2} \n衝突ビークル{v3} 衝突距離:{v4} ",
"log_analyzer_soft_death": "ソフト死亡",
"log_analyzer_disintegration": "崩壊",
"log_analyzer_vehicle_damage_details": "ビークルモデル:{v0} \nエリア{v1} \n損傷レベル{v2} {v3} 責任者:{v4}",
"log_analyzer_death_details": "被害者ID{v0} 死因:{v1} \n殺害者ID{v2} \nエリア{v3}",
"log_analyzer_player_login": "プレイヤー {v0} ログイン中...",
"log_analyzer_view_local_inventory": "ローカルインベントリを表示",
"log_analyzer_player_location": "プレイヤーID{v0} 位置:{v1}",
"log_analyzer_game_installation_path": "ゲームインストールパス",
"log_analyzer_select_game_path": "ゲームインストールパスを選択してください",
"log_analyzer_search_placeholder": "キーワードを入力して内容を検索",
"log_analyzer_title": "logアナライザ",
"log_analyzer_description": "プレイ記録を分析(ログイン、死亡、キルなどの情報)",
"log_analyzer_window_title": "SCToolbox: logアナライザ"
}

897
lib/l10n/intl_ru.arb Normal file
View File

@ -0,0 +1,897 @@
{
"@@locale": "ru",
"@@auto_translate_locale": "ru",
"app_language_name": "Русский",
"@app_language_name": {},
"app_language_code": "ru",
"app_index_version_info": "SCToolbox V{v0} {v1}",
"@app_index_version_info": {},
"app_shortcut_name": "SCToolboxDEV.lnk",
"@app_shortcut_name": {},
"about_check_update": "Проверить обновления",
"@about_check_update": {},
"about_app_description": "Не только локализация!\n\nSCToolbox — ваш надёжный помощник в исследовании вселенной. Мы стремимся решать распространённые проблемы игры и предоставлять удобные инструменты для локализации сообщества, оптимизации производительности, перевода популярных сайтов и многого другого.",
"@about_app_description": {},
"about_online_feedback": "Обратная связь онлайн",
"@about_online_feedback": {},
"about_action_qq_group": "QQ группа: 940696487",
"@about_action_qq_group": {},
"about_action_email": "Почта: xkeyc@qq.com",
"@about_action_email": {},
"about_action_open_source": "Открытый исходный код",
"@about_action_open_source": {},
"about_disclaimer": "Это неофициальный инструмент для Star Citizen, не связанный с группой компаний Cloud Imperium. Весь контент, не созданный хостом или пользователями этого приложения, является собственностью их соответствующих владельцев.\nStar Citizen®, Roberts Space Industries® и Cloud Imperium® являются зарегистрированными товарными знаками Cloud Imperium Rights LLC.",
"@about_disclaimer": {},
"about_analytics_launch": "Запуск",
"@about_analytics_launch": {},
"about_analytics_launch_game": "Запуск игры",
"@about_analytics_launch_game": {},
"about_analytics_total_users": "Всего пользователей",
"@about_analytics_total_users": {},
"about_analytics_install_translation": "Установка локализации",
"@about_analytics_install_translation": {},
"about_analytics_performance_optimization": "Оптимизация производительности",
"@about_analytics_performance_optimization": {},
"about_analytics_p4k_redirection": "P4K перенаправление",
"@about_analytics_p4k_redirection": {},
"about_analytics_units_user": "чел.",
"@about_analytics_units_user": {},
"about_analytics_units_times": "раз",
"@about_analytics_units_times": {},
"about_info_latest_version": "У вас уже установлена последняя версия!",
"@about_info_latest_version": {},
"home_holiday_countdown": "Обратный отсчет до праздников",
"@home_holiday_countdown": {},
"home_holiday_countdown_disclaimer": "* Даты праздников собираются и поддерживаются вручную и могут содержать ошибки. Обратная связь приветствуется!",
"@home_holiday_countdown_disclaimer": {},
"home_action_one_click_launch": "Запуск в один клик",
"@home_action_one_click_launch": {},
"home_title_logging_in": "Вход в систему...",
"@home_title_logging_in": {},
"home_login_title_welcome_back": "С возвращением!",
"@home_login_title_welcome_back": {},
"home_login_title_launching_game": "Запускаем игру...",
"@home_login_title_launching_game": {},
"home_action_login_rsi_account": "Войти в аккаунт RSI",
"@home_action_login_rsi_account": {},
"home_login_info_game_version_outdated": "Версия игры устарела",
"@home_login_info_game_version_outdated": {},
"home_login_info_rsi_server_report": "Сервер RSI сообщает версию: {v1}\n\nЛокальная версия: {v2}\n\nРекомендуется обновить игру через RSI Launcher!",
"@home_login_info_rsi_server_report": {},
"home_login_info_action_ignore": "Игнорировать",
"@home_login_info_action_ignore": {},
"home_login_action_title_box_one_click_launch": "Запуск в один клик",
"@home_login_action_title_box_one_click_launch": {},
"home_login_info_one_click_launch_description": "Эта функция помогает вам удобнее запускать игру.\n\nДля обеспечения безопасности аккаунта эта функция использует локализованный браузер для сохранения состояния входа, и не сохраняет информацию о вашем пароле (если вы не включили функцию автозаполнения).\n\nПри использовании этой функции для входа в аккаунт убедитесь, что вы скачали SCToolbox из надежного источника.",
"@home_login_info_one_click_launch_description": {},
"home_login_action_title_need_webview2_runtime": "Требуется установить WebView2 Runtime",
"@home_login_action_title_need_webview2_runtime": {},
"action_close": "Закрыть",
"@action_close": {},
"downloader_speed_limit_settings": "Настройки ограничения скорости",
"@downloader_speed_limit_settings": {},
"downloader_action_pause_all": "Приостановить все",
"@downloader_action_pause_all": {},
"downloader_action_resume_all": "Возобновить все",
"@downloader_action_resume_all": {},
"downloader_action_cancel_all": "Отменить все",
"@downloader_action_cancel_all": {},
"downloader_info_no_download_tasks": "Нет задач загрузки",
"@downloader_info_no_download_tasks": {},
"downloader_info_total_size": "Общий размер: {v1}",
"@downloader_info_total_size": {},
"downloader_info_verifying": "Проверка... ({v2})",
"@downloader_info_verifying": {},
"downloader_info_downloading": "Загрузка... ({v0}%)",
"@downloader_info_downloading": {},
"downloader_info_status": "Статус: {v0}",
"@downloader_info_status": {},
"downloader_info_uploaded": "Отдано: {v0}",
"@downloader_info_uploaded": {},
"downloader_info_downloaded": "Загружено: {v0}",
"@downloader_info_downloaded": {},
"downloader_action_options": "Опции",
"@downloader_action_options": {},
"downloader_action_continue_download": "Продолжить загрузку",
"@downloader_action_continue_download": {},
"downloader_action_pause_download": "Приостановить загрузку",
"@downloader_action_pause_download": {},
"downloader_action_cancel_download": "Отменить загрузку",
"@downloader_action_cancel_download": {},
"action_open_folder": "Открыть папку",
"@action_open_folder": {},
"downloader_info_download_upload_speed": "Загрузка: {v0}/с Отдача: {v1}/с",
"@downloader_info_download_upload_speed": {},
"downloader_info_downloading_status": "Загрузка...",
"@downloader_info_downloading_status": {},
"downloader_info_waiting": "Ожидание",
"@downloader_info_waiting": {},
"downloader_info_paused": "Приостановлено",
"@downloader_info_paused": {},
"downloader_info_download_failed": "Ошибка загрузки",
"@downloader_info_download_failed": {},
"downloader_info_download_completed": "Загрузка завершена",
"@downloader_info_download_completed": {},
"downloader_info_deleted": "Удалено",
"@downloader_info_deleted": {},
"downloader_title_downloading": "Загрузка",
"@downloader_title_downloading": {},
"downloader_title_ended": "Завершено",
"@downloader_title_ended": {},
"downloader_action_confirm_cancel_all_tasks": "Подтвердите отмену всех задач?",
"@downloader_action_confirm_cancel_all_tasks": {},
"downloader_info_manual_file_deletion_note": "Если файл больше не нужен, возможно, вам потребуется удалить загруженный файл вручную.",
"@downloader_info_manual_file_deletion_note": {},
"downloader_action_confirm_cancel_download": "Подтвердите отмену загрузки?",
"@downloader_action_confirm_cancel_download": {},
"downloader_info_p2p_network_note": "SCToolbox использует p2p сеть для ускорения загрузки файлов. Если у вас ограниченный трафик, вы можете установить ограничение скорости отдачи до 1 байта.",
"@downloader_info_p2p_network_note": {},
"downloader_info_download_unit_input_prompt": "Пожалуйста, введите единицу скорости загрузки, например: 1, 100k, 10m. Оставьте поле пустым или введите 0 для снятия ограничения.",
"@downloader_info_download_unit_input_prompt": {},
"downloader_input_upload_speed_limit": "Ограничение отдачи:",
"@downloader_input_upload_speed_limit": {},
"downloader_input_download_speed_limit": "Ограничение загрузки:",
"@downloader_input_download_speed_limit": {},
"downloader_input_info_p2p_upload_note": "* P2P отдача происходит только во время загрузки файла и отключается после завершения. Если вы хотите участвовать в раздаче, пожалуйста, свяжитесь с нами через страницу 'О программе'.",
"@downloader_input_info_p2p_upload_note": {},
"doctor_title_one_click_diagnosis": "Быстрая диагностика -> {v0}",
"@doctor_title_one_click_diagnosis": {},
"doctor_action_rsi_launcher_log": "Лог RSI Launcher",
"@doctor_action_rsi_launcher_log": {},
"doctor_action_game_run_log": "Лог запуска игры",
"@doctor_action_game_run_log": {},
"doctor_info_scan_complete_no_issues": "Сканирование завершено, проблем не обнаружено!",
"@doctor_info_scan_complete_no_issues": {},
"doctor_info_processing": "Обработка...",
"@doctor_info_processing": {},
"doctor_info_game_rescue_service_note": "Вы собираетесь перейти к сервису спасения игры, предоставляемому Центром глубокого космического лечения (QQ группа: 536454632), который в основном решает проблемы с неудачной установкой и частыми вылетами. Не присоединяйтесь к группе для вопросов по игровому процессу.",
"@doctor_info_game_rescue_service_note": {},
"doctor_info_need_help": "Нужна помощь? Нажмите, чтобы присоединиться к группе для бесплатной поддержки!",
"@doctor_info_need_help": {},
"doctor_info_tool_check_result_note": "Примечание: Результаты проверки этим инструментом предоставляются только для справки. Если вы не понимаете следующие операции, пожалуйста, предоставьте снимок экрана опытным игрокам!",
"@doctor_info_tool_check_result_note": {},
"doctor_info_result_unsupported_os": "Неподдерживаемая операционная система, игра может не запуститься",
"@doctor_info_result_unsupported_os": {},
"doctor_info_result_upgrade_system": "Пожалуйста, обновите вашу систему ({v0})",
"@doctor_info_result_upgrade_system": {},
"doctor_info_result_missing_live_folder": "В директории установки отсутствует папка LIVE, что может привести к сбою установки",
"@doctor_info_result_missing_live_folder": {},
"doctor_info_result_create_live_folder": "Нажмите исправить, чтобы создать папку LIVE, затем повторите попытку установки. ({v0})",
"@doctor_info_result_create_live_folder": {},
"doctor_info_result_incompatible_nvme_device": "Новое устройство NVME, временно несовместимое с RSI Launcher, может привести к сбою установки",
"@doctor_info_result_incompatible_nvme_device": {},
"doctor_info_result_add_registry_value": "Добавление значения ForcedPhysicalSectorSizeInBytes в реестр для эмуляции старого устройства. Раздел диска ({v0})",
"@doctor_info_result_add_registry_value": {},
"doctor_info_result_missing_easyanticheat_files": "Отсутствуют файлы EasyAntiCheat",
"@doctor_info_result_missing_easyanticheat_files": {},
"doctor_info_result_verify_files_with_rsi_launcher": "Файлы EasyAntiCheat не найдены в папке LIVE или файлы неполные. Пожалуйста, используйте RSI Launcher для проверки файлов",
"@doctor_info_result_verify_files_with_rsi_launcher": {},
"doctor_info_result_easyanticheat_not_installed": "EasyAntiCheat не установлен или некорректно завершен",
"@doctor_info_result_easyanticheat_not_installed": {},
"doctor_info_result_install_easyanticheat": "EasyAntiCheat не установлен, нажмите исправить для автоматической установки. (Эта проблема будет появляться до нормального запуска и завершения игры. Если игра вылетает по другим причинам, вы можете игнорировать этот пункт.)",
"@doctor_info_result_install_easyanticheat": {},
"doctor_info_result_chinese_username": "Имя пользователя на китайском!",
"@doctor_info_result_chinese_username": {},
"doctor_info_result_chinese_username_error": "Имя пользователя на китайском может вызвать ошибки запуска/установки игры! Нажмите кнопку исправить, чтобы увидеть руководство по изменению!",
"@doctor_info_result_chinese_username_error": {},
"doctor_info_result_chinese_install_path": "Путь установки на китайском!",
"@doctor_info_result_chinese_install_path": {},
"doctor_info_result_chinese_install_path_error": "Путь установки на китайском! Это может вызвать ошибки запуска/установки игры! ({v0}), пожалуйста, измените путь установки в RSI Launcher.",
"@doctor_info_result_chinese_install_path_error": {},
"doctor_info_result_low_physical_memory": "Недостаточно физической памяти",
"@doctor_info_result_low_physical_memory": {},
"doctor_info_result_memory_requirement": "Вам нужно как минимум 16 ГБ физической памяти (RAM) для запуска этой игры. (Текущий размер: {v0})",
"@doctor_info_result_memory_requirement": {},
"doctor_info_result_fix_suggestion": "Предложение по исправлению: {v0}",
"@doctor_info_result_fix_suggestion": {},
"doctor_info_result_no_solution": "Решение пока отсутствует, пожалуйста, сделайте снимок экрана и обратитесь за помощью",
"@doctor_info_result_no_solution": {},
"doctor_info_action_fix": "Исправить",
"@doctor_info_action_fix": {},
"doctor_action_view_solution": "Посмотреть решение",
"@doctor_action_view_solution": {},
"doctor_tip_title_select_game_directory": "Пожалуйста, выберите директорию установки игры на главной странице.",
"@doctor_tip_title_select_game_directory": {},
"doctor_action_result_try_latest_windows": "Если ваше оборудование соответствует требованиям, попробуйте установить последнюю версию Windows.",
"@doctor_action_result_try_latest_windows": {},
"doctor_action_result_create_folder_success": "Папка успешно создана, пожалуйста, попробуйте продолжить загрузку игры!",
"@doctor_action_result_create_folder_success": {},
"doctor_action_result_create_folder_fail": "Не удалось создать папку, попробуйте создать её вручную.\nПуть: {v0}\nОшибка: {v1}",
"@doctor_action_result_create_folder_fail": {},
"doctor_action_result_fix_success": "Исправление выполнено успешно, пожалуйста, попробуйте перезагрузить компьютер и продолжить установку игры! Если изменение реестра вызвало проблемы совместимости с другими программами, используйте очистку реестра NVME в разделе Инструменты.",
"@doctor_action_result_fix_success": {},
"doctor_action_result_fix_fail": "Исправление не удалось, {v0}",
"@doctor_action_result_fix_fail": {},
"doctor_action_result_game_start_success": "Исправлено успешно, попробуйте запустить игру. (Если проблема не устраняется, используйте 'Переустановить EAC' в наборе инструментов.)",
"@doctor_action_result_game_start_success": {},
"doctor_action_result_redirect_warning": "Сейчас произойдет перенаправление, руководство взято из Интернета, действуйте с осторожностью...",
"@doctor_action_result_redirect_warning": {},
"doctor_action_result_issue_not_supported": "Эта проблема в настоящее время не поддерживает автоматическое исправление, пожалуйста, предоставьте снимок экрана для получения помощи",
"@doctor_action_result_issue_not_supported": {},
"doctor_action_analyzing": "Анализ...",
"@doctor_action_analyzing": {},
"doctor_action_result_analysis_no_issue": "Анализ завершен, проблем не обнаружено",
"@doctor_action_result_analysis_no_issue": {},
"doctor_action_result_analysis_issues_found": "Анализ завершен, обнаружено {v0} проблем",
"@doctor_action_result_analysis_issues_found": {},
"doctor_action_result_toast_scan_no_issue": "Сканирование завершено, проблем не обнаружено. Если установка по-прежнему не удается, попробуйте использовать режим администратора для RSI Launcher в разделе инструментов.",
"@doctor_action_result_toast_scan_no_issue": {},
"doctor_action_tip_checking_game_log": "Проверка: Game.log",
"@doctor_action_tip_checking_game_log": {},
"doctor_action_info_game_abnormal_exit": "Аварийное завершение игры: {v0}",
"@doctor_action_info_game_abnormal_exit": {},
"doctor_action_info_game_abnormal_exit_unknown": "Аварийное завершение игры: неизвестная ошибка",
"@doctor_action_info_game_abnormal_exit_unknown": {},
"doctor_action_info_info_feedback": "инфо:{v0}, пожалуйста, нажмите в правом нижнем углу, чтобы присоединиться к группе для обратной связи.",
"@doctor_action_info_info_feedback": {},
"doctor_action_info_checking_eac": "Проверка: EAC",
"@doctor_action_info_checking_eac": {},
"doctor_action_info_checking_runtime": "Проверка: среды выполнения",
"@doctor_action_info_checking_runtime": {},
"doctor_action_result_info_unsupported_os": "Неподдерживаемая операционная система: {v0}",
"@doctor_action_result_info_unsupported_os": {},
"doctor_action_info_checking_install_info": "Проверка: информации об установке",
"@doctor_action_info_checking_install_info": {},
"doctor_action_view_details": "Подробнее",
"@doctor_action_view_details": {},
"home_install_location": "Место установки:",
"@home_install_location": {},
"home_not_installed_or_failed": "Не установлено или установка не удалась",
"@home_not_installed_or_failed": {},
"home_action_star_citizen_website_localization": "Локализация сайта Star Citizen",
"@home_action_star_citizen_website_localization": {},
"home_action_info_roberts_space_industries_origin": "Roberts Space Industries, начало всего",
"@home_action_info_roberts_space_industries_origin": {},
"home_action_uex_localization": "Локализация UEX",
"@home_action_uex_localization": {},
"home_action_info_mining_refining_trade_calculator": "Калькулятор добычи, очистки, торговли, цены, информация о кораблях",
"@home_action_info_mining_refining_trade_calculator": {},
"home_action_dps_calculator_localization": "Локализация DPS калькулятора",
"@home_action_dps_calculator_localization": {},
"home_action_info_ship_upgrade_damage_value_query": "Онлайн-модификация кораблей, запрос значений урона и мест покупки компонентов",
"@home_action_info_ship_upgrade_damage_value_query": {},
"home_action_external_browser_extension": "Расширение внешнего браузера:",
"@home_action_external_browser_extension": {},
"home_action_one_click_diagnosis": "Быстрая диагностика",
"@home_action_one_click_diagnosis": {},
"home_action_info_one_click_diagnosis_star_citizen": "Быстрая диагностика распространенных проблем Star Citizen",
"@home_action_info_one_click_diagnosis_star_citizen": {},
"home_action_localization_management": "Управление локализацией",
"@home_action_localization_management": {},
"home_action_info_quick_install_localization_resources": "Быстрая установка ресурсов локализации",
"@home_action_info_quick_install_localization_resources": {},
"home_action_performance_optimization": "Оптимизация производительности",
"@home_action_performance_optimization": {},
"home_action_info_engine_config_optimization": "Настройка конфигурационных файлов движка для оптимизации производительности",
"@home_action_info_engine_config_optimization": {},
"home_action_rsi_status_platform": "Платформа",
"@home_action_rsi_status_platform": {},
"home_action_rsi_status_persistent_universe": "Постоянная вселенная",
"@home_action_rsi_status_persistent_universe": {},
"home_action_rsi_status_electronic_access": "Электронный доступ",
"@home_action_rsi_status_electronic_access": {},
"home_action_rsi_status_arena_commander": "Arena Commander",
"@home_action_rsi_status_arena_commander": {},
"home_action_rsi_status_rsi_server_status": "Статус сервера RSI",
"@home_action_rsi_status_rsi_server_status": {},
"home_action_rsi_status_status": "Статус:",
"@home_action_rsi_status_status": {},
"home_announcement_details": "Подробности объявления",
"@home_announcement_details": {},
"home_action_info_valid_install_location_required": "Для этой функции требуется действительное место установки\n\nЕсли игра еще не загружена полностью, дождитесь завершения загрузки, прежде чем использовать эту функцию.\n\nЕсли загрузка игры завершена, но она не распознается, запустите игру один раз и снова откройте SCToolbox, или установите место установки вручную в настройках.",
"@home_action_info_valid_install_location_required": {},
"home_action_info_scanning": "Сканирование...",
"@home_action_info_scanning": {},
"home_action_info_scan_complete_valid_directories_found": "Сканирование завершено, найдено {v0} действительных директорий установки",
"@home_action_info_scan_complete_valid_directories_found": {},
"home_action_info_log_file_parse_fail": "Ошибка анализа лог-файла!",
"@home_action_info_log_file_parse_fail": {},
"home_action_title_star_citizen_website_localization": "Локализация сайта Star Citizen",
"@home_action_title_star_citizen_website_localization": {},
"home_action_info_web_localization_plugin_disclaimer": "Этот плагин предназначен только для общего просмотра и не несёт ответственности за любые проблемы, вызванные его использованием! Перед выполнением операций с аккаунтом убедитесь, что вы понимаете оригинальное содержание сайта!\n\n\nПри использовании этой функции для входа в аккаунт убедитесь, что вы скачали SCToolbox из надёжного источника.",
"@home_action_info_web_localization_plugin_disclaimer": {},
"home_action_info_initializing_resources": "Инициализация ресурсов локализации...",
"@home_action_info_initializing_resources": {},
"home_action_info_initialization_failed": "Ошибка инициализации ресурсов веб-локализации! {v0}",
"@home_action_info_initialization_failed": {},
"home_title_app_name": "SCToolbox",
"@home_title_app_name": {},
"home_localization_new_version_available": "Доступна новая версия локализации!",
"@home_localization_new_version_available": {},
"home_localization_new_version_installed": "Доступна новая версия локализации, установленной {v0}!",
"@home_localization_new_version_installed": {},
"home_info_valid_installation_required": "Для этой функции требуется действительное место установки",
"@home_info_valid_installation_required": {},
"home_info_one_click_launch_warning": "Предупреждение о функции запуска в один клик",
"@home_info_one_click_launch_warning": {},
"home_info_account_security_warning": "Для обеспечения безопасности аккаунта функция запуска в один клик отключена в версии для разработчиков. Мы предоставим эту функцию в версии из Microsoft Store.\n\nMicrosoft Store обеспечивает надежную загрузку и цифровую подпись, что эффективно защищает от несанкционированного доступа к программному обеспечению.\n\nПодсказка: Вы можете использовать локализацию без запуска игры через SCToolbox.",
"@home_info_account_security_warning": {},
"home_action_install_microsoft_store_version": "Установить версию из Microsoft Store",
"@home_action_install_microsoft_store_version": {},
"home_action_cancel": "Отмена",
"@home_action_cancel": {},
"home_action_info_abnormal_game_exit": "Игра завершилась ненормально\nexitCode={v0}\nstdout={v1}\nstderr={v2}\n\nДиагностическая информация: {v3}\n{v4}",
"@home_action_info_abnormal_game_exit": {},
"home_action_info_unknown_error": "Неизвестная ошибка, пожалуйста, используйте быструю диагностику и присоединитесь к группе для обратной связи.",
"@home_action_info_unknown_error": {},
"home_action_info_check_web_link": "Пожалуйста, проверьте появившуюся веб-ссылку для получения подробной информации.",
"@home_action_info_check_web_link": {},
"home_action_info_game_built_in": "Встроено в игру",
"@home_action_info_game_built_in": {},
"home_action_info_warning": "Предупреждение",
"@home_action_info_warning": {},
"localization_info_machine_translation_warning": "Вы используете встроенные в игру тексты. Официальные тексты в настоящее время переведены машиной (по состоянию на 3.21.0), рекомендуется установить перевод сообщества ниже.",
"@localization_info_machine_translation_warning": {},
"localization_info_translation": "Локализация игры",
"@localization_info_translation": {},
"localization_info_enabled": "Включено ({v0}):",
"@localization_info_enabled": {},
"localization_info_installed_version": "Установленная версия: {v0}",
"@localization_info_installed_version": {},
"localization_action_translation_feedback": "Отзыв о локализации",
"@localization_action_translation_feedback": {},
"localization_action_uninstall_translation": "Удалить локализацию",
"@localization_action_uninstall_translation": {},
"localization_info_note": "Примечание:",
"@localization_info_note": {},
"localization_info_community_translation": "Локализация сообщества",
"@localization_info_community_translation": {},
"localization_info_no_translation_available": "Для этого языка/версии пока нет доступной локализации, пожалуйста, ожидайте!",
"@localization_info_no_translation_available": {},
"localization_action_install": "Установить",
"@localization_action_install": {},
"localization_info_version_number": "Номер версии: {v0}",
"@localization_info_version_number": {},
"localization_info_channel": "Канал: {v0}",
"@localization_info_channel": {},
"localization_info_update_time": "Время обновления: {v0}",
"@localization_info_update_time": {},
"localization_info_installed": "Установлено",
"@localization_info_installed": {},
"localization_info_unavailable": "Недоступно",
"@localization_info_unavailable": {},
"localization_info_language": "Язык: ",
"@localization_info_language": {},
"localization_info_remove_incompatible_translation_params": "Удалить несовместимые параметры локализации",
"@localization_info_remove_incompatible_translation_params": {},
"localization_info_incompatible_translation_params_warning": "USER.cfg содержит несовместимые параметры локализации, это может быть остаток от предыдущих файлов локализации.\n\nЭто может привести к неработающей локализации или искаженному тексту, нажмите подтвердить, чтобы удалить эти параметры (это не повлияет на другие настройки).",
"@localization_info_incompatible_translation_params_warning": {},
"localization_info_corrupted_file": "Файл поврежден, пожалуйста, загрузите его заново",
"@localization_info_corrupted_file": {},
"localization_info_installation_error": "Ошибка установки!\n\n{v0}",
"@localization_info_installation_error": {},
"localization_info_custom_files": "Пользовательские файлы",
"@localization_info_custom_files": {},
"performance_info_graphic_optimization_hint": "Подсказка по оптимизации графики",
"@performance_info_graphic_optimization_hint": {},
"performance_info_graphic_optimization_warning": "Эта функция очень помогает при оптимизации узких мест видеокарты, но может иметь обратный эффект при узких местах CPU. Если у вас мощная видеокарта, попробуйте использовать более высокое качество графики для повышения утилизации видеокарты.",
"@performance_info_graphic_optimization_warning": {},
"performance_info_current_status": "Текущий статус: {v0}",
"@performance_info_current_status": {},
"performance_info_applied": "Применено",
"@performance_info_applied": {},
"performance_info_not_applied": "Не применено",
"@performance_info_not_applied": {},
"performance_action_preset": "Предустановка:",
"@performance_action_preset": {},
"performance_action_low": "Низкая",
"@performance_action_low": {},
"performance_action_medium": "Средняя",
"@performance_action_medium": {},
"performance_action_high": "Высокая",
"@performance_action_high": {},
"performance_action_super": "Супер",
"@performance_action_super": {},
"performance_action_info_preset_only_changes_graphics": "(Предустановки изменяют только настройки графики)",
"@performance_action_info_preset_only_changes_graphics": {},
"performance_action_reset_to_default": "Восстановить по умолчанию",
"@performance_action_reset_to_default": {},
"performance_action_apply": "Применить",
"@performance_action_apply": {},
"performance_action_apply_and_clear_shaders": "Применить и очистить шейдеры (рекомендуется)",
"@performance_action_apply_and_clear_shaders": {},
"performance_title_performance_optimization": "Оптимизация производительности -> {v0}",
"@performance_title_performance_optimization": {},
"performance_action_custom_parameters_input": "Здесь вы можете ввести собственные параметры, не включенные в SCToolbox. Пример конфигурации:\n\nr_displayinfo=0\nr_VSync=0",
"@performance_action_custom_parameters_input": {},
"performance_info_min_max_values": "{v0} Мин.: {v1} / Макс.: {v2}",
"@performance_info_min_max_values": {},
"performance_info_graphics": "Графика",
"@performance_info_graphics": {},
"performance_info_delete_config_file": "Удаление файла конфигурации...",
"@performance_info_delete_config_file": {},
"performance_action_clear_shaders": "Очистить шейдеры",
"@performance_action_clear_shaders": {},
"performance_info_done": "Готово...",
"@performance_info_done": {},
"performance_info_shader_clearing_warning": "После очистки шейдеров при первом входе в игру могут возникнуть задержки. Пожалуйста, дождитесь завершения инициализации игры.",
"@performance_info_shader_clearing_warning": {},
"performance_info_generate_config_file": "Создание файла конфигурации",
"@performance_info_generate_config_file": {},
"performance_info_write_out_config_file": "Запись файла конфигурации",
"@performance_info_write_out_config_file": {},
"app_index_menu_home": "Главная",
"@app_index_menu_home": {},
"app_index_menu_lobby": "Лобби",
"@app_index_menu_lobby": {},
"app_index_menu_tools": "Инструменты",
"@app_index_menu_tools": {},
"app_index_menu_settings": "Настройки",
"@app_index_menu_settings": {},
"app_index_menu_about": "О программе",
"@app_index_menu_about": {},
"lobby_online_lobby_coming_soon": "Онлайн-лобби скоро появится!",
"@lobby_online_lobby_coming_soon": {},
"lobby_invitation_to_participate": "Приглашаем вас принять участие в ",
"@lobby_invitation_to_participate": {},
"lobby_survey": "опросе.",
"@lobby_survey": {},
"setting_action_create_settings_shortcut": "Создать ярлык настроек",
"@setting_action_create_settings_shortcut": {},
"setting_action_create_desktop_shortcut": "Создать ярлык SCToolbox на рабочем столе",
"@setting_action_create_desktop_shortcut": {},
"setting_action_reset_auto_password_fill": "Сбросить автозаполнение пароля",
"@setting_action_reset_auto_password_fill": {},
"setting_action_ignore_efficiency_cores_on_launch": "Игнорировать энергоэффективные ядра при запуске игры (для процессоров Intel 12-го поколения и выше)",
"@setting_action_ignore_efficiency_cores_on_launch": {},
"setting_action_set_core_count": "Установленное количество ядер: {v0} (Эта функция применяется при запуске через SCToolbox или в режиме администратора RSI Launcher из набора инструментов. При значении 0 функция отключена)",
"@setting_action_set_core_count": {},
"setting_action_set_launcher_file": "Установить файл лаунчера (RSI Launcher.exe)",
"@setting_action_set_launcher_file": {},
"setting_action_info_manual_launcher_location_setting": "Ручная установка местоположения лаунчера, рекомендуется только если автоматическое сканирование мест установки не работает",
"@setting_action_info_manual_launcher_location_setting": {},
"setting_action_set_game_file": "Установить файл игры (StarCitizen.exe)",
"@setting_action_set_game_file": {},
"setting_action_info_manual_game_location_setting": "Ручная установка местоположения игры, рекомендуется только если автоматическое сканирование мест установки не работает",
"@setting_action_info_manual_game_location_setting": {},
"setting_action_clear_translation_file_cache": "Очистить кэш файлов локализации",
"@setting_action_clear_translation_file_cache": {},
"setting_action_info_cache_clearing_info": "Размер кэша {v0}MB, очистка кэша загруженных SCToolbox файлов локализации, не повлияет на установленные локализации",
"@setting_action_info_cache_clearing_info": {},
"setting_action_tool_site_access_acceleration": "Ускорение доступа к инструментам",
"@setting_action_tool_site_access_acceleration": {},
"setting_action_info_mirror_server_info": "Использовать зеркальные серверы для ускорения доступа к инструментам, таким как Dps, Uex и другие. Если возникают проблемы с доступом, отключите эту функцию. Для безопасности аккаунта, RSI сайт никогда не будет ускоряться.",
"@setting_action_info_mirror_server_info": {},
"setting_action_view_log": "Просмотр лога",
"@setting_action_view_log": {},
"setting_action_info_view_log_file": "Просмотр лог-файла SCToolbox для определения багов программы",
"@setting_action_info_view_log_file": {},
"setting_action_info_confirm_reset_autofill": "Подтвердить сброс автозаполнения?",
"@setting_action_info_confirm_reset_autofill": {},
"setting_action_info_delete_local_account_warning": "Это удалит локальную запись аккаунта или, при следующем запуске игры, выберите 'Нет' для отключения автозаполнения.",
"@setting_action_info_delete_local_account_warning": {},
"setting_action_info_autofill_data_cleared": "Данные автозаполнения очищены",
"@setting_action_info_autofill_data_cleared": {},
"setting_action_info_enter_cpu_core_to_ignore": "Введите количество ядер CPU для игнорирования",
"@setting_action_info_enter_cpu_core_to_ignore": {},
"setting_action_info_cpu_core_tip": "Совет: Введите количество энергоэффективных ядер вашего устройства. Для устройств без архитектуры big.LITTLE оставьте 0.\n\nЭта функция применяется при запуске через SCToolbox или в режиме администратора RSI Launcher из набора инструментов. При значении 0 функция отключена.",
"@setting_action_info_cpu_core_tip": {},
"setting_action_info_select_rsi_launcher_location": "Выберите местоположение RSI Launcher (RSI Launcher.exe)",
"@setting_action_info_select_rsi_launcher_location": {},
"setting_action_info_setting_success": "Настройка успешно выполнена, нажмите обновить на соответствующей странице для сканирования нового пути",
"@setting_action_info_setting_success": {},
"setting_action_info_file_error": "Ошибка файла!",
"@setting_action_info_file_error": {},
"setting_action_info_select_game_install_location": "Выберите место установки игры (StarCitizen.exe)",
"@setting_action_info_select_game_install_location": {},
"setting_action_info_confirm_clear_cache": "Подтвердите очистку кэша локализации?",
"@setting_action_info_confirm_clear_cache": {},
"setting_action_info_clear_cache_warning": "Это не повлияет на уже установленные локализации.",
"@setting_action_info_clear_cache_warning": {},
"setting_action_info_microsoft_version_limitation": "Из-за ограничений версии Microsoft, пожалуйста, в следующем окне вручную перетащите «SCToolbox» на рабочий стол для создания ярлыка.",
"@setting_action_info_microsoft_version_limitation": {},
"setting_action_info_shortcut_created": "Создание завершено, проверьте рабочий стол",
"@setting_action_info_shortcut_created": {},
"app_upgrade_title_new_version_found": "Найдена новая версия -> {v0}",
"@app_upgrade_title_new_version_found": {},
"app_upgrade_info_getting_new_version_details": "Получение информации о новой версии...",
"@app_upgrade_info_getting_new_version_details": {},
"app_upgrade_info_update_server_tip": "Примечание: Сейчас используется зеркальный сервер для обновления, что может привести к снижению скорости загрузки, но помогает нам контролировать затраты. Если возникают проблемы с загрузкой, нажмите здесь для перехода к ручной установке.",
"@app_upgrade_info_update_server_tip": {},
"app_upgrade_info_installing": "Установка: ",
"@app_upgrade_info_installing": {},
"app_upgrade_info_downloading": "Загрузка: {v0}% ",
"@app_upgrade_info_downloading": {},
"app_upgrade_action_update_now": "Обновить сейчас",
"@app_upgrade_action_update_now": {},
"app_upgrade_action_next_time": "В следующий раз",
"@app_upgrade_action_next_time": {},
"app_upgrade_info_download_failed": "Ошибка загрузки, пожалуйста, попробуйте установить вручную!",
"@app_upgrade_info_download_failed": {},
"app_upgrade_info_run_failed": "Ошибка запуска, пожалуйста, попробуйте установить вручную!",
"@app_upgrade_info_run_failed": {},
"app_splash_checking_availability": "Проверка доступности, это может занять некоторое время...",
"@app_splash_checking_availability": {},
"app_splash_checking_for_updates": "Проверка обновлений...",
"@app_splash_checking_for_updates": {},
"app_splash_almost_done": "Почти готово…",
"@app_splash_almost_done": {},
"tools_hosts_info_rsi_official_website": "Официальный сайт RSI",
"@tools_hosts_info_rsi_official_website": {},
"tools_hosts_info_rsi_customer_service": "Служба поддержки RSI",
"@tools_hosts_info_rsi_customer_service": {},
"tools_hosts_info_dns_query_and_test": "Запрос DNS и проверка доступности, пожалуйста, подождите...",
"@tools_hosts_info_dns_query_and_test": {},
"tools_hosts_info_writing_hosts": "Запись в файл Hosts...",
"@tools_hosts_info_writing_hosts": {},
"tools_hosts_info_reading_config": "Чтение конфигурации...",
"@tools_hosts_info_reading_config": {},
"tools_hosts_info_hosts_acceleration": "Ускорение через Hosts",
"@tools_hosts_info_hosts_acceleration": {},
"tools_hosts_info_open_hosts_file": "Открыть файл Hosts",
"@tools_hosts_info_open_hosts_file": {},
"tools_hosts_info_status": "Статус",
"@tools_hosts_info_status": {},
"tools_hosts_info_site": "Сайт",
"@tools_hosts_info_site": {},
"tools_hosts_info_enable": "Включить",
"@tools_hosts_info_enable": {},
"tools_hosts_action_one_click_acceleration": "Ускорение в один клик",
"@tools_hosts_action_one_click_acceleration": {},
"tools_info_scanning": "Сканирование...",
"@tools_info_scanning": {},
"tools_info_processing_failed": "Ошибка обработки: {v0}",
"@tools_info_processing_failed": {},
"tools_info_game_install_location": "Место установки игры: ",
"@tools_info_game_install_location": {},
"tools_info_rsi_launcher_location": "Местоположение RSI Launcher:",
"@tools_info_rsi_launcher_location": {},
"tools_action_view_system_info": "Просмотр информации о системе",
"@tools_action_view_system_info": {},
"tools_action_info_view_critical_system_info": "Просмотр критической информации о системе для быстрой диагностики\n\nЭто может занять время, пожалуйста, подождите.",
"@tools_action_info_view_critical_system_info": {},
"tools_action_p4k_download_repair": "Загрузка/восстановление P4K через зеркало",
"@tools_action_p4k_download_repair": {},
"tools_action_info_p4k_download_repair_tip": "Использовать сервис зеркальной загрузки от китайской Star Citizen Wiki для загрузки или восстановления файла p4k.\nИнформация о версии: {v0}",
"@tools_action_info_p4k_download_repair_tip": {},
"tools_action_hosts_acceleration_experimental": "Ускорение через Hosts (экспериментально)",
"@tools_action_hosts_acceleration_experimental": {},
"tools_action_info_hosts_acceleration_experimental_tip": "Запись IP-адресов в файл Hosts для решения проблем с DNS-загрязнением, препятствующих входу на официальный сайт в некоторых регионах.\nЭта функция находится на первом этапе тестирования, пожалуйста, сообщайте о любых проблемах.",
"@tools_action_info_hosts_acceleration_experimental_tip": {},
"tools_action_reinstall_easyanticheat": "Переустановка EasyAntiCheat",
"@tools_action_reinstall_easyanticheat": {},
"tools_action_info_reinstall_eac": "Если у вас возникают ошибки EAC и автоматическое исправление не работает, попробуйте использовать эту функцию для переустановки EAC.",
"@tools_action_info_reinstall_eac": {},
"tools_action_rsi_launcher_admin_mode": "Режим администратора RSI Launcher",
"@tools_action_rsi_launcher_admin_mode": {},
"tools_action_info_run_rsi_as_admin": "Запуск RSI Launcher от имени администратора может решить некоторые проблемы.\n\nЕсли настроены параметры блокировки энергоэффективных ядер, они также будут применены здесь.",
"@tools_action_info_run_rsi_as_admin": {},
"tools_action_info_init_failed": "Ошибка инициализации, пожалуйста, сделайте снимок экрана и сообщите разработчику. {v0}",
"@tools_action_info_init_failed": {},
"tools_action_rsi_launcher_log_fix": "Исправление лог-файла RSI Launcher",
"@tools_action_rsi_launcher_log_fix": {},
"tools_action_info_rsi_launcher_log_issue": "В некоторых случаях лог-файл RSI Launcher может повредиться, что мешает завершению сканирования проблем. Используйте этот инструмент для очистки поврежденных лог-файлов.\n\nТекущий размер лог-файла: {v0} МБ",
"@tools_action_info_rsi_launcher_log_issue": {},
"tools_action_remove_nvme_registry_patch": "Удалить патч реестра NVME",
"@tools_action_remove_nvme_registry_patch": {},
"tools_action_info_nvme_patch_issue": "Если у вас возникли проблемы с патчем NVME, запустите этот инструмент. (Может привести к недоступности установки/обновления игры.)\n\nСтатус патча: {v0}",
"@tools_action_info_nvme_patch_issue": {},
"tools_action_info_not_installed": "Не установлен",
"@tools_action_info_not_installed": {},
"tools_action_info_removed_restart_effective": "Удалено, изменения вступят в силу после перезагрузки!",
"@tools_action_info_removed_restart_effective": {},
"tools_action_write_nvme_registry_patch": "Записать патч реестра NVME",
"@tools_action_write_nvme_registry_patch": {},
"tools_action_info_manual_nvme_patch": "Ручная запись патча NVME, используйте эту функцию только если знаете, что делаете",
"@tools_action_info_manual_nvme_patch": {},
"tools_action_info_fix_success_restart": "Исправление успешно, попробуйте перезагрузить компьютер и продолжить установку игры! Если изменения реестра вызвали проблемы совместимости с другими программами, используйте инструмент очистки реестра NVME в разделе Инструменты.",
"@tools_action_info_fix_success_restart": {},
"tools_action_clear_shader_cache": "Очистить кэш шейдеров",
"@tools_action_clear_shader_cache": {},
"tools_action_info_shader_cache_issue": "Если графика игры выглядит необычно или после обновления версии, используйте этот инструмент для очистки устаревших шейдеров (также вернёт Vulkan к DX11)\n\nРазмер кэша: {v0} МБ",
"@tools_action_info_shader_cache_issue": {},
"tools_action_close_photography_mode": "Выключить режим фотографии",
"@tools_action_close_photography_mode": {},
"tools_action_open_photography_mode": "Включить режим фотографии",
"@tools_action_open_photography_mode": {},
"tools_action_info_restore_lens_shake": "Восстановить эффект тряски объектива.\n\nИнформация о параметрах предоставлена @拉邦那 Lapernum.",
"@tools_action_info_restore_lens_shake": {},
"tools_action_info_one_key_close_lens_shake": "Одним кликом отключить дрожание камеры в игре для упрощения фотосъёмки.\n\nИнформация о параметрах предоставлена @拉邦那 Lapernum.",
"@tools_action_info_one_key_close_lens_shake": {},
"tools_action_info_log_file_parse_failed": "Ошибка анализа лог-файла!\nПопробуйте использовать инструмент исправления лог-файла RSI Launcher!",
"@tools_action_info_log_file_parse_failed": {},
"tools_action_info_rsi_launcher_not_found": "RSI Launcher не найден, попробуйте переустановить его или добавить вручную в настройках.",
"@tools_action_info_rsi_launcher_not_found": {},
"tools_action_info_star_citizen_not_found": "Местоположение установки Star Citizen не найдено, пожалуйста, запустите игру хотя бы один раз или добавьте местоположение вручную в настройках.",
"@tools_action_info_star_citizen_not_found": {},
"tools_action_info_valid_game_directory_needed": "Для этой функции требуется действительная директория установки игры",
"@tools_action_info_valid_game_directory_needed": {},
"tools_action_info_eac_file_removed": "Файлы EAC удалены. Сейчас будет открыт RSI Launcher, пожалуйста, перейдите в SETTINGS -> VERIFY для переустановки EAC.",
"@tools_action_info_eac_file_removed": {},
"tools_action_info_error_occurred": "Произошла ошибка: {v0}",
"@tools_action_info_error_occurred": {},
"tools_action_info_system_info_content": "Система: {v0}\n\nПроцессор: {v1}\n\nОбъем памяти: {v2}GB\n\nИнформация о видеокарте:\n{v3}\n\nИнформация о жестком диске:\n{v4}\n\n",
"@tools_action_info_system_info_content": {},
"tools_action_info_rsi_launcher_directory_not_found": "Директория RSI Launcher не найдена, пожалуйста, выполните операцию вручную.",
"@tools_action_info_rsi_launcher_directory_not_found": {},
"tools_action_info_log_file_not_exist": "Лог-файл не существует, попробуйте запустить игру или начать установку и выйти из лаунчера. Если проблема не решена, попробуйте обновить лаунчер до последней версии!",
"@tools_action_info_log_file_not_exist": {},
"tools_action_info_cleanup_complete": "Очистка завершена, пожалуйста, выполните установку или запуск игры.",
"@tools_action_info_cleanup_complete": {},
"tools_action_info_cleanup_failed": "Очистка не удалась, пожалуйста, удалите файл вручную, расположение файла: {v0}",
"@tools_action_info_cleanup_failed": {},
"tools_action_info_system_info_title": "Информация о системе",
"@tools_action_info_system_info_title": {},
"tools_action_info_rsi_launcher_running_warning": "RSI Launcher запущен! Пожалуйста, сначала закройте лаунчер, прежде чем использовать эту функцию!",
"@tools_action_info_rsi_launcher_running_warning": {},
"tools_action_info_p4k_file_description": "P4k - это основной файл игры Star Citizen, размером более 100 ГБ. Автономное скачивание, предоставляемое SCToolbox, помогает пользователям с медленной загрузкой p4k или для исправления файла p4k, который не может быть исправлен официальным лаунчером.\n\nДалее появится диалоговое окно с запросом места сохранения (можно выбрать папку Star Citizen или другое место). После завершения загрузки убедитесь, что файл P4K находится в папке LIVE, затем используйте лаунчер Star Citizen для проверки обновлений.",
"@tools_action_info_p4k_file_description": {},
"tools_action_info_p4k_download_in_progress": "Загрузка p4k уже выполняется, пожалуйста, проверьте менеджер загрузок!",
"@tools_action_info_p4k_download_in_progress": {},
"tools_action_info_function_under_maintenance": "Функция на техническом обслуживании, пожалуйста, повторите попытку позже!",
"@tools_action_info_function_under_maintenance": {},
"tools_action_info_config_file_not_exist": "Конфигурационный файл не существует, попробуйте запустить игру один раз",
"@tools_action_info_config_file_not_exist": {},
"webview_localization_name_member": "именной участник",
"@webview_localization_name_member": {},
"webview_localization_total_invitations": "Всего приглашений:",
"@webview_localization_total_invitations": {},
"webview_localization_unfinished_invitations": "Незавершённые приглашения",
"@webview_localization_unfinished_invitations": {},
"webview_localization_finished_invitations": "Завершённые приглашения",
"@webview_localization_finished_invitations": {},
"app_init_failed_with_reason": "Ошибка инициализации: {v0}",
"@app_init_failed_with_reason": {},
"settings_app_language": "Язык",
"settings_app_language_auto": "Автоматически",
"app_common_network_error": "Ошибка подключения к сети!\nПереход в автономный режим...\n\nПожалуйста, проверьте подключение к сети или получите последние новости на социальном форуме. Попробуйте включить встроенный режим DNS в настройках приложения.\nДата сборки текущей версии: {v0}\nQQ группа: 940696487\nСообщение об ошибке: {v1}",
"app_common_upgrade_info_error": "Не удалось получить информацию об обновлении, пожалуйста, повторите попытку позже.",
"doctor_game_error_low_memory": "Недостаточно доступной памяти",
"doctor_game_error_low_memory_info": "Попробуйте увеличить виртуальную память (для 1080p требуется >64 ГБ физической + виртуальной памяти)",
"doctor_game_error_generic_info": "Игра вызвала наиболее распространенную проблему сбоя, пожалуйста, обратитесь к руководству по устранению неполадок",
"doctor_game_error_gpu_crash": "Ваша видеокарта вышла из строя! Пожалуйста, обратитесь к руководству по устранению неполадок",
"doctor_game_error_socket_error": "Обнаружена ошибка сокета",
"doctor_game_error_socket_error_info": "При использовании ускорителя X Black Box попробуйте изменить режим ускорения",
"doctor_game_error_permissions_error": "Недостаточно прав",
"doctor_game_error_permissions_error_info": "Попробуйте запустить лаунчер от имени администратора или использовать SCToolbox (версия Microsoft Store) для запуска.",
"doctor_game_error_game_process_error": "Процесс игры занят",
"doctor_game_error_game_process_error_info": "Попробуйте перезапустить лаунчер или перезагрузить компьютер",
"doctor_game_error_game_damaged_file": "Файлы программы игры повреждены",
"doctor_game_error_game_damaged_file_info": "Попробуйте удалить папку Bin64 и проверить в лаунчере.",
"doctor_game_error_game_damaged_p4k_file": "Файл P4K поврежден",
"doctor_game_error_game_damaged_p4k_file_info": "Попробуйте удалить файл Data.p4k и проверить в лаунчере или использовать альтернативную загрузку через SCToolbox.",
"doctor_game_error_low_gpu_memory": "Недостаточно видеопамяти",
"doctor_game_error_low_gpu_memory_info": "Пожалуйста, не запускайте другие игры/приложения с высоким использованием видеокарты в фоновом режиме или замените видеокарту.",
"doctor_game_error_gpu_vulkan_crash": "Сбой GPU Vulkan",
"doctor_game_error_gpu_vulkan_crash_info": "Сбой Vulkan! Это может быть проблема с версией драйвера или игрового движка. Попробуйте обновить драйвер GPU или использовать функцию очистки шейдеров для возврата к DX11",
"app_common_error_info": "Произошла ошибка: {v0}",
"app_common_tip": "Подсказка",
"app_common_tip_i_know": "Понятно",
"app_common_tip_confirm": "Подтвердить",
"app_common_tip_cancel": "Отмена",
"settings_app_language_switch_info": "Переключить язык отображения приложения",
"home_holiday_countdown_days": "{v0} дней",
"home_holiday_countdown_in_progress": "В процессе",
"app_common_loading_images": "Загрузка изображений...",
"app_splash_dialog_u_a_p_p": "Пользовательское соглашение и политика конфиденциальности",
"app_splash_dialog_u_a_p_p_content": "Благодарим вас за выбор SCToolbox. Мы стремимся предоставить вам безопасный, удобный и надежный пользовательский опыт. Прежде чем начать использование приложения, пожалуйста, прочтите и согласитесь со следующим:\n\n1. Это приложение является программным обеспечением с открытым исходным кодом под лицензией GNU General Public License v3.0. Вы можете свободно использовать, модифицировать и распространять это программное обеспечение в соответствии с условиями лицензии. Наш исходный код находится на: [Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app).\n2. Авторские права на интернет-контент в этом приложении (включая, но не ограничиваясь файлами локализации, инструментальными сайтами, новостями, видео и т.д.) принадлежат их авторам и не являются частью GPL. Пожалуйста, используйте их в соответствии с соответствующими лицензионными соглашениями.\n3. Официальные каналы бесплатного распространения этого приложения: [Microsoft Store](https://apps.microsoft.com/detail/9NF3SWFWNKL1) и [Star Citizen Localization Group Website](https://www.starcitizenzw.com/). Если вы получили его из других сторонних источников, пожалуйста, тщательно проверяйте, чтобы избежать финансовых потерь.\n4. Это приложение отправляет анонимные статистические данные на наши серверы для улучшения качества программного обеспечения. Мы не собираем вашу личную информацию.\n5. Это приложение поддерживается сообществом и не имеет прямой связи с Cloud Imperium Games или другими коммерческими компаниями.\n6. Мы предоставляем ограниченную поддержку сообщества. При необходимости, пожалуйста, обратитесь к странице «О программе», чтобы узнать, как связаться с нами.",
"tools_unp4k_msg_init": "Инициализация...",
"tools_unp4k_msg_reading": "Чтение файла P4K...",
"tools_unp4k_msg_reading2": "Обработка файлов...",
"tools_unp4k_msg_reading3": "Обработка файлов ({v0}/{v1})...",
"tools_unp4k_msg_read_completed": "Загрузка завершена: {v0} файлов, время: {v1} мс",
"tools_unp4k_msg_open_file": "Открытие файла: {v0}",
"tools_unp4k_msg_read_file": "Чтение файла: {v0}...",
"home_localization_advanced_title": "Расширенная локализация -> {v0}",
"home_localization_advanced_msg_version": "Загруженная версия локализации: {v0}",
"home_localization_advanced_title_msg": "Строк локализации: {v0} Строк P4K: {v1}",
"home_localization_advanced_action_install": "Установить локализацию",
"home_localization_advanced_action_mod_change": "Пересоздание текста...",
"home_localization_advanced_action_mode": "Режим",
"home_localization_advanced_title_preview": "Предпросмотр: {v0}",
"home_localization_advanced_json_text_location_other": "Места - Другое",
"home_localization_advanced_json_text_location_used": "Места - Часто используемые",
"home_localization_advanced_json_text_things_other": "Предметы - Другое",
"home_localization_advanced_json_text_things_used": "Предметы - Часто используемые",
"home_localization_advanced_json_text_vehicle_other": "Транспорт - Другое",
"home_localization_advanced_json_text_vehicle_used": "Транспорт - Часто используемый",
"home_localization_advanced_json_text_mission_or_logs": "Миссии/Журналы",
"home_localization_advanced_json_text_subtitle": "Субтитры",
"home_localization_advanced_json_text_ui_or_hud_or_menu": "UI/HUD/Меню",
"home_localization_advanced_json_text_un_localization": "Без локализации",
"home_localization_advanced_json_text_others": "Другое",
"home_localization_advanced_action_mod_change_localization": "Локализация",
"home_localization_advanced_action_mod_change_un_localization": "Английский оригинал",
"home_localization_advanced_action_mod_change_mixed": "Двуязычный",
"home_localization_advanced_action_mod_change_mixed_newline": "Двуязычный (с новой строки)",
"home_localization_advanced_msg_classifying": "Классификация...",
"home_localization_advanced_msg_reading_p4k": "Чтение файла p4k...",
"home_localization_advanced_msg_reading_server_localization_text": "Получение текста локализации...",
"home_localization_advanced_msg_gen_localization_text": "Создание файла локализации...",
"home_localization_advanced_msg_gen_localization_install": "Установка файла локализации...",
"home_localization_msg_version_advanced": " (Расширенная локализация)",
"home_localization_msg_no_note": "Для этой версии нет описания",
"home_localization_action_rsi_launcher_localization": "Локализация RSI Launcher",
"home_localization_action_rsi_launcher_no_game_path_msg": "У вас не установлена игра или не выбран путь установки игры. Доступна только функция локализации лаунчера. Пожалуйста, убедитесь, что игра установлена или добавьте путь установки игры в настройках SCToolbox и повторите попытку.",
"home_localization_action_advanced": "Расширенная локализация",
"home_localization_action_install_customize": "Установить пользовательский файл",
"home_localization_title_localization_tools": "Инструменты локализации",
"performance_json_text_dof": "Глубина резкости",
"performance_json_text_dof_info": "Управляет эффектом глубины резкости на странице браслета и т.д.",
"performance_json_text_ssdo": "Постобработка освещения",
"performance_json_text_ssdo_info": "Настройка уровня постобработки освещения",
"performance_json_text_title_graphics": "Графика (рекомендуется очистить шейдеры после изменения)",
"performance_json_text_antialiasing": "Сглаживание",
"performance_json_text_antialiasing_info": "0 выкл., 1 SMAA, 2 Временная фильтрация + SMAA, 3 SMAA с временной фильтрацией и дрожанием проекционной матрицы",
"performance_json_text_game_effects": "Уровень эффектов",
"performance_json_text_game_effects_info": "Уровень игровых эффектов",
"performance_json_text_texture": "Уровень текстур",
"performance_json_text_texture_info": "Детализация текстур моделей",
"performance_json_text_volumetric_effects": "Объемные эффекты",
"performance_json_text_volumetric_effects_info": "Объемные облака, объемное освещение и т.д.",
"performance_json_text_water": "Эффекты воды",
"performance_json_text_water_info": "Уровень всех водных эффектов",
"performance_json_text_object_detail": "Детализация объектов",
"performance_json_text_object_detail_info": "Детализация моделей объектов, влияет на LOD и т.д.",
"performance_json_text_particles": "Детализация частиц",
"performance_json_text_physics": "Детализация физики",
"performance_json_text_physics_info": "Диапазон физических эффектов",
"performance_json_text_shading": "Детализация шейдеров",
"performance_json_text_shading_info": "Связанное с шейдерами",
"performance_json_text_shadows": "Детализация теней",
"performance_json_text_shadows_info": "Эффекты теней",
"performance_json_text_postprocessing": "Детализация постобработки",
"performance_json_text_postprocessing_info": "Шейдеры постобработки, эффекты размытия в движении и т.д.",
"performance_json_text_renderer": "Качество рендеринга",
"performance_json_text_renderer_info": "Качество рендерера CryEngine",
"performance_json_text_shader_decal": "Качество наклеек",
"performance_json_text_shader_decal_info": "(логотипы, значки и т.д.)",
"performance_json_text_shader_post_process": "Качество шейдеров",
"performance_json_text_shader_fx": "Качество FX",
"performance_json_text_shader_general": "Общее качество",
"performance_json_text_shader_general_info": "Общее качество моделей",
"performance_json_text_shader_glass": "Качество стекла",
"performance_json_text_shader_glass_info": "Окна, зеркала и т.д.",
"performance_json_text_shader_hdr": "Качество HDR",
"performance_json_text_shader_hdr_info": "Обработка HDR, хроматических аберраций, уровней яркости и т.д.",
"performance_json_text_shader_particle": "Качество частиц",
"performance_json_text_shader_particle_info": "Качество эффектов частиц",
"performance_json_text_shader_terrain": "Качество местности",
"performance_json_text_shader_shadow": "Качество теней",
"performance_json_text_shader_sky": "Качество неба",
"performance_json_text_particles_object_collisions": "Столкновения частиц",
"performance_json_text_particles_object_collisions_info": "1 только статические частицы 2 включая динамические частицы",
"performance_json_text_displayinfo": "Информация на экране (показывать FPS)",
"performance_json_text_displayinfo_info": "Показывать FPS, информацию о сервере и т.д. в правом верхнем углу экрана",
"performance_json_text_max_fps": "Максимальный FPS",
"performance_json_text_max_fps_info": "Регулировка максимального FPS в игре, 0 для неограниченного",
"performance_json_text_display_session": "Показывать информацию о сессии",
"performance_json_text_display_session_info": "Когда включено, показывает QR-код на экране для быстрого доступа CIG к соответствующей информации при обратной связи",
"performance_json_text_vsync": "Вертикальная синхронизация",
"performance_json_text_vsync_info": "Включите для предотвращения разрывов, выключите для повышения FPS",
"performance_json_text_motion_blur": "Размытие в движении",
"performance_json_text_motion_blur_info": "Включите для усиления чувства движения, выключите для улучшения восприятия",
"performance_json_text_fov": "Настройка FOV",
"performance_json_text_ui_animation": "Анимация затухания UI",
"performance_json_text_custom_parameters": "Пользовательские параметры",
"performance_json_text_title_custom": "Пользовательские",
"tools_rsi_launcher_enhance_init_msg1": "Чтение информации о лаунчере...",
"tools_rsi_launcher_enhance_init_msg2": "Получение данных улучшений из сети...",
"tools_rsi_launcher_enhance_working_msg1": "Создание патча...",
"tools_rsi_launcher_enhance_working_msg2": "Установка патча, это займет некоторое время в зависимости от производительности вашего компьютера...",
"tools_rsi_launcher_enhance_title": "Улучшения RSI Launcher",
"tools_rsi_launcher_enhance_msg_version": "Внутренняя версия лаунчера: {v0}",
"tools_rsi_launcher_enhance_msg_patch_status": "Статус патча: {v0}",
"tools_rsi_launcher_enhance_msg_error": "Не удалось получить данные улучшений, возможно проблема с сетью или текущая версия не поддерживается",
"tools_rsi_launcher_enhance_title_localization": "Локализация RSI Launcher",
"tools_rsi_launcher_enhance_subtitle_localization": "Добавляет поддержку нескольких языков в RSI Launcher.",
"tools_rsi_launcher_enhance_title_download_booster": "Ускорение загрузки RSI Launcher",
"tools_rsi_launcher_enhance_subtitle_download_booster": "Позволяет использовать больше потоков при загрузке игры для увеличения скорости, после включения измените количество потоков в настройках лаунчера.",
"tools_rsi_launcher_enhance_action_install": "Установить патч улучшений",
"tools_rsi_launcher_enhance_msg_uninstall": "* Чтобы удалить патч улучшений, переустановите RSI Launcher.",
"tools_rsi_launcher_enhance_msg_error_launcher_notfound": "RSI Launcher не найден",
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error": "Не удалось прочитать информацию о лаунчере!",
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args": "Не удалось прочитать информацию о лаунчере: {v0}",
"tools_action_rsi_launcher_enhance_info": "Локализация лаунчера, улучшение загрузки",
"tools_rsi_launcher_enhance_note_title": "Замечания по использованию улучшений RSI Launcher",
"tools_rsi_launcher_enhance_note_msg": "Улучшения RSI Launcher - это функция сообщества, которая распаковывает \"RSI Launcher\" на вашем компьютере и добавляет дополнительные функции улучшений. Какие функции использовать - решать вам.\n\nВ настоящее время CIG разрешает нам только операции с мультиязычностью. Ускорение загрузки лаунчера - это дополнительная функция, которую мы считаем полезной. Нарушение пользовательского соглашения CIG (https://robertsspaceindustries.com/eula) может привести к серьезным последствиям, включая блокировку аккаунта. Решение об использовании остается за вами, мы не несем ответственности за возможные последствия (повреждение игры, блокировка аккаунта и т.д.).\n\nДля модификаций лаунчера мы открыли исходный код на: https://github.com/StarCitizenToolBox/RSILauncherEnhance, при необходимости вы можете его изучить.\n\nЕсли по какой-либо причине вам нужно отменить этот патч улучшений, просто переустановите официальный лаунчер поверх текущего.",
"tools_action_unp4k": "Просмотрщик P4K",
"tools_action_unp4k_info": "Распаковать файл p4k Star Citizen",
"tools_unp4k_title": "Просмотрщик P4K -> {v0}",
"tools_unp4k_view_file": "Нажмите на файл для предварительного просмотра",
"tools_unp4k_msg_unknown_file_type": "Неизвестный тип файла\n{v0}",
"home_localization_select_customize_file_ini": "Пожалуйста, выберите ini файл",
"home_localization_select_customize_file": "Пожалуйста, выберите пользовательский файл локализации",
"home_localization_action_select_customize_file": "Нажмите для выбора ini файла",
"home_localization_ptu_advanced_localization_tip_title": "Рекомендуется использовать расширенную локализацию",
"home_localization_ptu_advanced_localization_tip_title_info": "В тестовых каналах PTU/EPTU текущий текст локализации может быть не синхронизирован с игрой. Использование расширенной локализации может уменьшить появление некорректного текста.",
"tools_rsi_launcher_enhance_action_fold": "Свернуть дополнительные функции",
"tools_rsi_launcher_enhance_action_expand": "Развернуть дополнительные функции",
"tools_unp4k_missing_runtime": "Отсутствует среда выполнения",
"tools_unp4k_missing_runtime_info": "Для использования этой функции необходимо установить среду выполнения .NET8. Пожалуйста, нажмите кнопку ниже для загрузки и установки, после успешной установки перезапустите эту страницу для продолжения использования.",
"tools_unp4k_missing_runtime_action_install": "Установить среду выполнения",
"settings_title_general": "Общие",
"settings_item_dns": "Использовать встроенный DNS",
"settings_item_dns_info": "При включении может решить проблемы с DNS-загрязнением в некоторых регионах",
"settings_title_game": "Игра",
"about_action_btn_faq": "Часто задаваемые вопросы",
"guide_title_welcome": "Добро пожаловать",
"guide_info_check_settings": "Пожалуйста, проверьте правильность следующих настроек. Если есть ошибки, нажмите на значок справа для исправления, прежде чем продолжить использование",
"guide_info_game_download_note": "* Если ваша игра загружается, пожалуйста, запустите игру один раз после завершения загрузки и нажмите кнопку обновления. Если вы используете только локализацию лаунчера, убедитесь, что путь к лаунчеру правильный, и нажмите 'Завершить настройку'",
"guide_action_get_help": "Получить помощь",
"guide_action_complete_setup": "Завершить настройку",
"guide_dialog_confirm_complete_setup": "Подтвердить завершение настройки?",
"guide_action_info_no_launcher_path_warning": "Вы еще не выбрали путь установки лаунчера. Подтвердить завершение настройки?\n\nПосле закрытия страницы руководства вам нужно будет вручную перейти на страницу настроек.",
"guide_action_info_no_game_path_warning": "Вы еще не выбрали путь установки игры. Подтвердить завершение настройки?\n\nПосле закрытия страницы руководства вам нужно будет вручную перейти на страницу настроек.",
"setting_toast_select_launcher_exe": "Выберите exe файл лаунчера: \"RSI Launcher.exe\"",
"setting_toast_select_game_file": "Выберите соответствующий файл игры: Bin64/StarCitizen.exe",
"input_method_feature_maintenance": "Функция на техническом обслуживании, пожалуйста, повторите попытку позже",
"input_method_community_input_method_not_installed": "Поддержка метода ввода сообщества не установлена",
"input_method_install_community_input_method_prompt": "Перейти к управлению локализацией для установки?\n\nЕсли локализация уже установлена, удалите ее и при повторной установке включите переключатель поддержки метода ввода сообщества.",
"input_method_usage_instructions": "Инструкция по использованию",
"input_method_input_text_instructions": "Введите текст в текстовое поле выше и вставьте (Ctrl+V) преобразованный текст ниже в текстовое поле игры, чтобы отправить текст, который игра не поддерживает для ввода, в канал чата.",
"input_method_input_placeholder": "Введите текст...",
"input_method_encoded_text_placeholder": "Здесь будет преобразованный текст...",
"input_method_remote_input_service": "Служба удаленного ввода:",
"input_method_disclaimer": "*Рекомендуется использовать эту функцию только в непубличных каналах. Если пользователь решает использовать эту функцию в публичных каналах, он несет полную ответственность за любые последствия (включая, но не ограничиваясь, жалобы других игроков на спам).\n*Если эта функция будет использоваться неправильно, мы её отключим.",
"input_method_experimental_input_method": "Метод ввода сообщества (экспериментальный)",
"input_method_auto_copy": "Автоматическое копирование",
"input_method_confirm_enable_remote_input": "Подтвердить включение удаленного ввода?",
"input_method_enable_remote_input_instructions": "После включения этой функции вы сможете быстро вводить текст через мобильный телефон, посетив удаленный адрес сервиса, избегая необходимости переключения окон и не прерывая игровой процесс.\n\nЕсли появится предупреждение брандмауэра, разверните окно, вручную отметьте все типы сетей и разрешите доступ, иначе функция может работать некорректно.",
"input_method_address_fetch_failed": "Не удалось получить адрес, проверьте IP компьютера вручную",
"input_method_text_cannot_be_empty": "Текст не может быть пустым!",
"input_method_send_success": "Успешно отправлено!",
"input_method_ip_address_not_found": "Мы не смогли найти подходящий IP-адрес для доступа к сервису, попробуйте следующие адреса (листайте влево/вправо)",
"input_method_scan_qr_code": "Отсканируйте QR-код с мобильного устройства или посетите ссылку вручную",
"input_method_service_qr_code": "QR-код сервиса",
"input_method_confirm_install_advanced_localization": "Подтвердить установку расширенной локализации?",
"input_method_install_community_input_method_support": "Установить поддержку метода ввода сообщества",
"input_method_community_input_method_support_version": "Поддержка метода ввода сообщества: {v0}",
"input_method_online_version_prompt": "Доступна отдельная онлайн-версия этой функции, нажмите для перехода >",
"input_method_support_updated": "Поддержка метода ввода сообщества обновлена",
"input_method_support_updated_to_version": "Поддержка метода ввода сообщества обновлена до версии: {v0}",
"input_method_auto_translate": "Двуязычный перевод:",
"input_method_auto_translate_dialog_title": "Включить двуязычный перевод?",
"input_method_auto_translate_dialog_title_content": "После включения будет использоваться сервис Google Translate для добавления английской версии к вашему тексту. Это может вызвать задержку отклика. Отключите функцию, если она работает некорректно.\n\nТекст будет отправляться на серверы Google, ознакомьтесь с политикой конфиденциальности Google.",
"support_dev_thanks_message": "Спасибо за использование SCToolbox, я разработчик - xkeyC\nSCToolbox стремится быть проектом с открытым исходным кодом и предоставлять бесплатные услуги игрокам. Бесплатное обслуживание - это сложная работа, и если вы рассматриваете возможность угостить меня напитком, я буду очень признателен.\nПожертвования будут использованы на серверные расходы, разработку новых функций и поддержание мотивации для улучшения программного обеспечения.",
"support_dev_referral_code_message": "Если вы еще не зарегистрировались в игре или не ввели реферальный код, рассмотрите мой: STAR-3YXS-SWTC, спасибо что дочитали до конца",
"support_dev_title": "Поддержать разработчика",
"support_dev_github_star_message": "Вы также можете поставить звезду моему проекту на GitHub",
"support_dev_github_star_button": "Поставить звезду проекту",
"support_dev_in_game_currency_title": "Внутриигровая валюта",
"support_dev_in_game_id": "Игровой ID: xkeyC",
"support_dev_in_game_id_copied": "Игровой ID скопирован",
"support_dev_copy_button": "Копировать",
"support_dev_in_game_currency_message": "Вы можете отправить мне aUEC в игре в качестве поддержки, это поможет мне получить лучший игровой опыт в ограниченное время",
"support_dev_alipay": "Alipay",
"support_dev_wechat": "WeChat",
"support_dev_donation_disclaimer": "* Обратите внимание: пожертвования являются безвозмездными, вы не получите дополнительных преимуществ в программе.",
"support_dev_back_button": "Назад",
"support_dev_scroll_hint": "Прокрутите вниз для просмотра",
"log_analyzer_filter_all": "Все",
"log_analyzer_filter_basic_info": "Основная информация",
"log_analyzer_filter_account_related": "Связанное с аккаунтом",
"log_analyzer_filter_fatal_collision": "Фатальные столкновения",
"log_analyzer_filter_vehicle_damaged": "Повреждения техники",
"log_analyzer_filter_character_death": "Смерть персонажа",
"log_analyzer_filter_statistics": "Статистика",
"log_analyzer_filter_game_crash": "Сбой игры",
"log_analyzer_filter_local_inventory": "Локальный инвентарь",
"log_analyzer_no_log_file": "Файл логов не найден",
"log_analyzer_one_click_diagnosis_header": "----- Экспресс-диагностика SCToolbox -----",
"log_analyzer_details_info": "Подробная информация: {v0}",
"log_analyzer_no_crash_detected": "Сбои игры не обнаружены",
"log_analyzer_game_crash": "Сбой игры ",
"log_analyzer_kill_summary": "Сводка убийств",
"log_analyzer_kill_death_suicide_count": "Убийства: {v0} Смерти: {v1} Самоубийства: {v2} \nУничтожение техники (Мягкая смерть): {v3} Уничтожение техники (Распад): {v4}",
"log_analyzer_play_time": "Время игры",
"log_analyzer_play_time_format": "{v0} часов {v1} минут {v2} секунд",
"log_analyzer_game_start": "Запуск игры",
"log_analyzer_game_loading": "Загрузка игры",
"log_analyzer_mode_loading_time": "Режим: {v0} Время: {v1} секунд",
"log_analyzer_game_close": "Закрытие игры",
"log_analyzer_collision_details": "Зона: {v0} Управление игроком: {v1} Объект столкновения: {v2} \nТехника столкновения: {v3} Дистанция столкновения: {v4} ",
"log_analyzer_soft_death": "Мягкая смерть",
"log_analyzer_disintegration": "Дезинтеграция",
"log_analyzer_vehicle_damage_details": "Модель техники: {v0} \nЗона: {v1} \nУровень повреждения: {v2} ({v3}) Виновник: {v4}",
"log_analyzer_death_details": "ID жертвы: {v0} Причина смерти: {v1} \nID убийцы: {v2} \nЗона: {v3}",
"log_analyzer_player_login": "Игрок {v0} входит в игру...",
"log_analyzer_view_local_inventory": "Просмотр локального инвентаря",
"log_analyzer_player_location": "ID игрока: {v0} Местоположение: {v1}",
"log_analyzer_game_installation_path": "Путь установки игры",
"log_analyzer_select_game_path": "Выберите путь установки игры",
"log_analyzer_search_placeholder": "Введите ключевые слова для поиска",
"log_analyzer_title": "Анализатор логов",
"log_analyzer_description": "Анализ ваших игровых записей (логин, смерти, убийства и другая информация)",
"log_analyzer_window_title": "SCToolbox: Анализатор логов"
}

Some files were not shown because too many files have changed in this diff Show More