Skip to content

feat(i18n): add Japanese UI support#2285

Open
jsaaa wants to merge 2 commits into
OneDragon-Anything:mainfrom
jsaaa:feature/japanese-ui
Open

feat(i18n): add Japanese UI support#2285
jsaaa wants to merge 2 commits into
OneDragon-Anything:mainfrom
jsaaa:feature/japanese-ui

Conversation

@jsaaa
Copy link
Copy Markdown

@jsaaa jsaaa commented May 23, 2026

Summary

  • Add Japanese UI/game translation resources.
  • Add Japanese language selection support and compile .po files to .mo outputs.
  • Translate remaining UI labels, OneDragon notification text, Lost Void settings, and agent names at display time.

Note

This PR is split out from #2262 based on review feedback, so it only contains the Japanese UI/i18n changes. The Discord screenshot notification changes will be submitted separately.

Test

  • python -m py_compile src\one_dragon\utils\i18_utils.py src\one_dragon\devtools\compile_po.py src\one_dragon_qt\view\setting\setting_push_interface.py src\zzz_od\application\notify\notify_app.py

Summary by CodeRabbit

  • New Features

    • 添加日语支持,可在界面与游戏语言设置中选择日本語;界面模型语言可与游戏语言分开同步。
  • Localization

    • 大量界面文案、按钮、提示、对话与工具提示已国际化,适配多语言显示(含日语)。
    • 通知、记录与地图/编辑器等视图文案均已走翻译流程。
  • Chores

    • 翻译编译流程扩展以生成日语资源;改进系统语言检测逻辑。

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 23, 2026

📝 Walkthrough

Walkthrough

本 PR 为应用引入日语:新增日语 .po 资源,扩展 i18n 工具与语言检测,添加配置枚举项并在初始化中同步模型语言;同时将大量 UI 与若干业务文案替换为 gt(...),并更新编译脚本以生成日语 mo 文件。

变更

日语本地化支持实现

层级 / 文件 摘要
国际化核心基础设施和配置
src/one_dragon/utils/i18_utils.py, src/one_dragon/base/config/custom_config.py, src/one_dragon/base/config/game_account_config.py, src/one_dragon/base/operation/one_dragon_context.py, src/one_dragon/devtools/compile_po.py, assets/text/game/ja.po
增强 i18_utils:新增 update_model_lang()/get_model_lang()、改进 detect_language() 支持日语;在 UILanguageEnum/GameLanguageEnum 中新增 JA;初始化流程同步 UI/game 模型语言;compile_po 支持日语编译;新增 543 行日语翻译资源。
系统语言检测更新
src/one_dragon_qt/app/directory_picker.py
将系统语言检测从 locale.getdefaultlocale() 改为 locale.getlocale() 并收窄异常类型。
应用初始化UI语言流程
src/zzz_od/gui/app.py
AppWindow 初始化中读取 ctx.custom_config.ui_language,自动模式下检测并设置默认语言,手动模式下更新并同步 ui 模型语言;整理子界面导入格式。
基础UI组件国际化
src/one_dragon_qt/widgets/base_interface.py, src/one_dragon_qt/widgets/icon_button.py, src/one_dragon_qt/windows/window.py, src/one_dragon_qt/widgets/setting_card/combo_box_setting_card.py, src/one_dragon_qt/widgets/setting_card/help_card.py, src/one_dragon_qt/widgets/setting_card/setting_card_base.py, src/one_dragon_qt/widgets/setting_card/app_run_card.py
为通用组件添加 gt() 包装:InfoBar 标题/内容、TeachingTip、标题栏版本按钮与设置卡片的文本与 tooltip。
通知和推送界面国际化
src/zzz_od/application/notify/notify_app.py, src/one_dragon_qt/view/setting/setting_push_interface.py
通知消息与推送设置界面将固定文案改为 gt() 获取翻译(当前体力、运行完成、成功/失败等)。
首页启动界面国际化
src/zzz_od/gui/view/home/home_interface.py
首页启动按钮、状态提示与 InfoBar 文案改为 gt()
体力计划界面本地化
src/zzz_od/gui/view/one_dragon/charge_plan_interface.py
删除/确认对话框文案改为 gt()
空洞零相关界面本地化
src/zzz_od/gui/view/hollow_zero/lost_void_challenge_config_interface.py, src/zzz_od/gui/view/hollow_zero/lost_void_setting_interface.py
配置下拉项、错误提示与运行记录文案改为 gt()
图标编辑器与开发工具本地化
src/zzz_od/gui/view/devtools/icon_editor_dialog.py, src/zzz_od/gui/view/devtools/template_card_widget.py
图标编辑器与模板卡片的标题/按钮/表头/tooltip 使用 gt();表格编辑权限与信号连接整理,部分方法补充类型注解。
世界巡逻相关界面本地化
src/zzz_od/gui/view/world_patrol/world_patrol_route_list_interface.py, src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py, src/zzz_od/gui/view/world_patrol/world_patrol_large_map_recorder_interface.py
路线列表、大地图录制、路线编辑对话框的按钮、表头和消息对话框改为 gt();路线编辑包含添加/删除/上移/下移/保存校验流程(本地化文案)。
路线录制界面本地化与调试改进
src/zzz_od/gui/view/world_patrol/world_patrol_route_recorder_interface.py
控制面板按钮本地化、调试异常处理收窄、日志输出调整与无用条件移除。
游戏任务前往按钮多语言识别
src/zzz_od/operation/compendium/compendium_choose_mission_type.py
扩展 GO/前往 按钮 OCR 识别策略:多语言候选、OCR 直接匹配 GO,并补充参数类型注解。

