mirror of
https://ghfast.top/https://github.com/StarCitizenToolBox/app.git
synced 2025-05-10 17:51:24 +08:00
Compare commits
No commits in common. "main" and "2.10.2" have entirely different histories.
71
.github/workflows/windows_nightly.yml
vendored
71
.github/workflows/windows_nightly.yml
vendored
@ -1,71 +0,0 @@
|
||||
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
7
.gitignore
vendored
@ -42,9 +42,6 @@ app.*.map.json
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
/pubspec.lock
|
||||
/rust/target/
|
||||
/lib/generated/l10n_temp.json
|
||||
/lib/generated/l10n_temp_fix.json
|
||||
|
||||
# FVM Version Cache
|
||||
.fvm/
|
||||
/rust/Cargo.lock
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -0,0 +1,3 @@
|
||||
[submodule "windows/corrosion"]
|
||||
path = windows/corrosion
|
||||
url = https://github.com/corrosion-rs/corrosion.git
|
29
.metadata
29
.metadata
@ -1,11 +1,11 @@
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
# This file should be version controlled.
|
||||
|
||||
version:
|
||||
revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3"
|
||||
channel: "stable"
|
||||
revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf
|
||||
channel: stable
|
||||
|
||||
project_type: app
|
||||
|
||||
@ -13,26 +13,11 @@ project_type: app
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
|
||||
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
|
||||
create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf
|
||||
base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf
|
||||
- platform: windows
|
||||
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
|
||||
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
|
||||
create_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf
|
||||
base_revision: 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf
|
||||
|
||||
# User provided section
|
||||
|
||||
|
65
.vscode/launch.json
vendored
65
.vscode/launch.json
vendored
@ -1,65 +0,0 @@
|
||||
{
|
||||
// 使用 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"
|
||||
}
|
||||
]
|
||||
}
|
27
README.md
27
README.md
@ -1,14 +1,10 @@
|
||||
# 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)
|
||||
|
||||
该工具为 星际公民玩家 提供 一键诊断,官网及工具网站汉化,游戏汉化,游戏性能优化 等功能,致力于带来更愉快的游戏体验。
|
||||
|
||||
[](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml) [](http://translate.42kit.com/engage/sctoolbox/)
|
||||
该工具为 星际公民玩家 提供 一键诊断,官网及工具网站汉化,游戏汉化,游戏性能优化 等功能,给您带来更愉快的游戏体验。
|
||||
|
||||
[](https://apps.microsoft.com/detail/9NF3SWFWNKL1?launch=true)
|
||||
|
||||
### ✨ 功能
|
||||
### 功能
|
||||
- 本地化管理:一键安装社区汉化,切换语言
|
||||
- 一键诊断:来自上百名小白鼠用户的日志文件,可处理星际公民常见问题
|
||||
- 网站汉化:为星际公民官网,星际公民工具网站提供人工精翻(感谢星际公民中文百科项目),亦提供[浏览器拓展(Github)](https://github.com/xkeyC/StarCitizenBoxBrowserEx )。
|
||||
@ -17,14 +13,9 @@
|
||||
- 其他常用工具:包括 p4k分流下载,清理着色器,重装EAC等多种功能在内的工具箱。
|
||||
|
||||
### 📸 屏幕截图
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
### ❤️ 鸣谢
|
||||
|
||||
特别感谢 [Visual Studio Code](https://code.visualstudio.com/) 提供免费的开发工具。
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
31
README_en.md
31
README_en.md
@ -1,31 +0,0 @@
|
||||
# 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.
|
||||
|
||||
[](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml)
|
||||
|
||||
[](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
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### ❤️ Thanks
|
||||
|
||||
Special thanks to [Visual Studio Code](https://code.visualstudio.com/) for providing free development tools.
|
@ -1,31 +0,0 @@
|
||||
# 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)
|
||||
|
||||
這個工具能為星際公民玩家提供疑難排解、官方網站及工具網站的中文翻譯、遊戲文本在地化翻譯、效能最佳化/畫面改善等功能,讓您獲得更愉快的遊戲體驗。
|
||||
|
||||
[](https://github.com/StarCitizenToolBox/app/actions/workflows/windows_nightly.yml) [](http://translate.42kit.com/engage/sctoolbox/)
|
||||
|
||||
[](https://apps.microsoft.com/detail/9NF3SWFWNKL1?launch=true)
|
||||
|
||||
|
||||
### ✨ 功能
|
||||
- 社群在地化翻譯管理:一鍵即可快速完成社群翻譯安裝與切換遊戲語言
|
||||
- 疑難排解:來自上百名小白鼠使用者的日誌文件,可處理常見的星際公民遊戲問題
|
||||
- 網站中文翻譯:為星際公民官方網站及工具網站提供人工精翻 (感謝星際公民中文百科計畫),亦提供[瀏覽器擴充套件 (Github)](https://github.com/xkeyC/StarCitizenBoxBrowserEx )。
|
||||
- 效能最佳化/畫面改善:為星際公民遊戲增加更細緻的效能參數調整,能夠用於改善遊戲效能,也可以用於獲得更好的畫質。
|
||||
- 伺服器狀態指示器:比官方啟動器早了幾個小時增加了伺服器狀態指示功能,且指示的更為細緻。
|
||||
- 其他常用工具:包括 p4k 分流下載,著色器快取清理,重新安裝 EAC 反外掛軟體等多種功能在內的工具箱。
|
||||
|
||||
### 📸 螢幕截圖
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### ❤️ 鳴謝
|
||||
|
||||
特別感謝 [Visual Studio Code](https://code.visualstudio.com/) 提供的免費開發工具。
|
@ -26,13 +26,5 @@ linter:
|
||||
# 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
|
||||
# https://dart.dev/guides/language/analysis-options
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 59 KiB |
Binary file not shown.
Before Width: | Height: | Size: 58 KiB |
322
assets/performance.json
Normal file
322
assets/performance.json
Normal file
@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"key": "r_ssdo",
|
||||
"name": "屏幕光线后处理",
|
||||
"info": "调整光线后处理等级",
|
||||
"type": "int",
|
||||
"max": 2,
|
||||
"min": 0,
|
||||
"value": 1,
|
||||
"group": "图形(修改后建议清理着色器)"
|
||||
},
|
||||
{
|
||||
"key": "r_AntialiasingMode",
|
||||
"name": "抗锯齿",
|
||||
"info": "0 关闭,1 SMAA,2 时间过滤+SMAA,3 时间滤波和投影矩阵抖动的 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_ShaderPostProcess",
|
||||
"name": "着色器质量",
|
||||
"info": "",
|
||||
"type": "int",
|
||||
"max": 3,
|
||||
"min": 0,
|
||||
"value": 3,
|
||||
"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": "sys_maxFps",
|
||||
"name": "最大帧率",
|
||||
"info": "调整游戏最高帧率,0为不限制",
|
||||
"type": "int",
|
||||
"max": 300,
|
||||
"min": 0,
|
||||
"value": 0,
|
||||
"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": "设置"
|
||||
},
|
||||
{
|
||||
"key": "customize",
|
||||
"name": "自定义参数",
|
||||
"info": "",
|
||||
"type": "customize",
|
||||
"max": 1,
|
||||
"min": 0,
|
||||
"value": 1,
|
||||
"group": "自定义"
|
||||
}
|
||||
]
|
@ -1 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,53 +0,0 @@
|
||||
<!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>
|
@ -1,56 +0,0 @@
|
||||
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
Binary file not shown.
@ -1,23 +0,0 @@
|
||||
/* 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
@ -51,7 +51,7 @@ function WebLocalizationUpdateReplaceWords(w, b) {
|
||||
let replaceWords = w.sort(function (a, b) {
|
||||
return b.word.length - a.word.length;
|
||||
});
|
||||
replaceWords.forEach(({ word, replacement }) => {
|
||||
replaceWords.forEach(({word, replacement}) => {
|
||||
SCLocalizationReplaceLocalesMap[word] = replacement;
|
||||
});
|
||||
if (window.location.hostname.startsWith("issue-council.robertsspaceindustries.com")) {
|
||||
@ -197,6 +197,8 @@ function GetSCLocalizationTranslateString(txtSrc) {
|
||||
return txtSrc
|
||||
}
|
||||
|
||||
InitWebLocalization();
|
||||
|
||||
function ReportUnTranslate(k, v) {
|
||||
|
||||
if (enable_webview_localization_capture) {
|
||||
@ -207,7 +209,7 @@ function ReportUnTranslate(k, v) {
|
||||
const jsRegex = /(?:^|[^<])<script[^>]*>[\s\S]*?<\/script>(?:[^>]|$)/i;
|
||||
if (k.trim() !== "" && !cnPattern.test(k) && !htmlPattern.test(k) && !cssRegex.test(k) && !jsRegex.test(k)
|
||||
&& enPattern.test(k) && !k.startsWith("http://") && !k.startsWith("https://")) {
|
||||
window.chrome.webview.postMessage({ action: 'webview_localization_capture', key: k, value: v });
|
||||
window.chrome.webview.postMessage({action: 'webview_localization_capture', key: k, value: v});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -219,28 +221,46 @@ InitWebLocalization();
|
||||
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' });
|
||||
if (window.location.href.startsWith("https://robertsspaceindustries.com/connect")) {
|
||||
$(function () {
|
||||
$('#email').on('input', function () {
|
||||
let inputEmail = $('#email').val()
|
||||
sessionStorage.setItem('inputEmail', inputEmail);
|
||||
});
|
||||
$('#password').on('input', function () {
|
||||
let inputPassword = $('#password').val()
|
||||
sessionStorage.setItem('inputPassword', inputPassword);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// check login
|
||||
let r = await fetch("api/launcher/v3/account/check", {
|
||||
method: 'POST', headers: {
|
||||
'x-rsi-token': $.cookie('Rsi-Token'),
|
||||
},
|
||||
});
|
||||
if (r.status !== 200) {
|
||||
// wait login
|
||||
window.chrome.webview.postMessage({action: 'webview_rsi_login_show_window'});
|
||||
return;
|
||||
}
|
||||
|
||||
SCTShowToast("登录游戏中...");
|
||||
|
||||
// get claims
|
||||
let claimsR = await fetch("https://robertsspaceindustries.com/api/launcher/v3/games/claims", {
|
||||
let claimsR = await fetch("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", {
|
||||
let tokenR = await fetch("api/launcher/v3/games/token", {
|
||||
method: 'POST', headers: {
|
||||
'x-rsi-token': $.cookie('Rsi-Token'),
|
||||
},
|
||||
@ -257,7 +277,7 @@ async function getRSILauncherToken(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", {
|
||||
let releaseR = await fetch("api/launcher/v3/games/release", {
|
||||
method: 'POST', headers: {
|
||||
'x-rsi-token': $.cookie('Rsi-Token'),
|
||||
},
|
||||
@ -266,20 +286,11 @@ async function getRSILauncherToken(channelId) {
|
||||
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");
|
||||
let $avatarElement = $(".c-account-sidebar__profile-metas-avatar");
|
||||
let avatarUrl = $avatarElement.css("background-image");
|
||||
|
||||
//post message
|
||||
// post message
|
||||
window.chrome.webview.postMessage({
|
||||
action: 'webview_rsi_login_success', data: {
|
||||
'webToken': $.cookie('Rsi-Token'),
|
||||
@ -287,7 +298,25 @@ async function getRSILauncherToken(channelId) {
|
||||
'authToken': TokenData,
|
||||
'releaseInfo': releaseDataJson,
|
||||
"avatar": avatarUrl,
|
||||
'libraryData': libraryData,
|
||||
"inputEmail": sessionStorage.getItem("inputEmail"),
|
||||
"inputPassword": sessionStorage.getItem("inputPassword")
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function RSIAutoLogin(email, pwd) {
|
||||
if (!window.location.href.includes("robertsspaceindustries.com")) return;
|
||||
$(function () {
|
||||
if (email !== "") {
|
||||
$('#email').val(email)
|
||||
}
|
||||
if (pwd !== "") {
|
||||
$('#password').val(pwd)
|
||||
}
|
||||
sessionStorage.setItem('inputPassword', '');
|
||||
if (email !== "" && pwd !== "") {
|
||||
$("#remember").prop("checked", true);
|
||||
$('.c-form__submit-button-label').click();
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -305,4 +334,5 @@ function SCTShowToast(message) {
|
||||
document.body.removeChild(m)
|
||||
}, d * 1000);
|
||||
}, 3500);
|
||||
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
rust_input: rust/src/api/**/*.rs
|
||||
dart_output: lib/common/rust/
|
||||
full_dep: true
|
||||
web: false
|
@ -1,32 +1,20 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
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';
|
||||
import 'package:starcitizen_doctor/common/utils/base_utils.dart';
|
||||
|
||||
class AnalyticsApi {
|
||||
static final Dio _dio = Dio();
|
||||
|
||||
static touch(String key) async {
|
||||
if (kDebugMode || kProfileMode) {
|
||||
dPrint("AnalyticsApi.touch === $key skip");
|
||||
return;
|
||||
}
|
||||
// debug 不统计
|
||||
if (kDebugMode) 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}");
|
||||
await _dio.post("${URLConf.xkeycApiUrl}/analytics/$key");
|
||||
dPrint("AnalyticsApi.touch === $key over");
|
||||
} 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;
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,16 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:dio/dio.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_torrent_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';
|
||||
|
||||
class Api {
|
||||
static final dio =
|
||||
Dio(BaseOptions(connectTimeout: const Duration(seconds: 10)));
|
||||
|
||||
static Future<AppVersionData> getAppVersion() async {
|
||||
return AppVersionData.fromJson(
|
||||
await getRepoJson("sc_doctor", "version.json"));
|
||||
@ -36,9 +36,9 @@ class Api {
|
||||
|
||||
static Future<Map<String, dynamic>> getAppReleaseDataByVersionName(
|
||||
String version) async {
|
||||
final r = await RSHttp.getText(
|
||||
"${URLConf.gitlabApiPath}repos/SCToolBox/Release/releases/tags/$version");
|
||||
return json.decode(r);
|
||||
final r = await dio
|
||||
.get("${URLConf.gitlabApiPath}/repos/SCToolBox/Release/releases/tags/$version");
|
||||
return r.data;
|
||||
}
|
||||
|
||||
static Future<List<ScLocalizationData>> getScLocalizationData(
|
||||
@ -53,37 +53,10 @@ class Api {
|
||||
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 {
|
||||
final r = await RSHttp.getText(
|
||||
"https://status.robertsspaceindustries.com/index.json");
|
||||
final map = json.decode(r);
|
||||
return map["systems"];
|
||||
final r =
|
||||
await dio.get("https://status.robertsspaceindustries.com/index.json");
|
||||
return r.data["systems"];
|
||||
}
|
||||
|
||||
static Future<Map<String, dynamic>> getRepoJson(
|
||||
@ -92,33 +65,8 @@ class Api {
|
||||
return json.decode(data);
|
||||
}
|
||||
|
||||
static Future<String> getRepoData(String dir, String name) async {
|
||||
final r = await RSHttp.getText("${URLConf.apiRepoPath}/$dir/$name",
|
||||
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;
|
||||
static Future getRepoData(String dir, String name) async {
|
||||
final r = await dio.get("${URLConf.apiRepoPath}/$dir/$name");
|
||||
return r.data;
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +1,26 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dart_rss/dart_rss.dart';
|
||||
import 'package:starcitizen_doctor/common/io/rs_http.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
|
||||
|
||||
class RSSApi {
|
||||
static final _dio = Dio(BaseOptions(
|
||||
connectTimeout: const Duration(seconds: 10),
|
||||
responseType: ResponseType.plain));
|
||||
|
||||
static Future<List<RssItem>> getRssVideo() async {
|
||||
final r = await RSHttp.getText(URLConf.rssVideoUrl);
|
||||
final f = RssFeed.parse(r);
|
||||
final r = await _dio.get(URLConf.rssVideoUrl);
|
||||
final f = RssFeed.parse(r.data);
|
||||
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;
|
||||
final r1 = await _dio.get(URLConf.rssTextUrl1);
|
||||
final r1f = RssFeed.parse(r1.data);
|
||||
final r2 = await _dio.get(URLConf.rssTextUrl2);
|
||||
final r2f = RssFeed.parse(r2.data);
|
||||
final items = r1f.items..addAll(r2f.items);
|
||||
items.sort((a, b) {
|
||||
final aDate = HttpDate.parse(a.pubDate ?? "").millisecondsSinceEpoch;
|
||||
final bDate = HttpDate.parse(b.pubDate ?? "").millisecondsSinceEpoch;
|
||||
|
@ -1,14 +0,0 @@
|
||||
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
357
lib/app.dart
@ -1,357 +0,0 @@
|
||||
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;
|
||||
}
|
@ -1,473 +0,0 @@
|
||||
// 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;
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
// 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
|
211
lib/base/ui.dart
Normal file
211
lib/base/ui.dart
Normal file
@ -0,0 +1,211 @@
|
||||
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(
|
||||
{super.key, required this.uiCreate, required this.modelCreate});
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
135
lib/base/ui_model.dart
Normal file
135
lib/base/ui_model.dart
Normal file
@ -0,0 +1,135 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:grpc/grpc.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,
|
||||
bool noAlert = false}) async {
|
||||
uiErrorMsg = "";
|
||||
if (mounted) notifyListeners();
|
||||
try {
|
||||
return await requestFunc();
|
||||
} catch (e) {
|
||||
dPrint("$runtimeType.handleError Error:$e");
|
||||
String errorMsg = "Unknown Error";
|
||||
if (e is GrpcError) {
|
||||
errorMsg = "远程服务器消息: ${e.message ?? "Unknown Error"}";
|
||||
} else {
|
||||
errorMsg = e.toString();
|
||||
}
|
||||
if (showFullScreenError) {
|
||||
uiErrorMsg = errorMsg;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
if (!noAlert) {
|
||||
showToast(context!, errorOverride ?? errorMsg,
|
||||
constraints: BoxConstraints(
|
||||
maxWidth: MediaQuery.of(context!).size.width * .6,
|
||||
),
|
||||
title: "出现错误!");
|
||||
}
|
||||
}
|
||||
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,{bool create = false}) {
|
||||
if (create && _childUIModels?[modelKey] == null) {
|
||||
_getChildUIModel(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();
|
||||
}
|
||||
}
|
132
lib/common/conf/app_conf.dart
Normal file
132
lib/common/conf/app_conf.dart
Normal file
@ -0,0 +1,132 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:flutter_acrylic/flutter_acrylic.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:starcitizen_doctor/api/analytics.dart';
|
||||
import 'package:starcitizen_doctor/api/api.dart';
|
||||
import 'package:starcitizen_doctor/common/helper/system_helper.dart';
|
||||
import 'package:starcitizen_doctor/common/rust/ffi.dart';
|
||||
import 'package:starcitizen_doctor/data/app_version_data.dart';
|
||||
import 'package:starcitizen_doctor/global_ui_model.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
import '../../base/ui.dart';
|
||||
|
||||
class AppConf {
|
||||
static const String appVersion = "2.10.2 Beta";
|
||||
static const int appVersionCode = 37;
|
||||
static const String appVersionDate = "2024-01-07";
|
||||
|
||||
static const gameChannels = ["LIVE", "PTU", "EPTU"];
|
||||
|
||||
static String deviceUUID = "";
|
||||
|
||||
static late final String applicationSupportDir;
|
||||
|
||||
static AppVersionData? networkVersionData;
|
||||
|
||||
static bool offlineMode = false;
|
||||
|
||||
static late final WindowsDeviceInfo windowsDeviceInfo;
|
||||
|
||||
static Color? colorBackground;
|
||||
static Color? colorMenu;
|
||||
static Color? colorMica;
|
||||
|
||||
static const isMSE =
|
||||
String.fromEnvironment("MSE", defaultValue: "false") == "true";
|
||||
|
||||
static init(List<String> args) async {
|
||||
dPrint("launch args == $args");
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
/// init device info
|
||||
try {
|
||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||
windowsDeviceInfo = await deviceInfo.windowsInfo;
|
||||
} catch (_) {}
|
||||
|
||||
/// init Data
|
||||
applicationSupportDir =
|
||||
(await getApplicationSupportDirectory()).absolute.path;
|
||||
dPrint("applicationSupportDir == $applicationSupportDir");
|
||||
try {
|
||||
Hive.init("$applicationSupportDir/db");
|
||||
final box = await Hive.openBox("app_conf");
|
||||
if (box.get("install_id", defaultValue: "") == "") {
|
||||
await box.put("install_id", const Uuid().v4());
|
||||
AnalyticsApi.touch("firstLaunch");
|
||||
}
|
||||
deviceUUID = box.get("install_id", defaultValue: "");
|
||||
} catch (e) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/// check Rust bridge
|
||||
if (await rustFii.ping() != "PONG") {
|
||||
dPrint("Rust bridge Error");
|
||||
exit(1);
|
||||
}
|
||||
dPrint("---- rust bridge inited -----");
|
||||
await SystemHelper.initPowershellPath();
|
||||
|
||||
/// init defaultColor
|
||||
colorBackground = HexColor("#132431").withOpacity(.75);
|
||||
colorMenu = HexColor("#132431").withOpacity(.95);
|
||||
colorMica = HexColor("#0A3142");
|
||||
|
||||
/// init windows
|
||||
await windowManager.ensureInitialized();
|
||||
windowManager.waitUntilReadyToShow().then((_) async {
|
||||
await windowManager.setSize(const Size(1280, 810));
|
||||
await windowManager.setMinimumSize(const Size(1280, 810));
|
||||
await windowManager.center(animate: true);
|
||||
await windowManager.setSkipTaskbar(false);
|
||||
await windowManager.setTitleBarStyle(
|
||||
TitleBarStyle.hidden,
|
||||
windowButtonVisibility: false,
|
||||
);
|
||||
await windowManager.show();
|
||||
await Window.initialize();
|
||||
await Window.hideWindowControls();
|
||||
if (windowsDeviceInfo.productName.contains("Windows 11")) {
|
||||
await Window.setEffect(
|
||||
effect: WindowEffect.acrylic,
|
||||
);
|
||||
}
|
||||
});
|
||||
await checkUpdate();
|
||||
AnalyticsApi.touch("launch");
|
||||
}
|
||||
|
||||
static String getUpgradePath() {
|
||||
return "${AppConf.applicationSupportDir}/._upgrade";
|
||||
}
|
||||
|
||||
static Future<void> checkUpdate() async {
|
||||
// clean path
|
||||
if (!isMSE) {
|
||||
final dir = Directory(getUpgradePath());
|
||||
if (await dir.exists()) {
|
||||
dir.delete(recursive: true);
|
||||
}
|
||||
}
|
||||
try {
|
||||
networkVersionData = await Api.getAppVersion();
|
||||
globalUIModel.checkActivityThemeColor();
|
||||
if (isMSE) {
|
||||
dPrint(
|
||||
"lastVersion=${networkVersionData?.mSELastVersion} ${networkVersionData?.mSELastVersionCode}");
|
||||
} else {
|
||||
dPrint(
|
||||
"lastVersion=${networkVersionData?.lastVersion} ${networkVersionData?.lastVersionCode}");
|
||||
}
|
||||
} catch (e) {
|
||||
dPrint("_checkUpdate Error:$e");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
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;
|
||||
}
|
@ -1,114 +1,28 @@
|
||||
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 const String giteaAttachmentsUrl =
|
||||
"https://git.sctoolbox.sccsgo.com/SCToolBox/Release";
|
||||
static const String gitlabLocalizationUrl =
|
||||
"https://git.sctoolbox.sccsgo.com/SCToolBox/LocalizationData";
|
||||
static const String apiRepoPath =
|
||||
"https://git.sctoolbox.sccsgo.com/SCToolBox/api/raw/branch/main/";
|
||||
|
||||
static bool isUrlCheckPass = false;
|
||||
static const String gitlabApiPath =
|
||||
"https://git.sctoolbox.sccsgo.com/api/v1/";
|
||||
|
||||
/// URLS
|
||||
static String get giteaAttachmentsUrl => "$gitApiHome/SCToolBox/Release";
|
||||
static const String webTranslateHomeUrl =
|
||||
"https://git.sctoolbox.sccsgo.com/SCToolBox/ScWeb_Chinese_Translate/raw/branch/main/json/locales";
|
||||
|
||||
static String get gitlabLocalizationUrl =>
|
||||
"$gitApiHome/SCToolBox/LocalizationData";
|
||||
static const String xkeycApiUrl = "https://sctoolbox.xkeyc.com";
|
||||
|
||||
static String get gitApiRSILauncherEnhanceUrl =>
|
||||
"$gitApiHome/SCToolBox/RSILauncherEnhance";
|
||||
static const _rssHomeUrl = "https://rss.sctoolbox.sccsgo.com";
|
||||
|
||||
static String get apiRepoPath => "$gitApiHome/SCToolBox/api/raw/branch/main";
|
||||
static const rssVideoUrl =
|
||||
"$_rssHomeUrl/bilibili/user/channel/27976358/290653";
|
||||
|
||||
static String get gitlabApiPath => "$gitApiHome/api/v1/";
|
||||
static const rssTextUrl1 = "$_rssHomeUrl/bilibili/user/article/40102960";
|
||||
static const rssTextUrl2 =
|
||||
"$_rssHomeUrl/baidu/tieba/user/%E7%81%AC%E7%81%ACG%E7%81%AC%E7%81%AC&";
|
||||
|
||||
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;
|
||||
}
|
||||
static const feedbackUrl = "https://txc.qq.com/products/614843";
|
||||
static const devReleaseUrl = "https://git.sctoolbox.sccsgo.com/SCToolBox/Release/releases";
|
||||
}
|
||||
|
48
lib/common/grpc/party_room_server.dart
Normal file
48
lib/common/grpc/party_room_server.dart
Normal file
@ -0,0 +1,48 @@
|
||||
import 'package:fixnum/fixnum.dart';
|
||||
import 'package:grpc/grpc.dart';
|
||||
import 'package:starcitizen_doctor/generated/grpc/party_room_server/index.pbgrpc.dart';
|
||||
|
||||
class PartyRoomGrpcServer {
|
||||
static const clientVersion = 0;
|
||||
static final _channel = ClientChannel(
|
||||
"127.0.0.1",
|
||||
port: 39399,
|
||||
options: ChannelOptions(
|
||||
credentials: const ChannelCredentials.insecure(),
|
||||
codecRegistry:
|
||||
CodecRegistry(codecs: const [GzipCodec(), IdentityCodec()]),
|
||||
),
|
||||
);
|
||||
|
||||
static final _indexService = IndexServiceClient(_channel);
|
||||
|
||||
static Future<PingData> pingServer() async {
|
||||
final r = await _indexService.pingServer(PingData(
|
||||
data: "PING", clientVersion: Int64.parseInt(clientVersion.toString())));
|
||||
return r;
|
||||
}
|
||||
|
||||
static Future<RoomTypesData> getRoomTypes() async {
|
||||
final r = await _indexService.getRoomTypes(Empty());
|
||||
return r;
|
||||
}
|
||||
|
||||
static Future<RoomListData> getRoomList(RoomListPageReqData req) async {
|
||||
return await _indexService.getRoomList(req);
|
||||
}
|
||||
|
||||
static Future<RoomData> createRoom(RoomData roomData) async {
|
||||
return await _indexService.createRoom(roomData);
|
||||
}
|
||||
|
||||
static Future<RoomData?> touchUserRoom(String userName, String deviceUUID) {
|
||||
return _indexService
|
||||
.touchUser(PreUser(userName: userName, deviceUUID: deviceUUID));
|
||||
}
|
||||
|
||||
static ResponseStream<RoomUpdateMessage> joinRoom(
|
||||
String roomID, String userName, String deviceUUID) {
|
||||
return _indexService.joinRoom(
|
||||
PreUser(roomID: roomID, userName: userName, deviceUUID: deviceUUID));
|
||||
}
|
||||
}
|
@ -1,13 +1,12 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:starcitizen_doctor/common/conf/conf.dart';
|
||||
import 'package:starcitizen_doctor/common/utils/log.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
import '../utils/base_utils.dart';
|
||||
|
||||
class SCLoggerHelper {
|
||||
static Future<String?> getLogFilePath() async {
|
||||
if (!Platform.isWindows) return null;
|
||||
Map<String, String> envVars = Platform.environment;
|
||||
final appDataPath = envVars["appdata"];
|
||||
if (appDataPath == null) {
|
||||
@ -31,16 +30,19 @@ class SCLoggerHelper {
|
||||
}
|
||||
|
||||
static Future<List?> getLauncherLogList() async {
|
||||
if (!Platform.isWindows) return [];
|
||||
try {
|
||||
final jsonLogPath = await getLogFilePath();
|
||||
if (jsonLogPath == null) throw "no file path";
|
||||
var jsonString = utf8.decode(await File(jsonLogPath).readAsBytes());
|
||||
return jsonString.split("\n");
|
||||
} catch (e) {
|
||||
dPrint(e);
|
||||
return [];
|
||||
final jsonLogPath = await getLogFilePath();
|
||||
if (jsonLogPath == null) return null;
|
||||
var jsonString = utf8.decode(await File(jsonLogPath).readAsBytes());
|
||||
if (jsonString.endsWith("\n")) {
|
||||
jsonString = jsonString.substring(0, jsonString.length - 3);
|
||||
}
|
||||
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,
|
||||
@ -49,8 +51,6 @@ class SCLoggerHelper {
|
||||
List<String> scInstallPaths = [];
|
||||
|
||||
checkAndAddPath(String path, bool checkExists) async {
|
||||
// 将所有连续的 \\ 替换为 \
|
||||
path = path.replaceAll(RegExp(r'\\+'), "\\");
|
||||
if (path.isNotEmpty && !scInstallPaths.contains(path)) {
|
||||
if (!checkExists) {
|
||||
dPrint("find installPath == $path");
|
||||
@ -73,29 +73,20 @@ class SCLoggerHelper {
|
||||
|
||||
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);
|
||||
}
|
||||
final m = listData[i];
|
||||
final info = m["[browser][info] "];
|
||||
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(")", "");
|
||||
}
|
||||
await checkAndAddPath(installPath, checkExists);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -104,90 +95,21 @@ class SCLoggerHelper {
|
||||
if (scInstallPaths.isEmpty) rethrow;
|
||||
}
|
||||
|
||||
if (scInstallPaths.isNotEmpty) {
|
||||
// 动态检测更多位置
|
||||
for (var v in withVersion) {
|
||||
for (var fileName in List.from(scInstallPaths)) {
|
||||
if (fileName.toString().endsWith(v)) {
|
||||
for (var nv in withVersion) {
|
||||
final nextName =
|
||||
"${fileName.toString().replaceAll("\\$v", "")}\\$nv";
|
||||
await checkAndAddPath(nextName, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,15 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:starcitizen_doctor/common/utils/log.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:starcitizen_doctor/common/utils/base_utils.dart';
|
||||
|
||||
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) {
|
||||
var result = await Process.run(powershellPath, ["echo", "ping"]);
|
||||
if (!result.stdout.toString().startsWith("ping") &&
|
||||
powershellPath == "powershell.exe") {
|
||||
Map<String, String> envVars = Platform.environment;
|
||||
final systemRoot = envVars["SYSTEMROOT"];
|
||||
if (systemRoot != null) {
|
||||
@ -21,6 +17,7 @@ class SystemHelper {
|
||||
"$systemRoot\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
|
||||
dPrint("auto search powershell path === $autoSearchPath");
|
||||
powershellPath = autoSearchPath;
|
||||
initPowershellPath();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -82,14 +79,11 @@ class SystemHelper {
|
||||
}
|
||||
|
||||
/// 获取 RSI 启动器 目录
|
||||
static Future<String> getRSILauncherPath({bool skipEXE = false}) async {
|
||||
static Future<String> getRSILauncherPath() 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;
|
||||
}
|
||||
}
|
||||
@ -105,9 +99,6 @@ class SystemHelper {
|
||||
]);
|
||||
if (r.stdout.toString().contains("RSI Launcher.exe")) {
|
||||
final start = r.stdout.toString().split("RSI Launcher.exe");
|
||||
if (skipEXE) {
|
||||
return start[0];
|
||||
}
|
||||
return "${start[0]}RSI Launcher.exe";
|
||||
}
|
||||
}
|
||||
@ -260,21 +251,4 @@ foreach ($adapter in $adapterMemory) {
|
||||
.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";
|
||||
}
|
||||
}
|
||||
|
@ -1,46 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
// 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;
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
// 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,
|
||||
;
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
// 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,
|
||||
;
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
// 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);
|
67
lib/common/rust/bridge_definitions.dart
Normal file
67
lib/common/rust/bridge_definitions.dart
Normal file
@ -0,0 +1,67 @@
|
||||
// AUTO GENERATED FILE, DO NOT EDIT.
|
||||
// Generated by `flutter_rust_bridge`@ 1.82.3.
|
||||
// ignore_for_file: non_constant_identifier_names, unused_element, duplicate_ignore, directives_ordering, curly_braces_in_flow_control_structures, unnecessary_lambdas, slash_for_doc_comments, prefer_const_literals_to_create_immutables, implicit_dynamic_list_literal, duplicate_import, unused_import, unnecessary_import, prefer_single_quotes, prefer_const_constructors, use_super_parameters, always_use_package_imports, annotate_overrides, invalid_use_of_protected_member, constant_identifier_names, invalid_use_of_internal_member, prefer_is_empty, unnecessary_const
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:async';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart' hide protected;
|
||||
|
||||
part 'bridge_definitions.freezed.dart';
|
||||
|
||||
abstract class Rust {
|
||||
Future<String> ping({dynamic hint});
|
||||
|
||||
FlutterRustBridgeTaskConstMeta get kPingConstMeta;
|
||||
|
||||
Stream<DownloadCallbackData> startDownload(
|
||||
{required String url,
|
||||
required String savePath,
|
||||
required String fileName,
|
||||
required int connectionCount,
|
||||
dynamic hint});
|
||||
|
||||
FlutterRustBridgeTaskConstMeta get kStartDownloadConstMeta;
|
||||
|
||||
Future<void> cancelDownload({required String id, dynamic hint});
|
||||
|
||||
FlutterRustBridgeTaskConstMeta get kCancelDownloadConstMeta;
|
||||
}
|
||||
|
||||
class DownloadCallbackData {
|
||||
final String id;
|
||||
final int total;
|
||||
final int progress;
|
||||
final int speed;
|
||||
final MyDownloaderStatus status;
|
||||
|
||||
const DownloadCallbackData({
|
||||
required this.id,
|
||||
required this.total,
|
||||
required this.progress,
|
||||
required this.speed,
|
||||
required this.status,
|
||||
});
|
||||
}
|
||||
|
||||
@freezed
|
||||
sealed class MyDownloaderStatus with _$MyDownloaderStatus {
|
||||
const factory MyDownloaderStatus.noStart() = MyDownloaderStatus_NoStart;
|
||||
const factory MyDownloaderStatus.running() = MyDownloaderStatus_Running;
|
||||
const factory MyDownloaderStatus.pending(
|
||||
MyNetworkItemPendingType field0,
|
||||
) = MyDownloaderStatus_Pending;
|
||||
const factory MyDownloaderStatus.error(
|
||||
String field0,
|
||||
) = MyDownloaderStatus_Error;
|
||||
const factory MyDownloaderStatus.finished() = MyDownloaderStatus_Finished;
|
||||
}
|
||||
|
||||
enum MyNetworkItemPendingType {
|
||||
QueueUp,
|
||||
Starting,
|
||||
Stopping,
|
||||
Initializing,
|
||||
}
|
778
lib/common/rust/bridge_definitions.freezed.dart
Normal file
778
lib/common/rust/bridge_definitions.freezed.dart
Normal file
@ -0,0 +1,778 @@
|
||||
// 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 'bridge_definitions.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#custom-getters-and-methods');
|
||||
|
||||
/// @nodoc
|
||||
mixin _$MyDownloaderStatus {
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function() noStart,
|
||||
required TResult Function() running,
|
||||
required TResult Function(MyNetworkItemPendingType field0) pending,
|
||||
required TResult Function(String field0) error,
|
||||
required TResult Function() finished,
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function()? noStart,
|
||||
TResult? Function()? running,
|
||||
TResult? Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult? Function(String field0)? error,
|
||||
TResult? Function()? finished,
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function()? noStart,
|
||||
TResult Function()? running,
|
||||
TResult Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult Function(String field0)? error,
|
||||
TResult Function()? finished,
|
||||
required TResult orElse(),
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(MyDownloaderStatus_NoStart value) noStart,
|
||||
required TResult Function(MyDownloaderStatus_Running value) running,
|
||||
required TResult Function(MyDownloaderStatus_Pending value) pending,
|
||||
required TResult Function(MyDownloaderStatus_Error value) error,
|
||||
required TResult Function(MyDownloaderStatus_Finished value) finished,
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult? Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult? Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult? Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult? Function(MyDownloaderStatus_Finished value)? finished,
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult Function(MyDownloaderStatus_Finished value)? finished,
|
||||
required TResult orElse(),
|
||||
}) =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $MyDownloaderStatusCopyWith<$Res> {
|
||||
factory $MyDownloaderStatusCopyWith(
|
||||
MyDownloaderStatus value, $Res Function(MyDownloaderStatus) then) =
|
||||
_$MyDownloaderStatusCopyWithImpl<$Res, MyDownloaderStatus>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$MyDownloaderStatusCopyWithImpl<$Res, $Val extends MyDownloaderStatus>
|
||||
implements $MyDownloaderStatusCopyWith<$Res> {
|
||||
_$MyDownloaderStatusCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$MyDownloaderStatus_NoStartImplCopyWith<$Res> {
|
||||
factory _$$MyDownloaderStatus_NoStartImplCopyWith(
|
||||
_$MyDownloaderStatus_NoStartImpl value,
|
||||
$Res Function(_$MyDownloaderStatus_NoStartImpl) then) =
|
||||
__$$MyDownloaderStatus_NoStartImplCopyWithImpl<$Res>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$MyDownloaderStatus_NoStartImplCopyWithImpl<$Res>
|
||||
extends _$MyDownloaderStatusCopyWithImpl<$Res,
|
||||
_$MyDownloaderStatus_NoStartImpl>
|
||||
implements _$$MyDownloaderStatus_NoStartImplCopyWith<$Res> {
|
||||
__$$MyDownloaderStatus_NoStartImplCopyWithImpl(
|
||||
_$MyDownloaderStatus_NoStartImpl _value,
|
||||
$Res Function(_$MyDownloaderStatus_NoStartImpl) _then)
|
||||
: super(_value, _then);
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$MyDownloaderStatus_NoStartImpl implements MyDownloaderStatus_NoStart {
|
||||
const _$MyDownloaderStatus_NoStartImpl();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'MyDownloaderStatus.noStart()';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(dynamic other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$MyDownloaderStatus_NoStartImpl);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function() noStart,
|
||||
required TResult Function() running,
|
||||
required TResult Function(MyNetworkItemPendingType field0) pending,
|
||||
required TResult Function(String field0) error,
|
||||
required TResult Function() finished,
|
||||
}) {
|
||||
return noStart();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function()? noStart,
|
||||
TResult? Function()? running,
|
||||
TResult? Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult? Function(String field0)? error,
|
||||
TResult? Function()? finished,
|
||||
}) {
|
||||
return noStart?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function()? noStart,
|
||||
TResult Function()? running,
|
||||
TResult Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult Function(String field0)? error,
|
||||
TResult Function()? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (noStart != null) {
|
||||
return noStart();
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(MyDownloaderStatus_NoStart value) noStart,
|
||||
required TResult Function(MyDownloaderStatus_Running value) running,
|
||||
required TResult Function(MyDownloaderStatus_Pending value) pending,
|
||||
required TResult Function(MyDownloaderStatus_Error value) error,
|
||||
required TResult Function(MyDownloaderStatus_Finished value) finished,
|
||||
}) {
|
||||
return noStart(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult? Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult? Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult? Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult? Function(MyDownloaderStatus_Finished value)? finished,
|
||||
}) {
|
||||
return noStart?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult Function(MyDownloaderStatus_Finished value)? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (noStart != null) {
|
||||
return noStart(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyDownloaderStatus_NoStart implements MyDownloaderStatus {
|
||||
const factory MyDownloaderStatus_NoStart() = _$MyDownloaderStatus_NoStartImpl;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$MyDownloaderStatus_RunningImplCopyWith<$Res> {
|
||||
factory _$$MyDownloaderStatus_RunningImplCopyWith(
|
||||
_$MyDownloaderStatus_RunningImpl value,
|
||||
$Res Function(_$MyDownloaderStatus_RunningImpl) then) =
|
||||
__$$MyDownloaderStatus_RunningImplCopyWithImpl<$Res>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$MyDownloaderStatus_RunningImplCopyWithImpl<$Res>
|
||||
extends _$MyDownloaderStatusCopyWithImpl<$Res,
|
||||
_$MyDownloaderStatus_RunningImpl>
|
||||
implements _$$MyDownloaderStatus_RunningImplCopyWith<$Res> {
|
||||
__$$MyDownloaderStatus_RunningImplCopyWithImpl(
|
||||
_$MyDownloaderStatus_RunningImpl _value,
|
||||
$Res Function(_$MyDownloaderStatus_RunningImpl) _then)
|
||||
: super(_value, _then);
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$MyDownloaderStatus_RunningImpl implements MyDownloaderStatus_Running {
|
||||
const _$MyDownloaderStatus_RunningImpl();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'MyDownloaderStatus.running()';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(dynamic other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$MyDownloaderStatus_RunningImpl);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function() noStart,
|
||||
required TResult Function() running,
|
||||
required TResult Function(MyNetworkItemPendingType field0) pending,
|
||||
required TResult Function(String field0) error,
|
||||
required TResult Function() finished,
|
||||
}) {
|
||||
return running();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function()? noStart,
|
||||
TResult? Function()? running,
|
||||
TResult? Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult? Function(String field0)? error,
|
||||
TResult? Function()? finished,
|
||||
}) {
|
||||
return running?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function()? noStart,
|
||||
TResult Function()? running,
|
||||
TResult Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult Function(String field0)? error,
|
||||
TResult Function()? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (running != null) {
|
||||
return running();
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(MyDownloaderStatus_NoStart value) noStart,
|
||||
required TResult Function(MyDownloaderStatus_Running value) running,
|
||||
required TResult Function(MyDownloaderStatus_Pending value) pending,
|
||||
required TResult Function(MyDownloaderStatus_Error value) error,
|
||||
required TResult Function(MyDownloaderStatus_Finished value) finished,
|
||||
}) {
|
||||
return running(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult? Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult? Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult? Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult? Function(MyDownloaderStatus_Finished value)? finished,
|
||||
}) {
|
||||
return running?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult Function(MyDownloaderStatus_Finished value)? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (running != null) {
|
||||
return running(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyDownloaderStatus_Running implements MyDownloaderStatus {
|
||||
const factory MyDownloaderStatus_Running() = _$MyDownloaderStatus_RunningImpl;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$MyDownloaderStatus_PendingImplCopyWith<$Res> {
|
||||
factory _$$MyDownloaderStatus_PendingImplCopyWith(
|
||||
_$MyDownloaderStatus_PendingImpl value,
|
||||
$Res Function(_$MyDownloaderStatus_PendingImpl) then) =
|
||||
__$$MyDownloaderStatus_PendingImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({MyNetworkItemPendingType field0});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$MyDownloaderStatus_PendingImplCopyWithImpl<$Res>
|
||||
extends _$MyDownloaderStatusCopyWithImpl<$Res,
|
||||
_$MyDownloaderStatus_PendingImpl>
|
||||
implements _$$MyDownloaderStatus_PendingImplCopyWith<$Res> {
|
||||
__$$MyDownloaderStatus_PendingImplCopyWithImpl(
|
||||
_$MyDownloaderStatus_PendingImpl _value,
|
||||
$Res Function(_$MyDownloaderStatus_PendingImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? field0 = null,
|
||||
}) {
|
||||
return _then(_$MyDownloaderStatus_PendingImpl(
|
||||
null == field0
|
||||
? _value.field0
|
||||
: field0 // ignore: cast_nullable_to_non_nullable
|
||||
as MyNetworkItemPendingType,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$MyDownloaderStatus_PendingImpl implements MyDownloaderStatus_Pending {
|
||||
const _$MyDownloaderStatus_PendingImpl(this.field0);
|
||||
|
||||
@override
|
||||
final MyNetworkItemPendingType field0;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'MyDownloaderStatus.pending(field0: $field0)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(dynamic other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$MyDownloaderStatus_PendingImpl &&
|
||||
(identical(other.field0, field0) || other.field0 == field0));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, field0);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$MyDownloaderStatus_PendingImplCopyWith<_$MyDownloaderStatus_PendingImpl>
|
||||
get copyWith => __$$MyDownloaderStatus_PendingImplCopyWithImpl<
|
||||
_$MyDownloaderStatus_PendingImpl>(this, _$identity);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function() noStart,
|
||||
required TResult Function() running,
|
||||
required TResult Function(MyNetworkItemPendingType field0) pending,
|
||||
required TResult Function(String field0) error,
|
||||
required TResult Function() finished,
|
||||
}) {
|
||||
return pending(field0);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function()? noStart,
|
||||
TResult? Function()? running,
|
||||
TResult? Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult? Function(String field0)? error,
|
||||
TResult? Function()? finished,
|
||||
}) {
|
||||
return pending?.call(field0);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function()? noStart,
|
||||
TResult Function()? running,
|
||||
TResult Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult Function(String field0)? error,
|
||||
TResult Function()? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (pending != null) {
|
||||
return pending(field0);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(MyDownloaderStatus_NoStart value) noStart,
|
||||
required TResult Function(MyDownloaderStatus_Running value) running,
|
||||
required TResult Function(MyDownloaderStatus_Pending value) pending,
|
||||
required TResult Function(MyDownloaderStatus_Error value) error,
|
||||
required TResult Function(MyDownloaderStatus_Finished value) finished,
|
||||
}) {
|
||||
return pending(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult? Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult? Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult? Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult? Function(MyDownloaderStatus_Finished value)? finished,
|
||||
}) {
|
||||
return pending?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult Function(MyDownloaderStatus_Finished value)? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (pending != null) {
|
||||
return pending(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyDownloaderStatus_Pending implements MyDownloaderStatus {
|
||||
const factory MyDownloaderStatus_Pending(
|
||||
final MyNetworkItemPendingType field0) = _$MyDownloaderStatus_PendingImpl;
|
||||
|
||||
MyNetworkItemPendingType get field0;
|
||||
@JsonKey(ignore: true)
|
||||
_$$MyDownloaderStatus_PendingImplCopyWith<_$MyDownloaderStatus_PendingImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$MyDownloaderStatus_ErrorImplCopyWith<$Res> {
|
||||
factory _$$MyDownloaderStatus_ErrorImplCopyWith(
|
||||
_$MyDownloaderStatus_ErrorImpl value,
|
||||
$Res Function(_$MyDownloaderStatus_ErrorImpl) then) =
|
||||
__$$MyDownloaderStatus_ErrorImplCopyWithImpl<$Res>;
|
||||
@useResult
|
||||
$Res call({String field0});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$MyDownloaderStatus_ErrorImplCopyWithImpl<$Res>
|
||||
extends _$MyDownloaderStatusCopyWithImpl<$Res,
|
||||
_$MyDownloaderStatus_ErrorImpl>
|
||||
implements _$$MyDownloaderStatus_ErrorImplCopyWith<$Res> {
|
||||
__$$MyDownloaderStatus_ErrorImplCopyWithImpl(
|
||||
_$MyDownloaderStatus_ErrorImpl _value,
|
||||
$Res Function(_$MyDownloaderStatus_ErrorImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? field0 = null,
|
||||
}) {
|
||||
return _then(_$MyDownloaderStatus_ErrorImpl(
|
||||
null == field0
|
||||
? _value.field0
|
||||
: field0 // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$MyDownloaderStatus_ErrorImpl implements MyDownloaderStatus_Error {
|
||||
const _$MyDownloaderStatus_ErrorImpl(this.field0);
|
||||
|
||||
@override
|
||||
final String field0;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'MyDownloaderStatus.error(field0: $field0)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(dynamic other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$MyDownloaderStatus_ErrorImpl &&
|
||||
(identical(other.field0, field0) || other.field0 == field0));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, field0);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$MyDownloaderStatus_ErrorImplCopyWith<_$MyDownloaderStatus_ErrorImpl>
|
||||
get copyWith => __$$MyDownloaderStatus_ErrorImplCopyWithImpl<
|
||||
_$MyDownloaderStatus_ErrorImpl>(this, _$identity);
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function() noStart,
|
||||
required TResult Function() running,
|
||||
required TResult Function(MyNetworkItemPendingType field0) pending,
|
||||
required TResult Function(String field0) error,
|
||||
required TResult Function() finished,
|
||||
}) {
|
||||
return error(field0);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function()? noStart,
|
||||
TResult? Function()? running,
|
||||
TResult? Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult? Function(String field0)? error,
|
||||
TResult? Function()? finished,
|
||||
}) {
|
||||
return error?.call(field0);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function()? noStart,
|
||||
TResult Function()? running,
|
||||
TResult Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult Function(String field0)? error,
|
||||
TResult Function()? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (error != null) {
|
||||
return error(field0);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(MyDownloaderStatus_NoStart value) noStart,
|
||||
required TResult Function(MyDownloaderStatus_Running value) running,
|
||||
required TResult Function(MyDownloaderStatus_Pending value) pending,
|
||||
required TResult Function(MyDownloaderStatus_Error value) error,
|
||||
required TResult Function(MyDownloaderStatus_Finished value) finished,
|
||||
}) {
|
||||
return error(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult? Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult? Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult? Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult? Function(MyDownloaderStatus_Finished value)? finished,
|
||||
}) {
|
||||
return error?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult Function(MyDownloaderStatus_Finished value)? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (error != null) {
|
||||
return error(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyDownloaderStatus_Error implements MyDownloaderStatus {
|
||||
const factory MyDownloaderStatus_Error(final String field0) =
|
||||
_$MyDownloaderStatus_ErrorImpl;
|
||||
|
||||
String get field0;
|
||||
@JsonKey(ignore: true)
|
||||
_$$MyDownloaderStatus_ErrorImplCopyWith<_$MyDownloaderStatus_ErrorImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$MyDownloaderStatus_FinishedImplCopyWith<$Res> {
|
||||
factory _$$MyDownloaderStatus_FinishedImplCopyWith(
|
||||
_$MyDownloaderStatus_FinishedImpl value,
|
||||
$Res Function(_$MyDownloaderStatus_FinishedImpl) then) =
|
||||
__$$MyDownloaderStatus_FinishedImplCopyWithImpl<$Res>;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$MyDownloaderStatus_FinishedImplCopyWithImpl<$Res>
|
||||
extends _$MyDownloaderStatusCopyWithImpl<$Res,
|
||||
_$MyDownloaderStatus_FinishedImpl>
|
||||
implements _$$MyDownloaderStatus_FinishedImplCopyWith<$Res> {
|
||||
__$$MyDownloaderStatus_FinishedImplCopyWithImpl(
|
||||
_$MyDownloaderStatus_FinishedImpl _value,
|
||||
$Res Function(_$MyDownloaderStatus_FinishedImpl) _then)
|
||||
: super(_value, _then);
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$MyDownloaderStatus_FinishedImpl implements MyDownloaderStatus_Finished {
|
||||
const _$MyDownloaderStatus_FinishedImpl();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'MyDownloaderStatus.finished()';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(dynamic other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$MyDownloaderStatus_FinishedImpl);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult when<TResult extends Object?>({
|
||||
required TResult Function() noStart,
|
||||
required TResult Function() running,
|
||||
required TResult Function(MyNetworkItemPendingType field0) pending,
|
||||
required TResult Function(String field0) error,
|
||||
required TResult Function() finished,
|
||||
}) {
|
||||
return finished();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? whenOrNull<TResult extends Object?>({
|
||||
TResult? Function()? noStart,
|
||||
TResult? Function()? running,
|
||||
TResult? Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult? Function(String field0)? error,
|
||||
TResult? Function()? finished,
|
||||
}) {
|
||||
return finished?.call();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeWhen<TResult extends Object?>({
|
||||
TResult Function()? noStart,
|
||||
TResult Function()? running,
|
||||
TResult Function(MyNetworkItemPendingType field0)? pending,
|
||||
TResult Function(String field0)? error,
|
||||
TResult Function()? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (finished != null) {
|
||||
return finished();
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult map<TResult extends Object?>({
|
||||
required TResult Function(MyDownloaderStatus_NoStart value) noStart,
|
||||
required TResult Function(MyDownloaderStatus_Running value) running,
|
||||
required TResult Function(MyDownloaderStatus_Pending value) pending,
|
||||
required TResult Function(MyDownloaderStatus_Error value) error,
|
||||
required TResult Function(MyDownloaderStatus_Finished value) finished,
|
||||
}) {
|
||||
return finished(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult? mapOrNull<TResult extends Object?>({
|
||||
TResult? Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult? Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult? Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult? Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult? Function(MyDownloaderStatus_Finished value)? finished,
|
||||
}) {
|
||||
return finished?.call(this);
|
||||
}
|
||||
|
||||
@override
|
||||
@optionalTypeArgs
|
||||
TResult maybeMap<TResult extends Object?>({
|
||||
TResult Function(MyDownloaderStatus_NoStart value)? noStart,
|
||||
TResult Function(MyDownloaderStatus_Running value)? running,
|
||||
TResult Function(MyDownloaderStatus_Pending value)? pending,
|
||||
TResult Function(MyDownloaderStatus_Error value)? error,
|
||||
TResult Function(MyDownloaderStatus_Finished value)? finished,
|
||||
required TResult orElse(),
|
||||
}) {
|
||||
if (finished != null) {
|
||||
return finished(this);
|
||||
}
|
||||
return orElse();
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyDownloaderStatus_Finished implements MyDownloaderStatus {
|
||||
const factory MyDownloaderStatus_Finished() =
|
||||
_$MyDownloaderStatus_FinishedImpl;
|
||||
}
|
382
lib/common/rust/bridge_generated.dart
Normal file
382
lib/common/rust/bridge_generated.dart
Normal file
@ -0,0 +1,382 @@
|
||||
// AUTO GENERATED FILE, DO NOT EDIT.
|
||||
// Generated by `flutter_rust_bridge`@ 1.82.3.
|
||||
// ignore_for_file: non_constant_identifier_names, unused_element, duplicate_ignore, directives_ordering, curly_braces_in_flow_control_structures, unnecessary_lambdas, slash_for_doc_comments, prefer_const_literals_to_create_immutables, implicit_dynamic_list_literal, duplicate_import, unused_import, unnecessary_import, prefer_single_quotes, prefer_const_constructors, use_super_parameters, always_use_package_imports, annotate_overrides, invalid_use_of_protected_member, constant_identifier_names, invalid_use_of_internal_member, prefer_is_empty, unnecessary_const
|
||||
|
||||
import "bridge_definitions.dart";
|
||||
import 'dart:convert';
|
||||
import 'dart:async';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:async';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import 'dart:ffi' as ffi;
|
||||
|
||||
class RustImpl implements Rust {
|
||||
final RustPlatform _platform;
|
||||
factory RustImpl(ExternalLibrary dylib) => RustImpl.raw(RustPlatform(dylib));
|
||||
|
||||
/// Only valid on web/WASM platforms.
|
||||
factory RustImpl.wasm(FutureOr<WasmModule> module) =>
|
||||
RustImpl(module as ExternalLibrary);
|
||||
RustImpl.raw(this._platform);
|
||||
Future<String> ping({dynamic hint}) {
|
||||
return _platform.executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => _platform.inner.wire_ping(port_),
|
||||
parseSuccessData: _wire2api_String,
|
||||
parseErrorData: null,
|
||||
constMeta: kPingConstMeta,
|
||||
argValues: [],
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
FlutterRustBridgeTaskConstMeta get kPingConstMeta =>
|
||||
const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "ping",
|
||||
argNames: [],
|
||||
);
|
||||
|
||||
Stream<DownloadCallbackData> startDownload(
|
||||
{required String url,
|
||||
required String savePath,
|
||||
required String fileName,
|
||||
required int connectionCount,
|
||||
dynamic hint}) {
|
||||
var arg0 = _platform.api2wire_String(url);
|
||||
var arg1 = _platform.api2wire_String(savePath);
|
||||
var arg2 = _platform.api2wire_String(fileName);
|
||||
var arg3 = api2wire_u8(connectionCount);
|
||||
return _platform.executeStream(FlutterRustBridgeTask(
|
||||
callFfi: (port_) =>
|
||||
_platform.inner.wire_start_download(port_, arg0, arg1, arg2, arg3),
|
||||
parseSuccessData: _wire2api_download_callback_data,
|
||||
parseErrorData: null,
|
||||
constMeta: kStartDownloadConstMeta,
|
||||
argValues: [url, savePath, fileName, connectionCount],
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
FlutterRustBridgeTaskConstMeta get kStartDownloadConstMeta =>
|
||||
const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "start_download",
|
||||
argNames: ["url", "savePath", "fileName", "connectionCount"],
|
||||
);
|
||||
|
||||
Future<void> cancelDownload({required String id, dynamic hint}) {
|
||||
var arg0 = _platform.api2wire_String(id);
|
||||
return _platform.executeNormal(FlutterRustBridgeTask(
|
||||
callFfi: (port_) => _platform.inner.wire_cancel_download(port_, arg0),
|
||||
parseSuccessData: _wire2api_unit,
|
||||
parseErrorData: null,
|
||||
constMeta: kCancelDownloadConstMeta,
|
||||
argValues: [id],
|
||||
hint: hint,
|
||||
));
|
||||
}
|
||||
|
||||
FlutterRustBridgeTaskConstMeta get kCancelDownloadConstMeta =>
|
||||
const FlutterRustBridgeTaskConstMeta(
|
||||
debugName: "cancel_download",
|
||||
argNames: ["id"],
|
||||
);
|
||||
|
||||
void dispose() {
|
||||
_platform.dispose();
|
||||
}
|
||||
// Section: wire2api
|
||||
|
||||
String _wire2api_String(dynamic raw) {
|
||||
return raw as String;
|
||||
}
|
||||
|
||||
DownloadCallbackData _wire2api_download_callback_data(dynamic raw) {
|
||||
final arr = raw as List<dynamic>;
|
||||
if (arr.length != 5)
|
||||
throw Exception('unexpected arr length: expect 5 but see ${arr.length}');
|
||||
return DownloadCallbackData(
|
||||
id: _wire2api_String(arr[0]),
|
||||
total: _wire2api_u64(arr[1]),
|
||||
progress: _wire2api_u64(arr[2]),
|
||||
speed: _wire2api_u64(arr[3]),
|
||||
status: _wire2api_my_downloader_status(arr[4]),
|
||||
);
|
||||
}
|
||||
|
||||
int _wire2api_i32(dynamic raw) {
|
||||
return raw as int;
|
||||
}
|
||||
|
||||
MyDownloaderStatus _wire2api_my_downloader_status(dynamic raw) {
|
||||
switch (raw[0]) {
|
||||
case 0:
|
||||
return MyDownloaderStatus_NoStart();
|
||||
case 1:
|
||||
return MyDownloaderStatus_Running();
|
||||
case 2:
|
||||
return MyDownloaderStatus_Pending(
|
||||
_wire2api_my_network_item_pending_type(raw[1]),
|
||||
);
|
||||
case 3:
|
||||
return MyDownloaderStatus_Error(
|
||||
_wire2api_String(raw[1]),
|
||||
);
|
||||
case 4:
|
||||
return MyDownloaderStatus_Finished();
|
||||
default:
|
||||
throw Exception("unreachable");
|
||||
}
|
||||
}
|
||||
|
||||
MyNetworkItemPendingType _wire2api_my_network_item_pending_type(dynamic raw) {
|
||||
return MyNetworkItemPendingType.values[raw as int];
|
||||
}
|
||||
|
||||
int _wire2api_u64(dynamic raw) {
|
||||
return castInt(raw);
|
||||
}
|
||||
|
||||
int _wire2api_u8(dynamic raw) {
|
||||
return raw as int;
|
||||
}
|
||||
|
||||
Uint8List _wire2api_uint_8_list(dynamic raw) {
|
||||
return raw as Uint8List;
|
||||
}
|
||||
|
||||
void _wire2api_unit(dynamic raw) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Section: api2wire
|
||||
|
||||
@protected
|
||||
int api2wire_u8(int raw) {
|
||||
return raw;
|
||||
}
|
||||
|
||||
// Section: finalizer
|
||||
|
||||
class RustPlatform extends FlutterRustBridgeBase<RustWire> {
|
||||
RustPlatform(ffi.DynamicLibrary dylib) : super(RustWire(dylib));
|
||||
|
||||
// Section: api2wire
|
||||
|
||||
@protected
|
||||
ffi.Pointer<wire_uint_8_list> api2wire_String(String raw) {
|
||||
return api2wire_uint_8_list(utf8.encoder.convert(raw));
|
||||
}
|
||||
|
||||
@protected
|
||||
ffi.Pointer<wire_uint_8_list> api2wire_uint_8_list(Uint8List raw) {
|
||||
final ans = inner.new_uint_8_list_0(raw.length);
|
||||
ans.ref.ptr.asTypedList(raw.length).setAll(0, raw);
|
||||
return ans;
|
||||
}
|
||||
// Section: finalizer
|
||||
|
||||
// Section: api_fill_to_wire
|
||||
}
|
||||
|
||||
// ignore_for_file: camel_case_types, non_constant_identifier_names, avoid_positional_boolean_parameters, annotate_overrides, constant_identifier_names
|
||||
|
||||
// AUTO GENERATED FILE, DO NOT EDIT.
|
||||
//
|
||||
// Generated by `package:ffigen`.
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// generated by flutter_rust_bridge
|
||||
class RustWire implements FlutterRustBridgeWireBase {
|
||||
@internal
|
||||
late final dartApi = DartApiDl(init_frb_dart_api_dl);
|
||||
|
||||
/// Holds the symbol lookup function.
|
||||
final ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||
_lookup;
|
||||
|
||||
/// The symbols are looked up in [dynamicLibrary].
|
||||
RustWire(ffi.DynamicLibrary dynamicLibrary) : _lookup = dynamicLibrary.lookup;
|
||||
|
||||
/// The symbols are looked up with [lookup].
|
||||
RustWire.fromLookup(
|
||||
ffi.Pointer<T> Function<T extends ffi.NativeType>(String symbolName)
|
||||
lookup)
|
||||
: _lookup = lookup;
|
||||
|
||||
void store_dart_post_cobject(
|
||||
DartPostCObjectFnType ptr,
|
||||
) {
|
||||
return _store_dart_post_cobject(
|
||||
ptr,
|
||||
);
|
||||
}
|
||||
|
||||
late final _store_dart_post_cobjectPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(DartPostCObjectFnType)>>(
|
||||
'store_dart_post_cobject');
|
||||
late final _store_dart_post_cobject = _store_dart_post_cobjectPtr
|
||||
.asFunction<void Function(DartPostCObjectFnType)>();
|
||||
|
||||
Object get_dart_object(
|
||||
int ptr,
|
||||
) {
|
||||
return _get_dart_object(
|
||||
ptr,
|
||||
);
|
||||
}
|
||||
|
||||
late final _get_dart_objectPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Handle Function(ffi.UintPtr)>>(
|
||||
'get_dart_object');
|
||||
late final _get_dart_object =
|
||||
_get_dart_objectPtr.asFunction<Object Function(int)>();
|
||||
|
||||
void drop_dart_object(
|
||||
int ptr,
|
||||
) {
|
||||
return _drop_dart_object(
|
||||
ptr,
|
||||
);
|
||||
}
|
||||
|
||||
late final _drop_dart_objectPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.UintPtr)>>(
|
||||
'drop_dart_object');
|
||||
late final _drop_dart_object =
|
||||
_drop_dart_objectPtr.asFunction<void Function(int)>();
|
||||
|
||||
int new_dart_opaque(
|
||||
Object handle,
|
||||
) {
|
||||
return _new_dart_opaque(
|
||||
handle,
|
||||
);
|
||||
}
|
||||
|
||||
late final _new_dart_opaquePtr =
|
||||
_lookup<ffi.NativeFunction<ffi.UintPtr Function(ffi.Handle)>>(
|
||||
'new_dart_opaque');
|
||||
late final _new_dart_opaque =
|
||||
_new_dart_opaquePtr.asFunction<int Function(Object)>();
|
||||
|
||||
int init_frb_dart_api_dl(
|
||||
ffi.Pointer<ffi.Void> obj,
|
||||
) {
|
||||
return _init_frb_dart_api_dl(
|
||||
obj,
|
||||
);
|
||||
}
|
||||
|
||||
late final _init_frb_dart_api_dlPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.IntPtr Function(ffi.Pointer<ffi.Void>)>>(
|
||||
'init_frb_dart_api_dl');
|
||||
late final _init_frb_dart_api_dl = _init_frb_dart_api_dlPtr
|
||||
.asFunction<int Function(ffi.Pointer<ffi.Void>)>();
|
||||
|
||||
void wire_ping(
|
||||
int port_,
|
||||
) {
|
||||
return _wire_ping(
|
||||
port_,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_pingPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>('wire_ping');
|
||||
late final _wire_ping = _wire_pingPtr.asFunction<void Function(int)>();
|
||||
|
||||
void wire_start_download(
|
||||
int port_,
|
||||
ffi.Pointer<wire_uint_8_list> url,
|
||||
ffi.Pointer<wire_uint_8_list> save_path,
|
||||
ffi.Pointer<wire_uint_8_list> file_name,
|
||||
int connection_count,
|
||||
) {
|
||||
return _wire_start_download(
|
||||
port_,
|
||||
url,
|
||||
save_path,
|
||||
file_name,
|
||||
connection_count,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_start_downloadPtr = _lookup<
|
||||
ffi.NativeFunction<
|
||||
ffi.Void Function(
|
||||
ffi.Int64,
|
||||
ffi.Pointer<wire_uint_8_list>,
|
||||
ffi.Pointer<wire_uint_8_list>,
|
||||
ffi.Pointer<wire_uint_8_list>,
|
||||
ffi.Uint8)>>('wire_start_download');
|
||||
late final _wire_start_download = _wire_start_downloadPtr.asFunction<
|
||||
void Function(int, ffi.Pointer<wire_uint_8_list>,
|
||||
ffi.Pointer<wire_uint_8_list>, ffi.Pointer<wire_uint_8_list>, int)>();
|
||||
|
||||
void wire_cancel_download(
|
||||
int port_,
|
||||
ffi.Pointer<wire_uint_8_list> id,
|
||||
) {
|
||||
return _wire_cancel_download(
|
||||
port_,
|
||||
id,
|
||||
);
|
||||
}
|
||||
|
||||
late final _wire_cancel_downloadPtr = _lookup<
|
||||
ffi.NativeFunction<
|
||||
ffi.Void Function(ffi.Int64,
|
||||
ffi.Pointer<wire_uint_8_list>)>>('wire_cancel_download');
|
||||
late final _wire_cancel_download = _wire_cancel_downloadPtr
|
||||
.asFunction<void Function(int, ffi.Pointer<wire_uint_8_list>)>();
|
||||
|
||||
ffi.Pointer<wire_uint_8_list> new_uint_8_list_0(
|
||||
int len,
|
||||
) {
|
||||
return _new_uint_8_list_0(
|
||||
len,
|
||||
);
|
||||
}
|
||||
|
||||
late final _new_uint_8_list_0Ptr = _lookup<
|
||||
ffi
|
||||
.NativeFunction<ffi.Pointer<wire_uint_8_list> Function(ffi.Int32)>>(
|
||||
'new_uint_8_list_0');
|
||||
late final _new_uint_8_list_0 = _new_uint_8_list_0Ptr
|
||||
.asFunction<ffi.Pointer<wire_uint_8_list> Function(int)>();
|
||||
|
||||
void free_WireSyncReturn(
|
||||
WireSyncReturn ptr,
|
||||
) {
|
||||
return _free_WireSyncReturn(
|
||||
ptr,
|
||||
);
|
||||
}
|
||||
|
||||
late final _free_WireSyncReturnPtr =
|
||||
_lookup<ffi.NativeFunction<ffi.Void Function(WireSyncReturn)>>(
|
||||
'free_WireSyncReturn');
|
||||
late final _free_WireSyncReturn =
|
||||
_free_WireSyncReturnPtr.asFunction<void Function(WireSyncReturn)>();
|
||||
}
|
||||
|
||||
final class _Dart_Handle extends ffi.Opaque {}
|
||||
|
||||
final class wire_uint_8_list extends ffi.Struct {
|
||||
external ffi.Pointer<ffi.Uint8> ptr;
|
||||
|
||||
@ffi.Int32()
|
||||
external int len;
|
||||
}
|
||||
|
||||
typedef DartPostCObjectFnType = ffi.Pointer<
|
||||
ffi.NativeFunction<
|
||||
ffi.Bool Function(DartPort port_id, ffi.Pointer<ffi.Void> message)>>;
|
||||
typedef DartPort = ffi.Int64;
|
23
lib/common/rust/ffi.dart
Normal file
23
lib/common/rust/ffi.dart
Normal file
@ -0,0 +1,23 @@
|
||||
// This file initializes the dynamic library and connects it with the stub
|
||||
// generated by flutter_rust_bridge_codegen.
|
||||
|
||||
import 'dart:ffi';
|
||||
|
||||
import 'bridge_generated.dart';
|
||||
import 'bridge_definitions.dart';
|
||||
export 'bridge_definitions.dart';
|
||||
|
||||
// Re-export the bridge so it is only necessary to import this file.
|
||||
export 'bridge_generated.dart';
|
||||
import 'dart:io' as io;
|
||||
|
||||
|
||||
const _base = 'rust';
|
||||
|
||||
// On MacOS, the dynamic library is not bundled with the binary,
|
||||
// but rather directly **linked** against the binary.
|
||||
final _dylib = io.Platform.isWindows ? '$_base.dll' : 'lib$_base.so';
|
||||
|
||||
final Rust rustFii = RustImpl(io.Platform.isIOS || io.Platform.isMacOS
|
||||
? DynamicLibrary.executable()
|
||||
: DynamicLibrary.open(_dylib));
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,60 +0,0 @@
|
||||
// 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;
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +1,26 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:starcitizen_doctor/generated/l10n.dart';
|
||||
|
||||
Future showToast(BuildContext context, String msg, {BoxConstraints? constraints, String? title}) async {
|
||||
void dPrint(src) {
|
||||
if (kDebugMode) {
|
||||
print(src);
|
||||
}
|
||||
}
|
||||
|
||||
Future showToast(BuildContext context, String msg,
|
||||
{BoxConstraints? constraints, String? title}) async {
|
||||
return showBaseDialog(context,
|
||||
title: title ?? S.current.app_common_tip,
|
||||
title: title ?? "提示",
|
||||
content: Text(msg),
|
||||
actions: [
|
||||
FilledButton(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
|
||||
child: Text(S.current.app_common_tip_i_know),
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
|
||||
child: Text('我知道了'),
|
||||
),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
@ -23,11 +28,11 @@ Future showToast(BuildContext context, String msg, {BoxConstraints? constraints,
|
||||
constraints: constraints);
|
||||
}
|
||||
|
||||
Future<bool> showConfirmDialogs(BuildContext context, String title, Widget content,
|
||||
{String confirm = "", String cancel = "", BoxConstraints? constraints}) async {
|
||||
if (confirm.isEmpty) confirm = S.current.app_common_tip_confirm;
|
||||
if (cancel.isEmpty) cancel = S.current.app_common_tip_cancel;
|
||||
|
||||
Future<bool> showConfirmDialogs(
|
||||
BuildContext context, String title, Widget content,
|
||||
{String confirm = "确认",
|
||||
String cancel = "取消",
|
||||
BoxConstraints? constraints}) async {
|
||||
final r = await showBaseDialog(context,
|
||||
title: title,
|
||||
content: content,
|
||||
@ -35,7 +40,8 @@ Future<bool> showConfirmDialogs(BuildContext context, String title, Widget conte
|
||||
if (confirm.isNotEmpty)
|
||||
FilledButton(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
|
||||
padding:
|
||||
const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
|
||||
child: Text(confirm),
|
||||
),
|
||||
onPressed: () => Navigator.pop(context, true),
|
||||
@ -43,7 +49,8 @@ Future<bool> showConfirmDialogs(BuildContext context, String title, Widget conte
|
||||
if (cancel.isNotEmpty)
|
||||
Button(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
|
||||
padding:
|
||||
const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
|
||||
child: Text(cancel),
|
||||
),
|
||||
onPressed: () => Navigator.pop(context, false),
|
||||
@ -55,15 +62,13 @@ Future<bool> showConfirmDialogs(BuildContext context, String title, Widget conte
|
||||
|
||||
Future<String?> showInputDialogs(BuildContext context,
|
||||
{required String title,
|
||||
required String content,
|
||||
BoxConstraints? constraints,
|
||||
String? initialValue,
|
||||
List<TextInputFormatter>? inputFormatters}) async {
|
||||
required String content,
|
||||
BoxConstraints? constraints,
|
||||
String? initialValue,
|
||||
List<TextInputFormatter>? inputFormatters}) async {
|
||||
String? userInput;
|
||||
constraints ??= BoxConstraints(maxWidth: MediaQuery
|
||||
.of(context)
|
||||
.size
|
||||
.width * .38);
|
||||
constraints ??=
|
||||
BoxConstraints(maxWidth: MediaQuery.of(context).size.width * .38);
|
||||
final ok = await showConfirmDialogs(
|
||||
context,
|
||||
title,
|
||||
@ -74,7 +79,7 @@ Future<String?> showInputDialogs(BuildContext context,
|
||||
if (content.isNotEmpty)
|
||||
Text(
|
||||
content,
|
||||
style: TextStyle(color: Colors.white.withValues(alpha: .6)),
|
||||
style: TextStyle(color: Colors.white.withOpacity(.6)),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextFormBox(
|
||||
@ -92,20 +97,21 @@ Future<String?> showInputDialogs(BuildContext context,
|
||||
}
|
||||
|
||||
Future showBaseDialog(BuildContext context,
|
||||
{required String title, required Widget content, List<Widget>? actions, BoxConstraints? constraints}) async {
|
||||
{required String title,
|
||||
required Widget content,
|
||||
List<Widget>? actions,
|
||||
BoxConstraints? constraints}) async {
|
||||
return await showDialog(
|
||||
context: context,
|
||||
builder: (context) =>
|
||||
ContentDialog(
|
||||
title: Text(title),
|
||||
content: content,
|
||||
constraints: constraints ??
|
||||
const BoxConstraints(
|
||||
maxWidth: 512,
|
||||
maxHeight: 756.0,
|
||||
),
|
||||
actions: actions,
|
||||
),
|
||||
builder: (context) => ContentDialog(
|
||||
title: Text(title),
|
||||
content: content,
|
||||
constraints: constraints ?? const BoxConstraints(
|
||||
maxWidth: 512,
|
||||
maxHeight: 756.0,
|
||||
),
|
||||
actions: actions,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -113,8 +119,10 @@ bool stringIsNotEmpty(String? s) {
|
||||
return s != null && (s.isNotEmpty);
|
||||
}
|
||||
|
||||
Future<Uint8List?> widgetToPngImage(GlobalKey repaintBoundaryKey, {double pixelRatio = 3.0}) async {
|
||||
RenderRepaintBoundary? boundary = repaintBoundaryKey.currentContext?.findRenderObject() as RenderRepaintBoundary?;
|
||||
Future<Uint8List?> widgetToPngImage(GlobalKey repaintBoundaryKey,
|
||||
{double pixelRatio = 3.0}) async {
|
||||
RenderRepaintBoundary? boundary = repaintBoundaryKey.currentContext
|
||||
?.findRenderObject() as RenderRepaintBoundary?;
|
||||
if (boundary == null) return null;
|
||||
|
||||
ui.Image image = await boundary.toImage(pixelRatio: pixelRatio);
|
||||
@ -124,25 +132,5 @@ Future<Uint8List?> widgetToPngImage(GlobalKey repaintBoundaryKey, {double pixelR
|
||||
return pngBytes;
|
||||
}
|
||||
|
||||
double roundDoubleTo(double value, double 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';
|
||||
}
|
||||
}
|
||||
double roundDoubleTo(double value, double precision) =>
|
||||
(value * precision).round() / precision;
|
||||
|
@ -1,101 +0,0 @@
|
||||
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');
|
||||
}
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
|
@ -1,43 +0,0 @@
|
||||
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;
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
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,
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
@ -1,290 +0,0 @@
|
||||
// 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;
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
// 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,
|
||||
};
|
@ -1,12 +0,0 @@
|
||||
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;
|
||||
}
|
77
lib/common/win32/credentials.dart
Normal file
77
lib/common/win32/credentials.dart
Normal file
@ -0,0 +1,77 @@
|
||||
// Copyright (c) 2020, Dart | Windows. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
// Reads and writes credentials
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi';
|
||||
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:win32/win32.dart';
|
||||
|
||||
import '../utils/base_utils.dart';
|
||||
|
||||
class Win32Credentials {
|
||||
static void write(
|
||||
{required String credentialName,
|
||||
required String userName,
|
||||
required String password}) {
|
||||
final examplePassword = utf8.encode(password);
|
||||
final blob = examplePassword.allocatePointer();
|
||||
|
||||
final credential = calloc<CREDENTIAL>()
|
||||
..ref.Type = CRED_TYPE_GENERIC
|
||||
..ref.TargetName = credentialName.toNativeUtf16()
|
||||
..ref.Persist = CRED_PERSIST_LOCAL_MACHINE
|
||||
..ref.UserName = userName.toNativeUtf16()
|
||||
..ref.CredentialBlob = blob
|
||||
..ref.CredentialBlobSize = examplePassword.length;
|
||||
|
||||
final result = CredWrite(credential, 0);
|
||||
|
||||
if (result != TRUE) {
|
||||
final errorCode = GetLastError();
|
||||
dPrint('Error ($result): $errorCode');
|
||||
return;
|
||||
}
|
||||
dPrint('Success (blob size: ${credential.ref.CredentialBlobSize})');
|
||||
|
||||
free(blob);
|
||||
free(credential);
|
||||
}
|
||||
|
||||
static MapEntry<String, String>? read(String credentialName) {
|
||||
dPrint('Reading $credentialName ...');
|
||||
final credPointer = calloc<Pointer<CREDENTIAL>>();
|
||||
final result = CredRead(
|
||||
credentialName.toNativeUtf16(), CRED_TYPE_GENERIC, 0, credPointer);
|
||||
if (result != TRUE) {
|
||||
final errorCode = GetLastError();
|
||||
var errorText = '$errorCode';
|
||||
if (errorCode == ERROR_NOT_FOUND) {
|
||||
errorText += ' Not found.';
|
||||
}
|
||||
dPrint('Error ($result): $errorText');
|
||||
return null;
|
||||
}
|
||||
final cred = credPointer.value.ref;
|
||||
final blob = cred.CredentialBlob.asTypedList(cred.CredentialBlobSize);
|
||||
final password = utf8.decode(blob);
|
||||
CredFree(credPointer.value);
|
||||
free(credPointer);
|
||||
return MapEntry(cred.UserName.toDartString(), password);
|
||||
}
|
||||
|
||||
static void delete(String credentialName) {
|
||||
dPrint('Deleting $credentialName');
|
||||
final result =
|
||||
CredDelete(credentialName.toNativeUtf16(), CRED_TYPE_GENERIC, 0);
|
||||
if (result != TRUE) {
|
||||
final errorCode = GetLastError();
|
||||
dPrint('Error ($result): $errorCode');
|
||||
return;
|
||||
}
|
||||
dPrint('Successfully deleted credential.');
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
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,
|
||||
}
|
@ -8,14 +8,13 @@
|
||||
|
||||
class AppPlacardData {
|
||||
AppPlacardData({
|
||||
this.version,
|
||||
this.title,
|
||||
this.content,
|
||||
this.link,
|
||||
this.linkType,
|
||||
this.alwaysShow,
|
||||
this.enable,
|
||||
});
|
||||
this.version,
|
||||
this.title,
|
||||
this.content,
|
||||
this.link,
|
||||
this.linkType,
|
||||
this.alwaysShow,
|
||||
this.enable,});
|
||||
|
||||
AppPlacardData.fromJson(dynamic json) {
|
||||
version = json['version'];
|
||||
@ -45,4 +44,5 @@ class AppPlacardData {
|
||||
map['enable'] = enable;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/// 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;
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
/// 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;
|
||||
}
|
||||
}
|
@ -17,9 +17,6 @@ class AppVersionData {
|
||||
this.mSEMinVersionCode,
|
||||
this.p4kDownloadUrl,
|
||||
this.activityColors,
|
||||
this.nav42KitUrl,
|
||||
this.gameChannels,
|
||||
this.webMirrors,
|
||||
});
|
||||
|
||||
AppVersionData.fromJson(dynamic json) {
|
||||
@ -30,10 +27,10 @@ class AppVersionData {
|
||||
mSELastVersionCode = json['MSE_lastVersionCode'];
|
||||
mSEMinVersionCode = json['MSE_minVersionCode'];
|
||||
p4kDownloadUrl = json['p4kDownloadUrl'];
|
||||
activityColors = json['activityColors'] != null ? ActivityColors.fromJson(json['activityColors']) : null;
|
||||
gameChannels = List.from(json["game_channels"]).cast<String>();
|
||||
activityColors = json['activityColors'] != null
|
||||
? ActivityColors.fromJson(json['activityColors'])
|
||||
: null;
|
||||
webMirrors = json["web_mirrors"];
|
||||
nav42KitUrl = json['nav_42kit_url'];
|
||||
}
|
||||
|
||||
String? lastVersion;
|
||||
@ -44,9 +41,7 @@ class AppVersionData {
|
||||
num? mSEMinVersionCode;
|
||||
String? p4kDownloadUrl;
|
||||
ActivityColors? activityColors;
|
||||
List<String>? gameChannels;
|
||||
Map? webMirrors;
|
||||
String? nav42KitUrl;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final map = <String, dynamic>{};
|
||||
@ -61,8 +56,6 @@ class AppVersionData {
|
||||
map['activityColors'] = activityColors?.toJson();
|
||||
}
|
||||
map["web_mirrors"] = webMirrors;
|
||||
map["game_channels"] = gameChannels;
|
||||
map["nav_42kit_url"] = nav42KitUrl;
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
@ -8,14 +8,13 @@
|
||||
|
||||
class AppWebLocalizationVersionsData {
|
||||
AppWebLocalizationVersionsData({
|
||||
this.rsi,
|
||||
this.uex,
|
||||
this.addresses,
|
||||
this.concierge,
|
||||
this.hangar,
|
||||
this.orgs,
|
||||
this.dps,
|
||||
});
|
||||
this.rsi,
|
||||
this.uex,
|
||||
this.addresses,
|
||||
this.concierge,
|
||||
this.hangar,
|
||||
this.orgs,
|
||||
this.dps,});
|
||||
|
||||
AppWebLocalizationVersionsData.fromJson(dynamic json) {
|
||||
rsi = json['rsi'];
|
||||
@ -45,4 +44,5 @@ class AppWebLocalizationVersionsData {
|
||||
map['dps'] = dps;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
@ -1,9 +1,8 @@
|
||||
class CountdownFestivalItemData {
|
||||
CountdownFestivalItemData({
|
||||
this.name,
|
||||
this.time,
|
||||
this.icon,
|
||||
});
|
||||
this.name,
|
||||
this.time,
|
||||
this.icon,});
|
||||
|
||||
CountdownFestivalItemData.fromJson(dynamic json) {
|
||||
name = json['name'];
|
||||
@ -21,4 +20,5 @@ class CountdownFestivalItemData {
|
||||
map['icon'] = icon;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
@ -1,108 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -9,15 +9,14 @@
|
||||
|
||||
class GamePerformanceData {
|
||||
GamePerformanceData({
|
||||
this.key,
|
||||
this.name,
|
||||
this.info,
|
||||
this.type,
|
||||
this.max,
|
||||
this.min,
|
||||
this.value,
|
||||
this.group,
|
||||
});
|
||||
this.key,
|
||||
this.name,
|
||||
this.info,
|
||||
this.type,
|
||||
this.max,
|
||||
this.min,
|
||||
this.value,
|
||||
this.group,});
|
||||
|
||||
GamePerformanceData.fromJson(dynamic json) {
|
||||
key = json['key'];
|
||||
@ -50,4 +49,5 @@ class GamePerformanceData {
|
||||
map['group'] = group;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,246 +0,0 @@
|
||||
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
@ -1,336 +0,0 @@
|
||||
// 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,
|
||||
};
|
@ -1,107 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -7,13 +7,12 @@
|
||||
|
||||
class ScLocalizationData {
|
||||
ScLocalizationData({
|
||||
this.enable,
|
||||
this.versionName,
|
||||
this.updateAt,
|
||||
this.info,
|
||||
this.gameChannel,
|
||||
this.note,
|
||||
});
|
||||
this.enable,
|
||||
this.versionName,
|
||||
this.updateAt,
|
||||
this.info,
|
||||
this.gameChannel,
|
||||
this.note,});
|
||||
|
||||
ScLocalizationData.fromJson(dynamic json) {
|
||||
enable = json['enable'];
|
||||
@ -40,4 +39,5 @@ class ScLocalizationData {
|
||||
map['note'] = note;
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
128
lib/generated/grpc/party_room_server/chat.pb.dart
Normal file
128
lib/generated/grpc/party_room_server/chat.pb.dart
Normal file
@ -0,0 +1,128 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: chat.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:core' as $core;
|
||||
|
||||
import 'package:protobuf/protobuf.dart' as $pb;
|
||||
|
||||
import 'chat.pbenum.dart';
|
||||
|
||||
export 'chat.pbenum.dart';
|
||||
|
||||
class ChatMessage extends $pb.GeneratedMessage {
|
||||
factory ChatMessage({
|
||||
$core.String? senderID,
|
||||
$core.String? receiverID,
|
||||
ReceiverType? receiverType,
|
||||
MessageType? messageType,
|
||||
$core.String? data,
|
||||
}) {
|
||||
final $result = create();
|
||||
if (senderID != null) {
|
||||
$result.senderID = senderID;
|
||||
}
|
||||
if (receiverID != null) {
|
||||
$result.receiverID = receiverID;
|
||||
}
|
||||
if (receiverType != null) {
|
||||
$result.receiverType = receiverType;
|
||||
}
|
||||
if (messageType != null) {
|
||||
$result.messageType = messageType;
|
||||
}
|
||||
if (data != null) {
|
||||
$result.data = data;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
ChatMessage._() : super();
|
||||
factory ChatMessage.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
|
||||
factory ChatMessage.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
|
||||
|
||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ChatMessage', createEmptyInstance: create)
|
||||
..aOS(1, _omitFieldNames ? '' : 'senderID', protoName: 'senderID')
|
||||
..aOS(2, _omitFieldNames ? '' : 'receiverID', protoName: 'receiverID')
|
||||
..e<ReceiverType>(3, _omitFieldNames ? '' : 'receiverType', $pb.PbFieldType.OE, protoName: 'receiverType', defaultOrMaker: ReceiverType.RoomMsg, valueOf: ReceiverType.valueOf, enumValues: ReceiverType.values)
|
||||
..e<MessageType>(4, _omitFieldNames ? '' : 'messageType', $pb.PbFieldType.OE, protoName: 'messageType', defaultOrMaker: MessageType.System, valueOf: MessageType.valueOf, enumValues: MessageType.values)
|
||||
..aOS(5, _omitFieldNames ? '' : 'data')
|
||||
..hasRequiredFields = false
|
||||
;
|
||||
|
||||
@$core.Deprecated(
|
||||
'Using this can add significant overhead to your binary. '
|
||||
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
|
||||
'Will be removed in next major version')
|
||||
ChatMessage clone() => ChatMessage()..mergeFromMessage(this);
|
||||
@$core.Deprecated(
|
||||
'Using this can add significant overhead to your binary. '
|
||||
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
|
||||
'Will be removed in next major version')
|
||||
ChatMessage copyWith(void Function(ChatMessage) updates) => super.copyWith((message) => updates(message as ChatMessage)) as ChatMessage;
|
||||
|
||||
$pb.BuilderInfo get info_ => _i;
|
||||
|
||||
@$core.pragma('dart2js:noInline')
|
||||
static ChatMessage create() => ChatMessage._();
|
||||
ChatMessage createEmptyInstance() => create();
|
||||
static $pb.PbList<ChatMessage> createRepeated() => $pb.PbList<ChatMessage>();
|
||||
@$core.pragma('dart2js:noInline')
|
||||
static ChatMessage getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ChatMessage>(create);
|
||||
static ChatMessage? _defaultInstance;
|
||||
|
||||
@$pb.TagNumber(1)
|
||||
$core.String get senderID => $_getSZ(0);
|
||||
@$pb.TagNumber(1)
|
||||
set senderID($core.String v) { $_setString(0, v); }
|
||||
@$pb.TagNumber(1)
|
||||
$core.bool hasSenderID() => $_has(0);
|
||||
@$pb.TagNumber(1)
|
||||
void clearSenderID() => clearField(1);
|
||||
|
||||
@$pb.TagNumber(2)
|
||||
$core.String get receiverID => $_getSZ(1);
|
||||
@$pb.TagNumber(2)
|
||||
set receiverID($core.String v) { $_setString(1, v); }
|
||||
@$pb.TagNumber(2)
|
||||
$core.bool hasReceiverID() => $_has(1);
|
||||
@$pb.TagNumber(2)
|
||||
void clearReceiverID() => clearField(2);
|
||||
|
||||
@$pb.TagNumber(3)
|
||||
ReceiverType get receiverType => $_getN(2);
|
||||
@$pb.TagNumber(3)
|
||||
set receiverType(ReceiverType v) { setField(3, v); }
|
||||
@$pb.TagNumber(3)
|
||||
$core.bool hasReceiverType() => $_has(2);
|
||||
@$pb.TagNumber(3)
|
||||
void clearReceiverType() => clearField(3);
|
||||
|
||||
@$pb.TagNumber(4)
|
||||
MessageType get messageType => $_getN(3);
|
||||
@$pb.TagNumber(4)
|
||||
set messageType(MessageType v) { setField(4, v); }
|
||||
@$pb.TagNumber(4)
|
||||
$core.bool hasMessageType() => $_has(3);
|
||||
@$pb.TagNumber(4)
|
||||
void clearMessageType() => clearField(4);
|
||||
|
||||
@$pb.TagNumber(5)
|
||||
$core.String get data => $_getSZ(4);
|
||||
@$pb.TagNumber(5)
|
||||
set data($core.String v) { $_setString(4, v); }
|
||||
@$pb.TagNumber(5)
|
||||
$core.bool hasData() => $_has(4);
|
||||
@$pb.TagNumber(5)
|
||||
void clearData() => clearField(5);
|
||||
}
|
||||
|
||||
|
||||
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
|
||||
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');
|
51
lib/generated/grpc/party_room_server/chat.pbenum.dart
Normal file
51
lib/generated/grpc/party_room_server/chat.pbenum.dart
Normal file
@ -0,0 +1,51 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: chat.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:core' as $core;
|
||||
|
||||
import 'package:protobuf/protobuf.dart' as $pb;
|
||||
|
||||
class ReceiverType extends $pb.ProtobufEnum {
|
||||
static const ReceiverType RoomMsg = ReceiverType._(0, _omitEnumNames ? '' : 'RoomMsg');
|
||||
static const ReceiverType PrivateMsg = ReceiverType._(1, _omitEnumNames ? '' : 'PrivateMsg');
|
||||
|
||||
static const $core.List<ReceiverType> values = <ReceiverType> [
|
||||
RoomMsg,
|
||||
PrivateMsg,
|
||||
];
|
||||
|
||||
static final $core.Map<$core.int, ReceiverType> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||
static ReceiverType? valueOf($core.int value) => _byValue[value];
|
||||
|
||||
const ReceiverType._($core.int v, $core.String n) : super(v, n);
|
||||
}
|
||||
|
||||
class MessageType extends $pb.ProtobufEnum {
|
||||
static const MessageType System = MessageType._(0, _omitEnumNames ? '' : 'System');
|
||||
static const MessageType Text = MessageType._(1, _omitEnumNames ? '' : 'Text');
|
||||
static const MessageType Image = MessageType._(2, _omitEnumNames ? '' : 'Image');
|
||||
static const MessageType Markdown = MessageType._(3, _omitEnumNames ? '' : 'Markdown');
|
||||
|
||||
static const $core.List<MessageType> values = <MessageType> [
|
||||
System,
|
||||
Text,
|
||||
Image,
|
||||
Markdown,
|
||||
];
|
||||
|
||||
static final $core.Map<$core.int, MessageType> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||
static MessageType? valueOf($core.int value) => _byValue[value];
|
||||
|
||||
const MessageType._($core.int v, $core.String n) : super(v, n);
|
||||
}
|
||||
|
||||
|
||||
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
|
80
lib/generated/grpc/party_room_server/chat.pbgrpc.dart
Normal file
80
lib/generated/grpc/party_room_server/chat.pbgrpc.dart
Normal file
@ -0,0 +1,80 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: chat.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:async' as $async;
|
||||
import 'dart:core' as $core;
|
||||
|
||||
import 'package:grpc/service_api.dart' as $grpc;
|
||||
import 'package:protobuf/protobuf.dart' as $pb;
|
||||
|
||||
import 'chat.pb.dart' as $1;
|
||||
import 'index.pb.dart' as $0;
|
||||
|
||||
export 'chat.pb.dart';
|
||||
|
||||
@$pb.GrpcServiceName('ChatService')
|
||||
class ChatServiceClient extends $grpc.Client {
|
||||
static final _$listenMessage = $grpc.ClientMethod<$0.PreUser, $1.ChatMessage>(
|
||||
'/ChatService/ListenMessage',
|
||||
($0.PreUser value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $1.ChatMessage.fromBuffer(value));
|
||||
static final _$sendMessage = $grpc.ClientMethod<$1.ChatMessage, $0.BaseRespData>(
|
||||
'/ChatService/SendMessage',
|
||||
($1.ChatMessage value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.BaseRespData.fromBuffer(value));
|
||||
|
||||
ChatServiceClient($grpc.ClientChannel channel,
|
||||
{$grpc.CallOptions? options,
|
||||
$core.Iterable<$grpc.ClientInterceptor>? interceptors})
|
||||
: super(channel, options: options,
|
||||
interceptors: interceptors);
|
||||
|
||||
$grpc.ResponseStream<$1.ChatMessage> listenMessage($0.PreUser request, {$grpc.CallOptions? options}) {
|
||||
return $createStreamingCall(_$listenMessage, $async.Stream.fromIterable([request]), options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseFuture<$0.BaseRespData> sendMessage($1.ChatMessage request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$sendMessage, request, options: options);
|
||||
}
|
||||
}
|
||||
|
||||
@$pb.GrpcServiceName('ChatService')
|
||||
abstract class ChatServiceBase extends $grpc.Service {
|
||||
$core.String get $name => 'ChatService';
|
||||
|
||||
ChatServiceBase() {
|
||||
$addMethod($grpc.ServiceMethod<$0.PreUser, $1.ChatMessage>(
|
||||
'ListenMessage',
|
||||
listenMessage_Pre,
|
||||
false,
|
||||
true,
|
||||
($core.List<$core.int> value) => $0.PreUser.fromBuffer(value),
|
||||
($1.ChatMessage value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$1.ChatMessage, $0.BaseRespData>(
|
||||
'SendMessage',
|
||||
sendMessage_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $1.ChatMessage.fromBuffer(value),
|
||||
($0.BaseRespData value) => value.writeToBuffer()));
|
||||
}
|
||||
|
||||
$async.Stream<$1.ChatMessage> listenMessage_Pre($grpc.ServiceCall call, $async.Future<$0.PreUser> request) async* {
|
||||
yield* listenMessage(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.BaseRespData> sendMessage_Pre($grpc.ServiceCall call, $async.Future<$1.ChatMessage> request) async {
|
||||
return sendMessage(call, await request);
|
||||
}
|
||||
|
||||
$async.Stream<$1.ChatMessage> listenMessage($grpc.ServiceCall call, $0.PreUser request);
|
||||
$async.Future<$0.BaseRespData> sendMessage($grpc.ServiceCall call, $1.ChatMessage request);
|
||||
}
|
63
lib/generated/grpc/party_room_server/chat.pbjson.dart
Normal file
63
lib/generated/grpc/party_room_server/chat.pbjson.dart
Normal file
@ -0,0 +1,63 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: chat.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:convert' as $convert;
|
||||
import 'dart:core' as $core;
|
||||
import 'dart:typed_data' as $typed_data;
|
||||
|
||||
@$core.Deprecated('Use receiverTypeDescriptor instead')
|
||||
const ReceiverType$json = {
|
||||
'1': 'ReceiverType',
|
||||
'2': [
|
||||
{'1': 'RoomMsg', '2': 0},
|
||||
{'1': 'PrivateMsg', '2': 1},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `ReceiverType`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||
final $typed_data.Uint8List receiverTypeDescriptor = $convert.base64Decode(
|
||||
'CgxSZWNlaXZlclR5cGUSCwoHUm9vbU1zZxAAEg4KClByaXZhdGVNc2cQAQ==');
|
||||
|
||||
@$core.Deprecated('Use messageTypeDescriptor instead')
|
||||
const MessageType$json = {
|
||||
'1': 'MessageType',
|
||||
'2': [
|
||||
{'1': 'System', '2': 0},
|
||||
{'1': 'Text', '2': 1},
|
||||
{'1': 'Image', '2': 2},
|
||||
{'1': 'Markdown', '2': 3},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `MessageType`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||
final $typed_data.Uint8List messageTypeDescriptor = $convert.base64Decode(
|
||||
'CgtNZXNzYWdlVHlwZRIKCgZTeXN0ZW0QABIICgRUZXh0EAESCQoFSW1hZ2UQAhIMCghNYXJrZG'
|
||||
'93bhAD');
|
||||
|
||||
@$core.Deprecated('Use chatMessageDescriptor instead')
|
||||
const ChatMessage$json = {
|
||||
'1': 'ChatMessage',
|
||||
'2': [
|
||||
{'1': 'senderID', '3': 1, '4': 1, '5': 9, '10': 'senderID'},
|
||||
{'1': 'receiverID', '3': 2, '4': 1, '5': 9, '10': 'receiverID'},
|
||||
{'1': 'receiverType', '3': 3, '4': 1, '5': 14, '6': '.ReceiverType', '10': 'receiverType'},
|
||||
{'1': 'messageType', '3': 4, '4': 1, '5': 14, '6': '.MessageType', '10': 'messageType'},
|
||||
{'1': 'data', '3': 5, '4': 1, '5': 9, '10': 'data'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `ChatMessage`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List chatMessageDescriptor = $convert.base64Decode(
|
||||
'CgtDaGF0TWVzc2FnZRIaCghzZW5kZXJJRBgBIAEoCVIIc2VuZGVySUQSHgoKcmVjZWl2ZXJJRB'
|
||||
'gCIAEoCVIKcmVjZWl2ZXJJRBIxCgxyZWNlaXZlclR5cGUYAyABKA4yDS5SZWNlaXZlclR5cGVS'
|
||||
'DHJlY2VpdmVyVHlwZRIuCgttZXNzYWdlVHlwZRgEIAEoDjIMLk1lc3NhZ2VUeXBlUgttZXNzYW'
|
||||
'dlVHlwZRISCgRkYXRhGAUgASgJUgRkYXRh');
|
||||
|
1119
lib/generated/grpc/party_room_server/index.pb.dart
Normal file
1119
lib/generated/grpc/party_room_server/index.pb.dart
Normal file
File diff suppressed because it is too large
Load Diff
97
lib/generated/grpc/party_room_server/index.pbenum.dart
Normal file
97
lib/generated/grpc/party_room_server/index.pbenum.dart
Normal file
@ -0,0 +1,97 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: index.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:core' as $core;
|
||||
|
||||
import 'package:protobuf/protobuf.dart' as $pb;
|
||||
|
||||
class RoomStatus extends $pb.ProtobufEnum {
|
||||
static const RoomStatus All = RoomStatus._(0, _omitEnumNames ? '' : 'All');
|
||||
static const RoomStatus Open = RoomStatus._(1, _omitEnumNames ? '' : 'Open');
|
||||
static const RoomStatus Private = RoomStatus._(2, _omitEnumNames ? '' : 'Private');
|
||||
static const RoomStatus Full = RoomStatus._(3, _omitEnumNames ? '' : 'Full');
|
||||
static const RoomStatus Closed = RoomStatus._(4, _omitEnumNames ? '' : 'Closed');
|
||||
static const RoomStatus WillOffline = RoomStatus._(5, _omitEnumNames ? '' : 'WillOffline');
|
||||
static const RoomStatus Offline = RoomStatus._(6, _omitEnumNames ? '' : 'Offline');
|
||||
|
||||
static const $core.List<RoomStatus> values = <RoomStatus> [
|
||||
All,
|
||||
Open,
|
||||
Private,
|
||||
Full,
|
||||
Closed,
|
||||
WillOffline,
|
||||
Offline,
|
||||
];
|
||||
|
||||
static final $core.Map<$core.int, RoomStatus> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||
static RoomStatus? valueOf($core.int value) => _byValue[value];
|
||||
|
||||
const RoomStatus._($core.int v, $core.String n) : super(v, n);
|
||||
}
|
||||
|
||||
class RoomSortType extends $pb.ProtobufEnum {
|
||||
static const RoomSortType Default = RoomSortType._(0, _omitEnumNames ? '' : 'Default');
|
||||
static const RoomSortType MostPlayerNumber = RoomSortType._(1, _omitEnumNames ? '' : 'MostPlayerNumber');
|
||||
static const RoomSortType MinimumPlayerNumber = RoomSortType._(2, _omitEnumNames ? '' : 'MinimumPlayerNumber');
|
||||
static const RoomSortType RecentlyCreated = RoomSortType._(3, _omitEnumNames ? '' : 'RecentlyCreated');
|
||||
static const RoomSortType OldestCreated = RoomSortType._(4, _omitEnumNames ? '' : 'OldestCreated');
|
||||
|
||||
static const $core.List<RoomSortType> values = <RoomSortType> [
|
||||
Default,
|
||||
MostPlayerNumber,
|
||||
MinimumPlayerNumber,
|
||||
RecentlyCreated,
|
||||
OldestCreated,
|
||||
];
|
||||
|
||||
static final $core.Map<$core.int, RoomSortType> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||
static RoomSortType? valueOf($core.int value) => _byValue[value];
|
||||
|
||||
const RoomSortType._($core.int v, $core.String n) : super(v, n);
|
||||
}
|
||||
|
||||
class RoomUserStatus extends $pb.ProtobufEnum {
|
||||
static const RoomUserStatus RoomUserStatusJoin = RoomUserStatus._(0, _omitEnumNames ? '' : 'RoomUserStatusJoin');
|
||||
static const RoomUserStatus RoomUserStatusLostOffline = RoomUserStatus._(1, _omitEnumNames ? '' : 'RoomUserStatusLostOffline');
|
||||
static const RoomUserStatus RoomUserStatusLeave = RoomUserStatus._(2, _omitEnumNames ? '' : 'RoomUserStatusLeave');
|
||||
static const RoomUserStatus RoomUserStatusWaitingConnect = RoomUserStatus._(3, _omitEnumNames ? '' : 'RoomUserStatusWaitingConnect');
|
||||
|
||||
static const $core.List<RoomUserStatus> values = <RoomUserStatus> [
|
||||
RoomUserStatusJoin,
|
||||
RoomUserStatusLostOffline,
|
||||
RoomUserStatusLeave,
|
||||
RoomUserStatusWaitingConnect,
|
||||
];
|
||||
|
||||
static final $core.Map<$core.int, RoomUserStatus> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||
static RoomUserStatus? valueOf($core.int value) => _byValue[value];
|
||||
|
||||
const RoomUserStatus._($core.int v, $core.String n) : super(v, n);
|
||||
}
|
||||
|
||||
class RoomUpdateType extends $pb.ProtobufEnum {
|
||||
static const RoomUpdateType RoomUpdateData = RoomUpdateType._(0, _omitEnumNames ? '' : 'RoomUpdateData');
|
||||
static const RoomUpdateType RoomClose = RoomUpdateType._(1, _omitEnumNames ? '' : 'RoomClose');
|
||||
|
||||
static const $core.List<RoomUpdateType> values = <RoomUpdateType> [
|
||||
RoomUpdateData,
|
||||
RoomClose,
|
||||
];
|
||||
|
||||
static final $core.Map<$core.int, RoomUpdateType> _byValue = $pb.ProtobufEnum.initByValue(values);
|
||||
static RoomUpdateType? valueOf($core.int value) => _byValue[value];
|
||||
|
||||
const RoomUpdateType._($core.int v, $core.String n) : super(v, n);
|
||||
}
|
||||
|
||||
|
||||
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
|
179
lib/generated/grpc/party_room_server/index.pbgrpc.dart
Normal file
179
lib/generated/grpc/party_room_server/index.pbgrpc.dart
Normal file
@ -0,0 +1,179 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: index.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:async' as $async;
|
||||
import 'dart:core' as $core;
|
||||
|
||||
import 'package:grpc/service_api.dart' as $grpc;
|
||||
import 'package:protobuf/protobuf.dart' as $pb;
|
||||
|
||||
import 'index.pb.dart' as $0;
|
||||
|
||||
export 'index.pb.dart';
|
||||
|
||||
@$pb.GrpcServiceName('IndexService')
|
||||
class IndexServiceClient extends $grpc.Client {
|
||||
static final _$pingServer = $grpc.ClientMethod<$0.PingData, $0.PingData>(
|
||||
'/IndexService/PingServer',
|
||||
($0.PingData value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.PingData.fromBuffer(value));
|
||||
static final _$getRoomTypes = $grpc.ClientMethod<$0.Empty, $0.RoomTypesData>(
|
||||
'/IndexService/GetRoomTypes',
|
||||
($0.Empty value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.RoomTypesData.fromBuffer(value));
|
||||
static final _$createRoom = $grpc.ClientMethod<$0.RoomData, $0.RoomData>(
|
||||
'/IndexService/CreateRoom',
|
||||
($0.RoomData value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.RoomData.fromBuffer(value));
|
||||
static final _$getRoomList = $grpc.ClientMethod<$0.RoomListPageReqData, $0.RoomListData>(
|
||||
'/IndexService/GetRoomList',
|
||||
($0.RoomListPageReqData value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.RoomListData.fromBuffer(value));
|
||||
static final _$touchUser = $grpc.ClientMethod<$0.PreUser, $0.RoomData>(
|
||||
'/IndexService/TouchUser',
|
||||
($0.PreUser value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.RoomData.fromBuffer(value));
|
||||
static final _$joinRoom = $grpc.ClientMethod<$0.PreUser, $0.RoomUpdateMessage>(
|
||||
'/IndexService/JoinRoom',
|
||||
($0.PreUser value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.RoomUpdateMessage.fromBuffer(value));
|
||||
static final _$leaveRoom = $grpc.ClientMethod<$0.PreUser, $0.BaseRespData>(
|
||||
'/IndexService/LeaveRoom',
|
||||
($0.PreUser value) => value.writeToBuffer(),
|
||||
($core.List<$core.int> value) => $0.BaseRespData.fromBuffer(value));
|
||||
|
||||
IndexServiceClient($grpc.ClientChannel channel,
|
||||
{$grpc.CallOptions? options,
|
||||
$core.Iterable<$grpc.ClientInterceptor>? interceptors})
|
||||
: super(channel, options: options,
|
||||
interceptors: interceptors);
|
||||
|
||||
$grpc.ResponseFuture<$0.PingData> pingServer($0.PingData request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$pingServer, request, options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseFuture<$0.RoomTypesData> getRoomTypes($0.Empty request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$getRoomTypes, request, options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseFuture<$0.RoomData> createRoom($0.RoomData request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$createRoom, request, options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseFuture<$0.RoomListData> getRoomList($0.RoomListPageReqData request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$getRoomList, request, options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseFuture<$0.RoomData> touchUser($0.PreUser request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$touchUser, request, options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseStream<$0.RoomUpdateMessage> joinRoom($0.PreUser request, {$grpc.CallOptions? options}) {
|
||||
return $createStreamingCall(_$joinRoom, $async.Stream.fromIterable([request]), options: options);
|
||||
}
|
||||
|
||||
$grpc.ResponseFuture<$0.BaseRespData> leaveRoom($0.PreUser request, {$grpc.CallOptions? options}) {
|
||||
return $createUnaryCall(_$leaveRoom, request, options: options);
|
||||
}
|
||||
}
|
||||
|
||||
@$pb.GrpcServiceName('IndexService')
|
||||
abstract class IndexServiceBase extends $grpc.Service {
|
||||
$core.String get $name => 'IndexService';
|
||||
|
||||
IndexServiceBase() {
|
||||
$addMethod($grpc.ServiceMethod<$0.PingData, $0.PingData>(
|
||||
'PingServer',
|
||||
pingServer_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $0.PingData.fromBuffer(value),
|
||||
($0.PingData value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$0.Empty, $0.RoomTypesData>(
|
||||
'GetRoomTypes',
|
||||
getRoomTypes_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $0.Empty.fromBuffer(value),
|
||||
($0.RoomTypesData value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$0.RoomData, $0.RoomData>(
|
||||
'CreateRoom',
|
||||
createRoom_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $0.RoomData.fromBuffer(value),
|
||||
($0.RoomData value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$0.RoomListPageReqData, $0.RoomListData>(
|
||||
'GetRoomList',
|
||||
getRoomList_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $0.RoomListPageReqData.fromBuffer(value),
|
||||
($0.RoomListData value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$0.PreUser, $0.RoomData>(
|
||||
'TouchUser',
|
||||
touchUser_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $0.PreUser.fromBuffer(value),
|
||||
($0.RoomData value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$0.PreUser, $0.RoomUpdateMessage>(
|
||||
'JoinRoom',
|
||||
joinRoom_Pre,
|
||||
false,
|
||||
true,
|
||||
($core.List<$core.int> value) => $0.PreUser.fromBuffer(value),
|
||||
($0.RoomUpdateMessage value) => value.writeToBuffer()));
|
||||
$addMethod($grpc.ServiceMethod<$0.PreUser, $0.BaseRespData>(
|
||||
'LeaveRoom',
|
||||
leaveRoom_Pre,
|
||||
false,
|
||||
false,
|
||||
($core.List<$core.int> value) => $0.PreUser.fromBuffer(value),
|
||||
($0.BaseRespData value) => value.writeToBuffer()));
|
||||
}
|
||||
|
||||
$async.Future<$0.PingData> pingServer_Pre($grpc.ServiceCall call, $async.Future<$0.PingData> request) async {
|
||||
return pingServer(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.RoomTypesData> getRoomTypes_Pre($grpc.ServiceCall call, $async.Future<$0.Empty> request) async {
|
||||
return getRoomTypes(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.RoomData> createRoom_Pre($grpc.ServiceCall call, $async.Future<$0.RoomData> request) async {
|
||||
return createRoom(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.RoomListData> getRoomList_Pre($grpc.ServiceCall call, $async.Future<$0.RoomListPageReqData> request) async {
|
||||
return getRoomList(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.RoomData> touchUser_Pre($grpc.ServiceCall call, $async.Future<$0.PreUser> request) async {
|
||||
return touchUser(call, await request);
|
||||
}
|
||||
|
||||
$async.Stream<$0.RoomUpdateMessage> joinRoom_Pre($grpc.ServiceCall call, $async.Future<$0.PreUser> request) async* {
|
||||
yield* joinRoom(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.BaseRespData> leaveRoom_Pre($grpc.ServiceCall call, $async.Future<$0.PreUser> request) async {
|
||||
return leaveRoom(call, await request);
|
||||
}
|
||||
|
||||
$async.Future<$0.PingData> pingServer($grpc.ServiceCall call, $0.PingData request);
|
||||
$async.Future<$0.RoomTypesData> getRoomTypes($grpc.ServiceCall call, $0.Empty request);
|
||||
$async.Future<$0.RoomData> createRoom($grpc.ServiceCall call, $0.RoomData request);
|
||||
$async.Future<$0.RoomListData> getRoomList($grpc.ServiceCall call, $0.RoomListPageReqData request);
|
||||
$async.Future<$0.RoomData> touchUser($grpc.ServiceCall call, $0.PreUser request);
|
||||
$async.Stream<$0.RoomUpdateMessage> joinRoom($grpc.ServiceCall call, $0.PreUser request);
|
||||
$async.Future<$0.BaseRespData> leaveRoom($grpc.ServiceCall call, $0.PreUser request);
|
||||
}
|
292
lib/generated/grpc/party_room_server/index.pbjson.dart
Normal file
292
lib/generated/grpc/party_room_server/index.pbjson.dart
Normal file
@ -0,0 +1,292 @@
|
||||
//
|
||||
// Generated code. Do not modify.
|
||||
// source: index.proto
|
||||
//
|
||||
// @dart = 2.12
|
||||
|
||||
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
|
||||
// ignore_for_file: constant_identifier_names, library_prefixes
|
||||
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
|
||||
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
|
||||
|
||||
import 'dart:convert' as $convert;
|
||||
import 'dart:core' as $core;
|
||||
import 'dart:typed_data' as $typed_data;
|
||||
|
||||
@$core.Deprecated('Use roomStatusDescriptor instead')
|
||||
const RoomStatus$json = {
|
||||
'1': 'RoomStatus',
|
||||
'2': [
|
||||
{'1': 'All', '2': 0},
|
||||
{'1': 'Open', '2': 1},
|
||||
{'1': 'Private', '2': 2},
|
||||
{'1': 'Full', '2': 3},
|
||||
{'1': 'Closed', '2': 4},
|
||||
{'1': 'WillOffline', '2': 5},
|
||||
{'1': 'Offline', '2': 6},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomStatus`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||
final $typed_data.Uint8List roomStatusDescriptor = $convert.base64Decode(
|
||||
'CgpSb29tU3RhdHVzEgcKA0FsbBAAEggKBE9wZW4QARILCgdQcml2YXRlEAISCAoERnVsbBADEg'
|
||||
'oKBkNsb3NlZBAEEg8KC1dpbGxPZmZsaW5lEAUSCwoHT2ZmbGluZRAG');
|
||||
|
||||
@$core.Deprecated('Use roomSortTypeDescriptor instead')
|
||||
const RoomSortType$json = {
|
||||
'1': 'RoomSortType',
|
||||
'2': [
|
||||
{'1': 'Default', '2': 0},
|
||||
{'1': 'MostPlayerNumber', '2': 1},
|
||||
{'1': 'MinimumPlayerNumber', '2': 2},
|
||||
{'1': 'RecentlyCreated', '2': 3},
|
||||
{'1': 'OldestCreated', '2': 4},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomSortType`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||
final $typed_data.Uint8List roomSortTypeDescriptor = $convert.base64Decode(
|
||||
'CgxSb29tU29ydFR5cGUSCwoHRGVmYXVsdBAAEhQKEE1vc3RQbGF5ZXJOdW1iZXIQARIXChNNaW'
|
||||
'5pbXVtUGxheWVyTnVtYmVyEAISEwoPUmVjZW50bHlDcmVhdGVkEAMSEQoNT2xkZXN0Q3JlYXRl'
|
||||
'ZBAE');
|
||||
|
||||
@$core.Deprecated('Use roomUserStatusDescriptor instead')
|
||||
const RoomUserStatus$json = {
|
||||
'1': 'RoomUserStatus',
|
||||
'2': [
|
||||
{'1': 'RoomUserStatusJoin', '2': 0},
|
||||
{'1': 'RoomUserStatusLostOffline', '2': 1},
|
||||
{'1': 'RoomUserStatusLeave', '2': 2},
|
||||
{'1': 'RoomUserStatusWaitingConnect', '2': 3},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomUserStatus`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||
final $typed_data.Uint8List roomUserStatusDescriptor = $convert.base64Decode(
|
||||
'Cg5Sb29tVXNlclN0YXR1cxIWChJSb29tVXNlclN0YXR1c0pvaW4QABIdChlSb29tVXNlclN0YX'
|
||||
'R1c0xvc3RPZmZsaW5lEAESFwoTUm9vbVVzZXJTdGF0dXNMZWF2ZRACEiAKHFJvb21Vc2VyU3Rh'
|
||||
'dHVzV2FpdGluZ0Nvbm5lY3QQAw==');
|
||||
|
||||
@$core.Deprecated('Use roomUpdateTypeDescriptor instead')
|
||||
const RoomUpdateType$json = {
|
||||
'1': 'RoomUpdateType',
|
||||
'2': [
|
||||
{'1': 'RoomUpdateData', '2': 0},
|
||||
{'1': 'RoomClose', '2': 1},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomUpdateType`. Decode as a `google.protobuf.EnumDescriptorProto`.
|
||||
final $typed_data.Uint8List roomUpdateTypeDescriptor = $convert.base64Decode(
|
||||
'Cg5Sb29tVXBkYXRlVHlwZRISCg5Sb29tVXBkYXRlRGF0YRAAEg0KCVJvb21DbG9zZRAB');
|
||||
|
||||
@$core.Deprecated('Use emptyDescriptor instead')
|
||||
const Empty$json = {
|
||||
'1': 'Empty',
|
||||
};
|
||||
|
||||
/// Descriptor for `Empty`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List emptyDescriptor = $convert.base64Decode(
|
||||
'CgVFbXB0eQ==');
|
||||
|
||||
@$core.Deprecated('Use baseRespDataDescriptor instead')
|
||||
const BaseRespData$json = {
|
||||
'1': 'BaseRespData',
|
||||
'2': [
|
||||
{'1': 'code', '3': 1, '4': 1, '5': 5, '10': 'code'},
|
||||
{'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `BaseRespData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List baseRespDataDescriptor = $convert.base64Decode(
|
||||
'CgxCYXNlUmVzcERhdGESEgoEY29kZRgBIAEoBVIEY29kZRIYCgdtZXNzYWdlGAIgASgJUgdtZX'
|
||||
'NzYWdl');
|
||||
|
||||
@$core.Deprecated('Use basePageRespDataDescriptor instead')
|
||||
const BasePageRespData$json = {
|
||||
'1': 'BasePageRespData',
|
||||
'2': [
|
||||
{'1': 'code', '3': 1, '4': 1, '5': 5, '10': 'code'},
|
||||
{'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'},
|
||||
{'1': 'hasNext', '3': 3, '4': 1, '5': 8, '10': 'hasNext'},
|
||||
{'1': 'curPageNum', '3': 4, '4': 1, '5': 4, '10': 'curPageNum'},
|
||||
{'1': 'pageSize', '3': 5, '4': 1, '5': 3, '10': 'pageSize'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `BasePageRespData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List basePageRespDataDescriptor = $convert.base64Decode(
|
||||
'ChBCYXNlUGFnZVJlc3BEYXRhEhIKBGNvZGUYASABKAVSBGNvZGUSGAoHbWVzc2FnZRgCIAEoCV'
|
||||
'IHbWVzc2FnZRIYCgdoYXNOZXh0GAMgASgIUgdoYXNOZXh0Eh4KCmN1clBhZ2VOdW0YBCABKARS'
|
||||
'CmN1clBhZ2VOdW0SGgoIcGFnZVNpemUYBSABKANSCHBhZ2VTaXpl');
|
||||
|
||||
@$core.Deprecated('Use pingDataDescriptor instead')
|
||||
const PingData$json = {
|
||||
'1': 'PingData',
|
||||
'2': [
|
||||
{'1': 'data', '3': 1, '4': 1, '5': 9, '10': 'data'},
|
||||
{'1': 'clientVersion', '3': 2, '4': 1, '5': 18, '10': 'clientVersion'},
|
||||
{'1': 'serverVersion', '3': 3, '4': 1, '5': 18, '10': 'serverVersion'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `PingData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List pingDataDescriptor = $convert.base64Decode(
|
||||
'CghQaW5nRGF0YRISCgRkYXRhGAEgASgJUgRkYXRhEiQKDWNsaWVudFZlcnNpb24YAiABKBJSDW'
|
||||
'NsaWVudFZlcnNpb24SJAoNc2VydmVyVmVyc2lvbhgDIAEoElINc2VydmVyVmVyc2lvbg==');
|
||||
|
||||
@$core.Deprecated('Use roomTypesDataDescriptor instead')
|
||||
const RoomTypesData$json = {
|
||||
'1': 'RoomTypesData',
|
||||
'2': [
|
||||
{'1': 'roomTypes', '3': 1, '4': 3, '5': 11, '6': '.RoomType', '10': 'roomTypes'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomTypesData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomTypesDataDescriptor = $convert.base64Decode(
|
||||
'Cg1Sb29tVHlwZXNEYXRhEicKCXJvb21UeXBlcxgBIAMoCzIJLlJvb21UeXBlUglyb29tVHlwZX'
|
||||
'M=');
|
||||
|
||||
@$core.Deprecated('Use roomTypeDescriptor instead')
|
||||
const RoomType$json = {
|
||||
'1': 'RoomType',
|
||||
'2': [
|
||||
{'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
|
||||
{'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
|
||||
{'1': 'icon', '3': 3, '4': 1, '5': 9, '10': 'icon'},
|
||||
{'1': 'desc', '3': 4, '4': 1, '5': 9, '10': 'desc'},
|
||||
{'1': 'subTypes', '3': 5, '4': 3, '5': 11, '6': '.RoomSubtype', '10': 'subTypes'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomType`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomTypeDescriptor = $convert.base64Decode(
|
||||
'CghSb29tVHlwZRIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRISCgRpY29uGA'
|
||||
'MgASgJUgRpY29uEhIKBGRlc2MYBCABKAlSBGRlc2MSKAoIc3ViVHlwZXMYBSADKAsyDC5Sb29t'
|
||||
'U3VidHlwZVIIc3ViVHlwZXM=');
|
||||
|
||||
@$core.Deprecated('Use roomSubtypeDescriptor instead')
|
||||
const RoomSubtype$json = {
|
||||
'1': 'RoomSubtype',
|
||||
'2': [
|
||||
{'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
|
||||
{'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomSubtype`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomSubtypeDescriptor = $convert.base64Decode(
|
||||
'CgtSb29tU3VidHlwZRIOCgJpZBgBIAEoCVICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZQ==');
|
||||
|
||||
@$core.Deprecated('Use roomDataDescriptor instead')
|
||||
const RoomData$json = {
|
||||
'1': 'RoomData',
|
||||
'2': [
|
||||
{'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
|
||||
{'1': 'roomTypeID', '3': 2, '4': 1, '5': 9, '10': 'roomTypeID'},
|
||||
{'1': 'roomSubTypeIds', '3': 3, '4': 3, '5': 9, '10': 'roomSubTypeIds'},
|
||||
{'1': 'owner', '3': 4, '4': 1, '5': 9, '10': 'owner'},
|
||||
{'1': 'maxPlayer', '3': 5, '4': 1, '5': 5, '10': 'maxPlayer'},
|
||||
{'1': 'createTime', '3': 6, '4': 1, '5': 3, '10': 'createTime'},
|
||||
{'1': 'curPlayer', '3': 7, '4': 1, '5': 5, '10': 'curPlayer'},
|
||||
{'1': 'status', '3': 8, '4': 1, '5': 14, '6': '.RoomStatus', '10': 'status'},
|
||||
{'1': 'deviceUUID', '3': 9, '4': 1, '5': 9, '10': 'deviceUUID'},
|
||||
{'1': 'announcement', '3': 10, '4': 1, '5': 9, '10': 'announcement'},
|
||||
{'1': 'avatar', '3': 11, '4': 1, '5': 9, '10': 'avatar'},
|
||||
{'1': 'updateTime', '3': 12, '4': 1, '5': 3, '10': 'updateTime'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomDataDescriptor = $convert.base64Decode(
|
||||
'CghSb29tRGF0YRIOCgJpZBgBIAEoCVICaWQSHgoKcm9vbVR5cGVJRBgCIAEoCVIKcm9vbVR5cG'
|
||||
'VJRBImCg5yb29tU3ViVHlwZUlkcxgDIAMoCVIOcm9vbVN1YlR5cGVJZHMSFAoFb3duZXIYBCAB'
|
||||
'KAlSBW93bmVyEhwKCW1heFBsYXllchgFIAEoBVIJbWF4UGxheWVyEh4KCmNyZWF0ZVRpbWUYBi'
|
||||
'ABKANSCmNyZWF0ZVRpbWUSHAoJY3VyUGxheWVyGAcgASgFUgljdXJQbGF5ZXISIwoGc3RhdHVz'
|
||||
'GAggASgOMgsuUm9vbVN0YXR1c1IGc3RhdHVzEh4KCmRldmljZVVVSUQYCSABKAlSCmRldmljZV'
|
||||
'VVSUQSIgoMYW5ub3VuY2VtZW50GAogASgJUgxhbm5vdW5jZW1lbnQSFgoGYXZhdGFyGAsgASgJ'
|
||||
'UgZhdmF0YXISHgoKdXBkYXRlVGltZRgMIAEoA1IKdXBkYXRlVGltZQ==');
|
||||
|
||||
@$core.Deprecated('Use roomListPageReqDataDescriptor instead')
|
||||
const RoomListPageReqData$json = {
|
||||
'1': 'RoomListPageReqData',
|
||||
'2': [
|
||||
{'1': 'typeID', '3': 1, '4': 1, '5': 9, '10': 'typeID'},
|
||||
{'1': 'subTypeID', '3': 2, '4': 1, '5': 9, '10': 'subTypeID'},
|
||||
{'1': 'status', '3': 3, '4': 1, '5': 14, '6': '.RoomStatus', '10': 'status'},
|
||||
{'1': 'sort', '3': 4, '4': 1, '5': 14, '6': '.RoomSortType', '10': 'sort'},
|
||||
{'1': 'pageNum', '3': 5, '4': 1, '5': 4, '10': 'pageNum'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomListPageReqData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomListPageReqDataDescriptor = $convert.base64Decode(
|
||||
'ChNSb29tTGlzdFBhZ2VSZXFEYXRhEhYKBnR5cGVJRBgBIAEoCVIGdHlwZUlEEhwKCXN1YlR5cG'
|
||||
'VJRBgCIAEoCVIJc3ViVHlwZUlEEiMKBnN0YXR1cxgDIAEoDjILLlJvb21TdGF0dXNSBnN0YXR1'
|
||||
'cxIhCgRzb3J0GAQgASgOMg0uUm9vbVNvcnRUeXBlUgRzb3J0EhgKB3BhZ2VOdW0YBSABKARSB3'
|
||||
'BhZ2VOdW0=');
|
||||
|
||||
@$core.Deprecated('Use roomListDataDescriptor instead')
|
||||
const RoomListData$json = {
|
||||
'1': 'RoomListData',
|
||||
'2': [
|
||||
{'1': 'pageData', '3': 1, '4': 1, '5': 11, '6': '.BasePageRespData', '10': 'pageData'},
|
||||
{'1': 'rooms', '3': 2, '4': 3, '5': 11, '6': '.RoomData', '10': 'rooms'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomListData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomListDataDescriptor = $convert.base64Decode(
|
||||
'CgxSb29tTGlzdERhdGESLQoIcGFnZURhdGEYASABKAsyES5CYXNlUGFnZVJlc3BEYXRhUghwYW'
|
||||
'dlRGF0YRIfCgVyb29tcxgCIAMoCzIJLlJvb21EYXRhUgVyb29tcw==');
|
||||
|
||||
@$core.Deprecated('Use preUserDescriptor instead')
|
||||
const PreUser$json = {
|
||||
'1': 'PreUser',
|
||||
'2': [
|
||||
{'1': 'userName', '3': 1, '4': 1, '5': 9, '10': 'userName'},
|
||||
{'1': 'deviceUUID', '3': 2, '4': 1, '5': 9, '10': 'deviceUUID'},
|
||||
{'1': 'roomID', '3': 3, '4': 1, '5': 9, '10': 'roomID'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `PreUser`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List preUserDescriptor = $convert.base64Decode(
|
||||
'CgdQcmVVc2VyEhoKCHVzZXJOYW1lGAEgASgJUgh1c2VyTmFtZRIeCgpkZXZpY2VVVUlEGAIgAS'
|
||||
'gJUgpkZXZpY2VVVUlEEhYKBnJvb21JRBgDIAEoCVIGcm9vbUlE');
|
||||
|
||||
@$core.Deprecated('Use roomUserDataDescriptor instead')
|
||||
const RoomUserData$json = {
|
||||
'1': 'RoomUserData',
|
||||
'2': [
|
||||
{'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
|
||||
{'1': 'playerName', '3': 2, '4': 1, '5': 9, '10': 'playerName'},
|
||||
{'1': 'Avatar', '3': 3, '4': 1, '5': 9, '10': 'Avatar'},
|
||||
{'1': 'status', '3': 4, '4': 1, '5': 14, '6': '.RoomUserStatus', '10': 'status'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomUserData`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomUserDataDescriptor = $convert.base64Decode(
|
||||
'CgxSb29tVXNlckRhdGESDgoCaWQYASABKAlSAmlkEh4KCnBsYXllck5hbWUYAiABKAlSCnBsYX'
|
||||
'llck5hbWUSFgoGQXZhdGFyGAMgASgJUgZBdmF0YXISJwoGc3RhdHVzGAQgASgOMg8uUm9vbVVz'
|
||||
'ZXJTdGF0dXNSBnN0YXR1cw==');
|
||||
|
||||
@$core.Deprecated('Use roomUpdateMessageDescriptor instead')
|
||||
const RoomUpdateMessage$json = {
|
||||
'1': 'RoomUpdateMessage',
|
||||
'2': [
|
||||
{'1': 'roomData', '3': 1, '4': 1, '5': 11, '6': '.RoomData', '10': 'roomData'},
|
||||
{'1': 'usersData', '3': 2, '4': 3, '5': 11, '6': '.RoomUserData', '10': 'usersData'},
|
||||
{'1': 'roomUpdateType', '3': 3, '4': 1, '5': 14, '6': '.RoomUpdateType', '10': 'roomUpdateType'},
|
||||
],
|
||||
};
|
||||
|
||||
/// Descriptor for `RoomUpdateMessage`. Decode as a `google.protobuf.DescriptorProto`.
|
||||
final $typed_data.Uint8List roomUpdateMessageDescriptor = $convert.base64Decode(
|
||||
'ChFSb29tVXBkYXRlTWVzc2FnZRIlCghyb29tRGF0YRgBIAEoCzIJLlJvb21EYXRhUghyb29tRG'
|
||||
'F0YRIrCgl1c2Vyc0RhdGEYAiADKAsyDS5Sb29tVXNlckRhdGFSCXVzZXJzRGF0YRI3Cg5yb29t'
|
||||
'VXBkYXRlVHlwZRgDIAEoDjIPLlJvb21VcGRhdGVUeXBlUg5yb29tVXBkYXRlVHlwZQ==');
|
||||
|
@ -1,84 +0,0 @@
|
||||
// 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
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
||||
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';
|
||||
}
|
101
lib/global_ui_model.dart
Normal file
101
lib/global_ui_model.dart
Normal file
@ -0,0 +1,101 @@
|
||||
// ignore_for_file: use_build_context_synchronously
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
|
||||
import 'base/ui_model.dart';
|
||||
import 'common/conf/app_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 {
|
||||
Timer? activityThemeColorTimer;
|
||||
|
||||
Future<String?> getRunningGameUser() async {
|
||||
await Future.delayed(const Duration(milliseconds: 300));
|
||||
|
||||
///TODO 实现获取运行中用户名
|
||||
return "xkeyC";
|
||||
}
|
||||
|
||||
Future<bool> doCheckUpdate(BuildContext context, {bool init = true}) async {
|
||||
dynamic checkUpdateError;
|
||||
if (!init) {
|
||||
try {
|
||||
await AppConf.checkUpdate();
|
||||
} catch (e) {
|
||||
checkUpdateError = e;
|
||||
}
|
||||
}
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
if (AppConf.networkVersionData == null) {
|
||||
showToast(context,
|
||||
"检查更新失败!请检查网络连接... \n进入离线模式.. \n\n请谨慎在离线模式中使用。\n请尝试更换无污染的DNS。 \n当前版本构建日期:${AppConf.appVersionDate}\n QQ群:940696487 \n错误信息:$checkUpdateError");
|
||||
return false;
|
||||
}
|
||||
final lastVersion = AppConf.isMSE
|
||||
? AppConf.networkVersionData?.mSELastVersionCode
|
||||
: AppConf.networkVersionData?.lastVersionCode;
|
||||
if ((lastVersion ?? 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;
|
||||
}
|
||||
|
||||
checkActivityThemeColor() {
|
||||
if (activityThemeColorTimer != null) {
|
||||
activityThemeColorTimer?.cancel();
|
||||
activityThemeColorTimer = null;
|
||||
}
|
||||
if (AppConf.networkVersionData == null ||
|
||||
AppConf.networkVersionData?.activityColors?.enable != true) return;
|
||||
|
||||
final startTime = AppConf.networkVersionData!.activityColors?.startTime;
|
||||
final endTime = AppConf.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);
|
||||
dPrint("start Timer ....");
|
||||
} else if (now >= startTime && now <= endTime) {
|
||||
dPrint("update Color ....");
|
||||
// update Color
|
||||
final colorCfg = AppConf.networkVersionData!.activityColors;
|
||||
AppConf.colorBackground =
|
||||
HexColor(colorCfg?.background ?? "#132431").withOpacity(.75);
|
||||
AppConf.colorMenu =
|
||||
HexColor(colorCfg?.menu ?? "#132431").withOpacity(.95);
|
||||
AppConf.colorMica = HexColor(colorCfg?.mica ?? "#0A3142");
|
||||
notifyListeners();
|
||||
// wait for end
|
||||
activityThemeColorTimer =
|
||||
Timer(Duration(milliseconds: endTime - now), checkActivityThemeColor);
|
||||
} else {
|
||||
dPrint("reset Color ....");
|
||||
AppConf.colorBackground = HexColor("#132431").withOpacity(.75);
|
||||
AppConf.colorMenu = HexColor("#132431").withOpacity(.95);
|
||||
AppConf.colorMica = HexColor("#0A3142");
|
||||
notifyListeners();
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
@ -1,902 +0,0 @@
|
||||
{
|
||||
"@@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..."
|
||||
}
|
@ -1,896 +0,0 @@
|
||||
{
|
||||
"@@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": "管理者権限でランチャーを実行するか、SCToolbox(Microsoft 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アナライザ"
|
||||
}
|
@ -1,897 +0,0 @@
|
||||
{
|
||||
"@@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: Анализатор логов"
|
||||
}
|
@ -1,902 +0,0 @@
|
||||
{
|
||||
"@@locale": "zh_CN",
|
||||
"@@auto_translate_locale": "zh-cn",
|
||||
"app_language_name": "简体中文",
|
||||
"@app_language_name": {},
|
||||
"app_language_code": "zh_CN",
|
||||
"app_index_version_info": "SC汉化盒子 V{v0} {v1}",
|
||||
"@app_index_version_info": {},
|
||||
"app_shortcut_name": "SC汉化盒子DEV.lnk",
|
||||
"@app_shortcut_name": {},
|
||||
"about_check_update": "检查更新",
|
||||
"@about_check_update": {},
|
||||
"about_app_description": "不仅仅是汉化!\n\nSC汉化盒子是你探索宇宙的好帮手,我们致力于为各位公民解决游戏中的常见问题,并为社区汉化、性能调优、常用网站汉化 等操作提供便利。",
|
||||
"@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": "这是一个非官方的星际公民工具,不隶属于 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使用此功能登录账号时请确保您的 SC汉化盒子 是从可信任的来源下载。",
|
||||
"@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": "SC 汉化盒子使用 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启动器log",
|
||||
"@doctor_action_rsi_launcher_log": {},
|
||||
"doctor_action_game_run_log": "游戏运行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 的物理内存(Memory)才可运行此游戏。(当前大小:{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": "星际公民官网汉化",
|
||||
"@home_action_star_citizen_website_localization": {},
|
||||
"home_action_info_roberts_space_industries_origin": "罗伯茨航天工业公司,万物的起源",
|
||||
"@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": "一键诊断星际公民常见问题",
|
||||
"@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": "竞技场指挥官",
|
||||
"@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": "解析 log 文件失败!",
|
||||
"@home_action_info_log_file_parse_fail": {},
|
||||
"home_action_title_star_citizen_website_localization": "星际公民网站汉化",
|
||||
"@home_action_title_star_citizen_website_localization": {},
|
||||
"home_action_info_web_localization_plugin_disclaimer": "本插功能件仅供大致浏览使用,不对任何有关本功能产生的问题负责!在涉及账号操作前请注意确认网站的原本内容!\n\n\n使用此功能登录账号时请确保您的 SC汉化盒子 是从可信任的来源下载。",
|
||||
"@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": "SC汉化盒子",
|
||||
"@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": "为确保账户安全,一键启动功能已在开发版中禁用,我们将在微软商店版本中提供此功能。\n\n微软商店版由微软提供可靠的分发下载与数字签名,可有效防止软件被恶意篡改。\n\n提示:您无需使用盒子启动游戏也可使用汉化。",
|
||||
"@home_info_account_security_warning": {},
|
||||
"home_action_install_microsoft_store_version": "安装微软商店版本",
|
||||
"@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": "在桌面创建《SC汉化盒子》快捷方式",
|
||||
"@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 12th+ 处理器 )",
|
||||
"@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": "查看log",
|
||||
"@setting_action_view_log": {},
|
||||
"setting_action_info_view_log_file": "查看汉化盒子的 log 文件,以定位盒子的 bug",
|
||||
"@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": "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": "因微软版功能限制,请在接下来打开的窗口中 手动将《SC汉化盒子》拖动到桌面,即可创建快捷方式。",
|
||||
"@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": "使用星际公民中文百科提供的分流下载服务,可用于下载或修复 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 Log 修复",
|
||||
"@tools_action_rsi_launcher_log_fix": {},
|
||||
"tools_action_info_rsi_launcher_log_issue": "在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\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": "解析 log 文件失败!\n请尝试使用 RSI Launcher log 修复 工具!",
|
||||
"@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": "未找到星际公民游戏安装位置,请至少完成一次游戏启动操作 或在设置中手动添加。",
|
||||
"@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_cleanup_failed": {},
|
||||
"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 是星际公民的核心游戏文件,高达 100GB+,盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。",
|
||||
"@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 下, 物理可用+虚拟内存需 > 64G )",
|
||||
"doctor_game_error_generic_info": "游戏触发了最为广泛的崩溃问题,请查看排障指南",
|
||||
"doctor_game_error_gpu_crash": "您的显卡崩溃啦!请查看排障指南",
|
||||
"doctor_game_error_socket_error": "检测到 socket 异常",
|
||||
"doctor_game_error_socket_error_info": "如使用 X黑盒 加速器,请尝试更换加速模式",
|
||||
"doctor_game_error_permissions_error": "权限不足",
|
||||
"doctor_game_error_permissions_error_info": "请尝试以管理员权限运行启动器,或使用盒子(微软商店版)启动。",
|
||||
"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 文件 并在启动器校验 或 使用盒子分流。",
|
||||
"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": "感谢您选择 SC汉化盒子 ,我们致力于为您提供 安全、便捷、可靠的使用体验,在您开始使用应用前,请先阅读并同意以下内容:\n\n 1. 本应用 为 GNU 通用公共许可证 v3.0 协议下的开源软件,您可以在遵守协议的前提下自由使用、修改、分发本软件。我们的源代码位于:[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)。 \n2. 本应用中的互联网内容(包括但不限于 本地化文件、工具网站、新闻、视频 等)版权由其作者创作所有,不属于 GPL 的一部分,请在遵守对应的授权协议下使用。\n3. 本应用的官方免费发布渠道为:[微软应用商店](https://apps.microsoft.com/detail/9NF3SWFWNKL1) 与 [星际公民汉化组官网](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": "您当前未安装游戏本体或未选择游戏安装目录,只可使用启动器汉化功能。请确保游戏安装完毕或在盒子设置中添加游戏安装目录后重试。",
|
||||
"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": "(LOGO、标志等)",
|
||||
"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": "开启后在屏幕上显示一个二维码,用于反馈时让 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": "解包星际公民 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": "获取地址失败,请手动查看电脑IP",
|
||||
"input_method_text_cannot_be_empty": "文本不能为空!",
|
||||
"input_method_send_success": "发送成功!",
|
||||
"input_method_ip_address_not_found": "我们没能找到合适的 ip 地址来访问服务,请您尝试以下地址(左右切换)",
|
||||
"input_method_scan_qr_code": "请使用您的移动设备扫描以下二维码,或手动访问连接",
|
||||
"input_method_service_qr_code": "服务二维码",
|
||||
"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": "感谢您使用 SC汉化盒子,我是其开发者 xkeyC\n汉化盒子致力于开放源代码并为各位玩家提供免费的服务,无偿的服务是一项充满挑战的工作,若您考虑给我送点饮料钱,我将不胜感激。\n捐赠的资金将用于服务器支出、新功能的开发,以及提高软件维护的积极性。",
|
||||
"support_dev_referral_code_message": "如果您还没有注册游戏或填写邀请码,可以考虑我的: STAR-3YXS-SWTC ,感谢你看到这里",
|
||||
"support_dev_title": "支持开发者",
|
||||
"support_dev_github_star_message": "您也可以在 GitHub 上给我的项目点个 Star",
|
||||
"support_dev_github_star_button": "Star 项目",
|
||||
"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": "支付宝",
|
||||
"support_dev_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": "----- 汉化盒子一键诊断 -----",
|
||||
"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": "SC汉化盒子: log 分析器",
|
||||
"nav_title": "导航",
|
||||
"nav_third_party_service_disclaimer": "*对应链接指向的服务由第三方提供,我们不对其做任何担保,请用户自行判断使用风险 | ",
|
||||
"nav_website_navigation_data_provided_by": "网站导航数据由",
|
||||
"nav_provided_by": "提供",
|
||||
"nav_fetching_data": "正在获取数据..."
|
||||
}
|
@ -1,904 +0,0 @@
|
||||
{
|
||||
"@@locale": "zh_TW",
|
||||
"@@auto_translate_locale": "zh-tw",
|
||||
"app_language_name": "繁體中文",
|
||||
"@app_language_name": {},
|
||||
"app_language_code": "zh_TW",
|
||||
"app_index_version_info": "SC工具箱 V{v0} {v1}",
|
||||
"@app_index_version_info": {},
|
||||
"app_shortcut_name": "SC工具箱DEV.lnk",
|
||||
"@app_shortcut_name": {},
|
||||
"about_check_update": "檢查更新",
|
||||
"@about_check_update": {},
|
||||
"about_app_description": "這個工具能做的不僅僅是翻譯!\n\nSC工具箱是你探索宇宙的好幫手,我們致力於為各位公民解決遊戲中的常見問題,並為社群翻譯、性能改善、常用網站翻譯 等操作提供便利。",
|
||||
"@about_app_description": {},
|
||||
"about_online_feedback": "意見反饋",
|
||||
"@about_online_feedback": {},
|
||||
"about_action_qq_group": "QQ群組",
|
||||
"@about_action_qq_group": {},
|
||||
"about_action_email": "電子信箱",
|
||||
"@about_action_email": {},
|
||||
"about_action_open_source": "專案開源 (Github)",
|
||||
"@about_action_open_source": {},
|
||||
"about_disclaimer": "SC工具箱非官方的星際公民工具,不隸屬於 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使用此功能登入帳號時請確保您的 SC工具箱 是從可信任的來源下載。",
|
||||
"@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": "SC 工具箱使用 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啟動器log",
|
||||
"@doctor_action_rsi_launcher_log": {},
|
||||
"doctor_action_game_run_log": "遊戲執行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 的物理記憶體(Memory)才可執行此遊戲。(目前大小:{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": "星際公民官網",
|
||||
"@home_action_star_citizen_website_localization": {},
|
||||
"home_action_info_roberts_space_industries_origin": "羅伯茨航天工業公司,萬物的起源",
|
||||
"@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": "快速解決星際公民的常見問題",
|
||||
"@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": "競技場指揮官",
|
||||
"@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": "解析 log 文件失敗!",
|
||||
"@home_action_info_log_file_parse_fail": {},
|
||||
"home_action_title_star_citizen_website_localization": "星際公民網站翻譯",
|
||||
"@home_action_title_star_citizen_website_localization": {},
|
||||
"home_action_info_web_localization_plugin_disclaimer": "本插件功能僅供大致瀏覽使用,不對任何有關本功能產生的問題負責!在涉及帳號操作前請注意確認網站的原本內容!\n\n\n使用此功能登入帳號時請確保您的 SC工具箱 是從可信任的來源下載。",
|
||||
"@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": "SC工具箱",
|
||||
"@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": "為確保帳戶安全,快速啟動功能已在Dev版本中禁用,我們將在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": "此功能對改善因 GPU 造成的瓶頸,但對於因 CPU 造成瓶頸的裝置可能引發負面效果,如果您 GPU 性能強勁,可以嘗試更改為更高的畫質來獲得更高的 GPU 使用率並改善畫面表現。",
|
||||
"@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": "在桌面新增《SC工具箱》捷徑",
|
||||
"@setting_action_create_desktop_shortcut": {},
|
||||
"setting_action_reset_auto_password_fill": "重設自動密碼輸入",
|
||||
"@setting_action_reset_auto_password_fill": {},
|
||||
"setting_action_ignore_efficiency_cores_on_launch": "啟動遊戲時忽略 E-Core (適用於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": "查看log",
|
||||
"@setting_action_view_log": {},
|
||||
"setting_action_info_view_log_file": "查看工具箱的 log 文件,用於定位工具箱的 bug",
|
||||
"@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": "Tip:您的裝置擁有幾個 E-Core 就輸入幾個,非大小核裝置請保持 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 Store版本功能限制,請在接下來打開的視窗中 手動將《SC工具箱》拖動到桌面,即可建立捷徑。",
|
||||
"@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": "使用星際公民中文百科提供的分流下載服務,可用於下載或修復 p4k。 \n版本資訊:{v0}",
|
||||
"@tools_action_info_p4k_download_repair_tip": {},
|
||||
"tools_action_hosts_acceleration_experimental": "Hosts 加速(Beta)",
|
||||
"@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": "重新安裝 EAC",
|
||||
"@tools_action_reinstall_easyanticheat": {},
|
||||
"tools_action_info_reinstall_eac": "若您遇到 EAC 錯誤,且自動修復無效,請嘗試使用此功能重裝 EAC。",
|
||||
"@tools_action_info_reinstall_eac": {},
|
||||
"tools_action_rsi_launcher_admin_mode": "管理員模式",
|
||||
"@tools_action_rsi_launcher_admin_mode": {},
|
||||
"tools_action_info_run_rsi_as_admin": "以管理員身份執行RSI啟動器,可能會解決一些問題。\n\n若設定了 E-Core 核心忽略參數,也會在此套用。",
|
||||
"@tools_action_info_run_rsi_as_admin": {},
|
||||
"tools_action_info_init_failed": "初始化失敗,請截圖報告給開發者。{v0}",
|
||||
"@tools_action_info_init_failed": {},
|
||||
"tools_action_rsi_launcher_log_fix": "啟動器日誌修復",
|
||||
"@tools_action_rsi_launcher_log_fix": {},
|
||||
"tools_action_info_rsi_launcher_log_issue": "在某些情況下 RSI啟動器 的 log 文件會損壞,導致無法完成問題掃描,使用此工具清理損壞的 log 文件。\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": "此功能將手動寫入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": "若遊戲畫面出現異常或版本更新後可使用此工具清除著色器快取 \n\n(同時會將 Vulkan 還原為 DX11)\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": "解析 log 文件失敗!\n請嘗試使用 啟動器日誌修復 工具!",
|
||||
"@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": "未找到星際公民遊戲安裝位置,請至少完成一次遊戲啟動操作 或在設定中手動新增。",
|
||||
"@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_cleanup_failed": {},
|
||||
"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 是星際公民的核心遊戲文件,高達 100GB+,工具箱提供的離線下載是為了幫助一些p4k文件下載慢到不行的使用者 或用於修復官方啟動器無法修復的 p4k 文件。\n\n接下來會跳出視窗詢問您儲存位置(可以選擇星際公民資料夾也可以選擇別處),下載完成後請確保 P4K 資料夾位於 LIVE 資料夾內,之後使用星際公民啟動器校驗更新即可。",
|
||||
"@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 下, 物理可用+虛擬記憶體需 > 64G )",
|
||||
"doctor_game_error_generic_info": "遊戲觸發了最為廣泛的崩潰問題,請查看除錯指南",
|
||||
"doctor_game_error_gpu_crash": "您的顯示卡已崩潰,請查看除錯指南",
|
||||
"doctor_game_error_socket_error": "檢測到 socket 異常",
|
||||
"doctor_game_error_socket_error_info": "如使用 X黑盒 加速器,請嘗試更換加速模式",
|
||||
"doctor_game_error_permissions_error": "權限不足",
|
||||
"doctor_game_error_permissions_error_info": "請嘗試以管理員權限執行啟動器,或使用工具箱(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 文件 並在啟動器校驗 或 使用工具箱分流。",
|
||||
"doctor_game_error_low_gpu_memory": "可用 VRAM 不足",
|
||||
"doctor_game_error_low_gpu_memory_info": "請勿在背景執行其他高GPU占用的 遊戲/應用程式,或更換顯示卡。",
|
||||
"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": "感謝使用 SC工具箱 ,我們致力於為您提供 安全、便捷、可靠的使用體驗,在您開始使用此應用程式前,請先閱讀並同意以下內容:\n\n 1. 本應用程式 為 GNU 通用公共許可證 v3.0 協議下的開源軟體,您可以在遵守協議的前提下自由使用、修改、分發本軟體。我們的源代碼位於:[Github.com/StarCitizenToolBox/app](https://github.com/StarCitizenToolBox/app)。\n2. 本應用程式中的網路內容(包括但不限於 本地化文件、工具網站、新聞、影片 等)版權由其作者創作所有,不屬於 GPL 的一部分,請在遵守對應的授權協議下使用。\n3. 本應用程式的官方免費發布渠道為:[Microsoft Store](https://apps.microsoft.com/detail/9NF3SWFWNKL1) 與[星際公民翻譯組官方網站](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_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": "(LOGO、標誌等)",
|
||||
"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": "開啟後在螢幕上顯示一個二維碼,用於回饋時讓 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": "解包星際公民 p4k 文件",
|
||||
"tools_unp4k_title": "P4K 查看器 -> {v0}",
|
||||
"tools_unp4k_view_file": "單擊文件以預覽",
|
||||
"tools_unp4k_msg_unknown_file_type": "未知文件類型\n{v0}",
|
||||
"home_localization_action_rsi_launcher_no_game_path_msg": "您當前未安裝遊戲本體或未選擇遊戲安裝目錄,只可使用啟動器翻譯功能。請確保遊戲安裝完畢或在工具箱設置中添加遊戲安裝目錄後重試。",
|
||||
"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": "安裝運行庫",
|
||||
"doctor_game_error_gpu_vulkan_crash": "GPU Vulkan 崩潰",
|
||||
"doctor_game_error_gpu_vulkan_crash_info": "Vulkan 崩潰!這可能是驅動版本或遊戲引擎問題,請嘗試更新 GPU 驅動 或 使用清理著色器功能為您回退到 DX11",
|
||||
"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": "在上方文本框中輸入文字,並將下方轉碼後的文本複製到遊戲的文本框中,即可在聊天頻道中發送遊戲不支持輸入的文字。",
|
||||
"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": "請使用您的移動設備掃描以下二維碼,或手動訪問連接",
|
||||
"input_method_service_qr_code": "服務二維碼",
|
||||
"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": "感謝您使用 SC工具箱,我是其開發者 xkeyC\n工具箱致力於開放原始碼並為各位玩家提供免費的服務,無償的服務是一項充滿挑戰的工作,若您考慮給我送點飲料錢,我將不勝感激。\n捐贈的資金將用於伺服器支出、新功能的開發,以及提高軟體維護的積極性。",
|
||||
"support_dev_thanks_message_part1": "感謝您使用 SC工具箱,我是其開發者 xkeyC\n工具箱致力於開放原始碼並為各位玩家提供免費的服務,",
|
||||
"support_dev_thanks_message_part2": "無償的服務是一項充滿挑戰的工作,若您考慮給我送點飲料錢,我將不勝感激。\n捐贈的資金將用於伺服器支出、新功能的開發,以及提高軟體維護的積極性。",
|
||||
"support_dev_referral_code_message": "如果您還沒有註冊遊戲或填寫邀請碼,可以考慮我的: STAR-3YXS-SWTC ,感謝你看到這裡",
|
||||
"support_dev_title": "支持開發者",
|
||||
"support_dev_github_star_message": "您也可以在 GitHub 上給我的專案點個 Star",
|
||||
"support_dev_github_star_button": "Star 專案",
|
||||
"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": "支付寶",
|
||||
"support_dev_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": "----- 工具箱疑難排解 -----",
|
||||
"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": "SC工具箱: log 分析器",
|
||||
"nav_title": "導航",
|
||||
"nav_third_party_service_disclaimer": "*對應鏈接指向的服務由第三方提供,我們不對其做任何擔保,請用戶自行判斷使用風險 | ",
|
||||
"nav_website_navigation_data_provided_by": "網站導航數據由",
|
||||
"nav_provided_by": "提供",
|
||||
"nav_fetching_data": "正在獲取數據..."
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user