🎯 4 (Complex) | ⏱️ ~60 minutes

  • Suggested reviewers:
    • DoctorReid

🐰 樱花落在代码行,
前往按钮会说日语,
模型语言各自记,
翻译覆盖界面里,
一条龙也能说こんにちは!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 64.20% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR标题清晰准确地概括了主要变更:添加日语UI支持。标题与文件变更内容完全相符,涵盖了日语本地化资源、语言选项配置和UI文案的国际化等核心改动。
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
src/zzz_od/gui/view/devtools/icon_editor_dialog.py (1)

202-225: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

补齐本次变更方法签名的类型注解。

_on_selection_changed_on_item_changed_on_save_clicked 在变更范围内仍缺少完整类型注解,和仓库 Python 规范不一致。

建议修改
+from PySide6.QtWidgets import QTableWidgetItem
@@
-    def _on_selection_changed(self):
+    def _on_selection_changed(self) -> None:
@@
-    def _on_item_changed(self, item):
+    def _on_item_changed(self, item: QTableWidgetItem) -> None:
@@
-    def _on_save_clicked(self):
+    def _on_save_clicked(self) -> None:

As per coding guidelines **/*.py: "All functions and methods must include type hints (Type Hints)",且 src/**/*.py: "All function signatures and class member variables must have type annotations"。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/zzz_od/gui/view/devtools/icon_editor_dialog.py` around lines 202 - 225,
Add explicit type hints to the three methods in icon_editor_dialog: change
_on_selection_changed to declare its return type (e.g., def
_on_selection_changed(self) -> None), change _on_item_changed to accept a typed
item parameter (e.g., def _on_item_changed(self, item: QTableWidgetItem) ->
None) and change _on_save_clicked to declare its return type (e.g., def
_on_save_clicked(self) -> None); import QTableWidgetItem (from PyQt5.QtWidgets
or PySide equivalent) and typing helpers if needed and update any related
stub/annotation for self.current_icon_list or signals only if your linter
requires explicit attribute types. Ensure signatures use the same Qt class names
used elsewhere in the module so imports remain consistent.
src/one_dragon_qt/app/directory_picker.py (1)

90-99: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

语言检测分支建议仅捕获预期异常。

Line 98 使用 except Exception 过宽,建议改为 except locale.Error(或你们明确的异常集合),避免掩盖真实故障。

Based on learnings: "never use a bare except: for this logic—narrow it to except locale.Error: (or otherwise catch the specific expected exception type)."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/one_dragon_qt/app/directory_picker.py` around lines 90 - 99, The
detect_language function currently swallows all exceptions via "except
Exception", which is too broad; change the exception handler to catch only the
expected locale-related errors (e.g., "except locale.Error:" or a small explicit
tuple of exceptions) around the call to locale.getlocale() so other bugs aren't
masked, and keep the existing fallback return 'zh' behavior; refer to the
detect_language function and the locale.getlocale() call when making this
change.
src/one_dragon/devtools/compile_po.py (1)

8-8: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

补全函数返回类型注解。

Line 8 与 Line 26 的函数签名建议显式标注 -> None,与仓库 Python 类型规范保持一致。

💡 建议修改
-def compile_lang(model: str, lang: str):
+def compile_lang(model: str, lang: str) -> None:
@@
-def compile_po_files():
+def compile_po_files() -> None:

As per coding guidelines: "**/*.py: All functions and methods must include type hints (Type Hints)".

Also applies to: 26-26

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/one_dragon/devtools/compile_po.py` at line 8, Add explicit return type
annotations "-> None" to the function signatures in this file—at minimum update
compile_lang(model: str, lang: str) to compile_lang(model: str, lang: str) ->
None; also update the other function signature flagged on line 26 in the same
module to include "-> None" so all functions conform to the repository's Python
type-hinting guidelines.
src/zzz_od/operation/compendium/compendium_choose_mission_type.py (1)

129-129: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

handle_go_buttonscreen 参数补充类型标注。

Line 129 的 screen 参数当前无类型提示,不满足本仓库对 src/**/*.py 的函数签名标注要求。建议至少标为 Any(或项目内更准确的图像类型)。

建议修改
+from typing import Any
...
-    def handle_go_button(self, screen, target_point: Point) -> OperationRoundResult:
+    def handle_go_button(self, screen: Any, target_point: Point) -> OperationRoundResult:

As per coding guidelines: All functions and methods must include type hints (Type Hints)src/**/*.pyAll function signatures ... must have type annotations

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/zzz_od/operation/compendium/compendium_choose_mission_type.py` at line
129, The method handle_go_button is missing a type annotation for its screen
parameter; update the signature of handle_go_button(self, screen, target_point:
Point) -> OperationRoundResult to include a type for screen (e.g., screen: Any
or a more specific image/screen type used in the repo) and add the corresponding
import (typing.Any or the concrete type) at the top of the file so the function
signature in compendium_choose_mission_type.py complies with the project's
type-hinting requirements.
🧹 Nitpick comments (1)
src/zzz_od/gui/view/home/home_interface.py (1)

638-638: ⚡ Quick win

建议将数量+文案改为整句翻译模板

Line 638 当前把数字与文本拆开翻译,日语等语言下词序不够灵活。建议把整句作为翻译键并使用占位符。

可参考的修改
-            self.start_button.setText(f"{len(issues)} {gt('项待配置')} ")
+            self.start_button.setText(gt('{count}项待配置').format(count=len(issues)))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/zzz_od/gui/view/home/home_interface.py` at line 638, The UI text
currently concatenates a number and a translated fragment via
start_button.setText(f"{len(issues)} {gt('项待配置')} "), which breaks word order in
other languages; change to use a single translation template with a placeholder
(e.g., gt("有 {count} 项待配置") or similar) and pass/format len(issues) into that
template so the entire sentence is localized as one unit (update the call around
start_button.setText and gt to use the placeholder and formatting with
len(issues)).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/one_dragon/utils/i18_utils.py`:
- Around line 23-24: Narrow the broad exception handler that currently does
"except Exception: return 'zh'" to only catch locale-related errors (use "except
locale.Error:"), so replace the generic except in
src/one_dragon/utils/i18_utils.py with an except locale.Error that returns 'zh'
and let any other exceptions propagate; ensure the module imports the locale
module or the specific exception type so the new handler compiles.
- Around line 87-95: Annotate the module-level mapping and the function return
type: add a type annotation declaring _model_lang as dict[str, str] and change
the signature of update_model_lang to include an explicit return type -> None;
keep get_model_lang as is (it already returns str) and ensure the annotations
use the same names (_model_lang, update_model_lang, get_model_lang) so the type
checker recognizes the mapping and the void return.

In `@src/zzz_od/gui/view/devtools/icon_editor_dialog.py`:
- Around line 238-239: Replace the fragmented translation strings with a single
parameterized translation key: instead of concatenating gt('确定要删除图标') + icon
name + template id + gt('吗?') + gt('此操作不可撤销。'), call gt once with placeholders
(e.g. gt('确定要删除图标 "{name}" ({id}) 吗?此操作不可撤销。')) and pass icon.icon_name and
icon.template_id into the placeholder interpolation so the entire confirmation
message for the delete dialog in icon_editor_dialog.py is translated as one
unit.

In `@src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py`:
- Around line 169-173: The confirmation message is built by concatenating
multiple gt(...) calls which breaks i18n for languages with different word
order; replace the concatenation around QMessageBox.question by using a single
formatable translation template (call gt once with a placeholder e.g.
"确定要删除第{index}个操作吗?") and inject current_row into that template (use the
existing gt function + .format or equivalent) in the QMessageBox.question call;
apply the same change to the other similar concatenations referenced around the
current file (the occurrences at the blocks using gt and current_row on lines
near 204-205 and 211-212) so all deletion/confirmation strings use one gt(...)
template with a parameter.

---

Outside diff comments:
In `@src/one_dragon_qt/app/directory_picker.py`:
- Around line 90-99: The detect_language function currently swallows all
exceptions via "except Exception", which is too broad; change the exception
handler to catch only the expected locale-related errors (e.g., "except
locale.Error:" or a small explicit tuple of exceptions) around the call to
locale.getlocale() so other bugs aren't masked, and keep the existing fallback
return 'zh' behavior; refer to the detect_language function and the
locale.getlocale() call when making this change.

In `@src/one_dragon/devtools/compile_po.py`:
- Line 8: Add explicit return type annotations "-> None" to the function
signatures in this file—at minimum update compile_lang(model: str, lang: str) to
compile_lang(model: str, lang: str) -> None; also update the other function
signature flagged on line 26 in the same module to include "-> None" so all
functions conform to the repository's Python type-hinting guidelines.

In `@src/zzz_od/gui/view/devtools/icon_editor_dialog.py`:
- Around line 202-225: Add explicit type hints to the three methods in
icon_editor_dialog: change _on_selection_changed to declare its return type
(e.g., def _on_selection_changed(self) -> None), change _on_item_changed to
accept a typed item parameter (e.g., def _on_item_changed(self, item:
QTableWidgetItem) -> None) and change _on_save_clicked to declare its return
type (e.g., def _on_save_clicked(self) -> None); import QTableWidgetItem (from
PyQt5.QtWidgets or PySide equivalent) and typing helpers if needed and update
any related stub/annotation for self.current_icon_list or signals only if your
linter requires explicit attribute types. Ensure signatures use the same Qt
class names used elsewhere in the module so imports remain consistent.

In `@src/zzz_od/operation/compendium/compendium_choose_mission_type.py`:
- Line 129: The method handle_go_button is missing a type annotation for its
screen parameter; update the signature of handle_go_button(self, screen,
target_point: Point) -> OperationRoundResult to include a type for screen (e.g.,
screen: Any or a more specific image/screen type used in the repo) and add the
corresponding import (typing.Any or the concrete type) at the top of the file so
the function signature in compendium_choose_mission_type.py complies with the
project's type-hinting requirements.

---

Nitpick comments:
In `@src/zzz_od/gui/view/home/home_interface.py`:
- Line 638: The UI text currently concatenates a number and a translated
fragment via start_button.setText(f"{len(issues)} {gt('项待配置')} "), which breaks
word order in other languages; change to use a single translation template with
a placeholder (e.g., gt("有 {count} 项待配置") or similar) and pass/format
len(issues) into that template so the entire sentence is localized as one unit
(update the call around start_button.setText and gt to use the placeholder and
formatting with len(issues)).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 996366d7-038f-477b-b348-6a61cf504b5f

📥 Commits

Reviewing files that changed from the base of the PR and between 5511999 and 25b8d72.

📒 Files selected for processing (31)
  • assets/text/game/ja.po
  • assets/text/output/ja/LC_MESSAGES/game.mo
  • assets/text/output/ja/LC_MESSAGES/ui.mo
  • assets/text/ui/ja.po
  • src/one_dragon/base/config/custom_config.py
  • src/one_dragon/base/config/game_account_config.py
  • src/one_dragon/base/operation/one_dragon_context.py
  • src/one_dragon/devtools/compile_po.py
  • src/one_dragon/utils/i18_utils.py
  • src/one_dragon_qt/app/directory_picker.py
  • src/one_dragon_qt/view/setting/setting_push_interface.py
  • src/one_dragon_qt/widgets/base_interface.py
  • src/one_dragon_qt/widgets/icon_button.py
  • src/one_dragon_qt/widgets/setting_card/app_run_card.py
  • src/one_dragon_qt/widgets/setting_card/combo_box_setting_card.py
  • src/one_dragon_qt/widgets/setting_card/help_card.py
  • src/one_dragon_qt/widgets/setting_card/setting_card_base.py
  • src/one_dragon_qt/windows/window.py
  • src/zzz_od/application/notify/notify_app.py
  • src/zzz_od/gui/app.py
  • src/zzz_od/gui/view/devtools/icon_editor_dialog.py
  • src/zzz_od/gui/view/devtools/template_card_widget.py
  • src/zzz_od/gui/view/hollow_zero/lost_void_challenge_config_interface.py
  • src/zzz_od/gui/view/hollow_zero/lost_void_setting_interface.py
  • src/zzz_od/gui/view/home/home_interface.py
  • src/zzz_od/gui/view/one_dragon/charge_plan_interface.py
  • src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py
  • src/zzz_od/gui/view/world_patrol/world_patrol_large_map_recorder_interface.py
  • src/zzz_od/gui/view/world_patrol/world_patrol_route_list_interface.py
  • src/zzz_od/gui/view/world_patrol/world_patrol_route_recorder_interface.py
  • src/zzz_od/operation/compendium/compendium_choose_mission_type.py

Comment thread src/one_dragon/utils/i18_utils.py Outdated
Comment thread src/one_dragon/utils/i18_utils.py Outdated
Comment thread src/zzz_od/gui/view/devtools/icon_editor_dialog.py Outdated
Comment thread src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py
@jsaaa
Copy link
Copy Markdown
Author

jsaaa commented May 23, 2026

已处理 CodeRabbit 的审查意见:

  • 为新增/变更的方法补充类型注解。
  • 将语言检测中的宽泛异常捕获收窄为 locale.Error
  • 将拼接式翻译文案改为带占位符的完整翻译模板。
  • 补充对应日语翻译并重新生成 ui.mo

验证:

  • python -m py_compile src\one_dragon\utils\i18_utils.py src\one_dragon_qt\app\directory_picker.py src\one_dragon\devtools\compile_po.py src\zzz_od\gui\view\devtools\icon_editor_dialog.py src\zzz_od\operation\compendium\compendium_choose_mission_type.py src\zzz_od\gui\view\home\home_interface.py src\zzz_od\gui\view\world_patrol\route_operation_editor_dialog.py

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py (1)

172-172: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

修正序号展示的 off-by-one(用户会看到“第0个”)

Line 172、Line 204、Line 211 目前传入的是 0 基索引,首项会显示为“第0个操作”。建议展示为 1 基序号。

💡 建议修改
-                gt('确定要删除第{index}个操作吗?').format(index=current_row),
+                gt('确定要删除第{index}个操作吗?').format(index=current_row + 1),
@@
-                QMessageBox.warning(self, gt('数据错误'), gt('第{index}个操作的数据不完整').format(index=i))
+                QMessageBox.warning(self, gt('数据错误'), gt('第{index}个操作的数据不完整').format(index=i + 1))
@@
-                QMessageBox.warning(self, gt('数据错误'), gt('第{index}个操作的坐标数据必须是数字').format(index=i))
+                QMessageBox.warning(self, gt('数据错误'), gt('第{index}个操作的坐标数据必须是数字').format(index=i + 1))

Also applies to: 204-205, 211-212

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py` at line
172, The displayed operation index is using a 0-based value (current_row) which
causes "第0个" to appear; update each gt(...).format(index=current_row) usage to
pass a 1-based index (e.g., format(index=current_row + 1)). Locate the
occurrences where gt('确定要删除第{index}个操作吗?').format(index=current_row) and the
similar gt(...) calls at the other two sites (the strings around
deletion/position messages) and change their format argument to current_row + 1
so the UI shows 1-based ordinal numbers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py`:
- Line 172: The displayed operation index is using a 0-based value (current_row)
which causes "第0个" to appear; update each gt(...).format(index=current_row)
usage to pass a 1-based index (e.g., format(index=current_row + 1)). Locate the
occurrences where gt('确定要删除第{index}个操作吗?').format(index=current_row) and the
similar gt(...) calls at the other two sites (the strings around
deletion/position messages) and change their format argument to current_row + 1
so the UI shows 1-based ordinal numbers.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8184c117-cae5-41f1-99ca-acb581812b7c

📥 Commits

Reviewing files that changed from the base of the PR and between 25b8d72 and 68970ba.

📒 Files selected for processing (9)
  • assets/text/output/ja/LC_MESSAGES/ui.mo
  • assets/text/ui/ja.po
  • src/one_dragon/devtools/compile_po.py
  • src/one_dragon/utils/i18_utils.py
  • src/one_dragon_qt/app/directory_picker.py
  • src/zzz_od/gui/view/devtools/icon_editor_dialog.py
  • src/zzz_od/gui/view/home/home_interface.py
  • src/zzz_od/gui/view/world_patrol/route_operation_editor_dialog.py
  • src/zzz_od/operation/compendium/compendium_choose_mission_type.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant