Skip to content

Commit

Permalink
Feature: i18n (#70)
Browse files Browse the repository at this point in the history
* chore: add @inlang/paraglide-sveltekit to @kksh/ui

* feat: add i18n to desktop

* fix: add shrink-0 class to mode-toggle button for consistent styling

* feat: add i18n to settings, not working yet

* feat: i18 working

* feat: add i18n for about

* feat: migrate all goto to use i18n.resolveRoute

* feat: finish translating settings to chinese

* feat: add Chinese i18n for troubleshooters

* feat: add russian translation (by AI)

* format: run prettier

* format

* chore: update .prettierignore to exclude src/lib/paraglide/**
  • Loading branch information
HuakunShen authored Jan 20, 2025
1 parent c260ca2 commit b115e0a
Show file tree
Hide file tree
Showing 58 changed files with 1,516 additions and 246 deletions.
3 changes: 1 addition & 2 deletions .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
"@kksh/utils",
"@kksh/extension",
"@kksh/schema",
"@kksh/supabase",
"@kksh/ui"
"@kksh/supabase"
]
}
23 changes: 23 additions & 0 deletions .github/workflows/ninja_i18n.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

name: Ninja i18n action

on: pull_request_target

# explicitly configure permissions, in case your GITHUB_TOKEN workflow permissions are set to read-only in repository settings
permissions:
pull-requests: write # Necessary to comment on PRs
issues: read # Necessary to read issue comments
contents: read # Necessary to access the repo content

jobs:
ninja-i18n:
name: Ninja i18n - GitHub Lint Action
runs-on: ubuntu-latest

steps:
- name: Run Ninja i18n
# @main ensures that the latest version of the action is used
uses: opral/ninja-i18n-action@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

5 changes: 5 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,8 @@ pnpm --filter @kksh/desktop tauri dev
cd apps/desktop
pnpm tauri dev
```

## i188n

If you are willing to help with the translation, please use translations in json files in `apps/desktop/messages`.
Use `en.json` as a reference.
6 changes: 0 additions & 6 deletions apps/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
# kksh

## 0.0.30

### Patch Changes

- Add version check to cli, check if package.json and jsr.json have different versions

## 0.0.29

### Patch Changes
Expand Down
Binary file added apps/cli/bun.lockb
Binary file not shown.
2 changes: 1 addition & 1 deletion apps/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "kksh",
"module": "dist/cli.js",
"version": "0.0.30",
"version": "0.0.29",
"type": "module",
"bin": {
"kksh": "./dist/cli.js",
Expand Down
44 changes: 1 addition & 43 deletions apps/cli/src/commands/verify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,45 +32,6 @@ export function verifyTemplateUiCommand(projectRoot: string, cmd: TemplateUiCmd)
return true
}

export function verifyVersion(projectPath: string): boolean {
const pkgJsonPath = path.join(projectPath, "package.json")
const jsrJsonPath = path.join(projectPath, "jsr.json")
const denoJsonPath = path.join(projectPath, "deno.json")
const versions = { npm: undefined, jsr: undefined, deno: undefined }

const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"))
versions.npm = pkgJson.version
if (fs.existsSync(jsrJsonPath)) {
const jsrJson = JSON.parse(fs.readFileSync(jsrJsonPath, "utf-8"))
versions.jsr = jsrJson.version
}
if (fs.existsSync(denoJsonPath)) {
const denoJson = JSON.parse(fs.readFileSync(denoJsonPath, "utf-8"))
versions.deno = denoJson.version
}
if (!versions.npm) {
logger.error(`version is not set in package.json`)
return false
}
if (fs.existsSync(jsrJsonPath) && fs.existsSync(denoJsonPath)) {
logger.error(`Both jsr.json and deno.json are present, only one is allowed`)
return false
}
if (versions.jsr && versions.jsr !== versions.npm) {
logger.error(
`jsr.json version ${versions.jsr} does not match package.json version ${versions.npm}`
)
return false
}
if (versions.deno && versions.deno !== versions.npm) {
logger.error(
`deno.json version ${versions.deno} does not match package.json version ${versions.npm}`
)
return false
}
return true
}

export function verifySingleProject(projectPath: string): boolean {
logger.info(`Verifying project at ${projectPath}`)
const pkgJsonPath = path.join(projectPath, "package.json")
Expand All @@ -91,7 +52,7 @@ export function verifySingleProject(projectPath: string): boolean {
logger.info(`name`, pkg.name)
logger.info(`version`, pkg.version)
logger.info(`identifier`, pkg.kunkun.identifier)
if (!pkg.files?.length) {
if (pkg.files.length === 0) {
logger.warn(
`"files" field is empty, it is recommended to include only the necessary files, e.g. dist`
)
Expand All @@ -105,9 +66,6 @@ export function verifySingleProject(projectPath: string): boolean {
pkg.kunkun.identifier = folderName
// }
}
if (!verifyVersion(projectPath)) {
return false
}
for (const cmd of pkg.kunkun.customUiCmds ?? []) {
if (!verifyCustomUiCommand(projectPath, cmd)) {
return false
Expand Down
3 changes: 2 additions & 1 deletion apps/desktop/.prettierignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
src-tauri
src-tauri
src/lib/paraglide/**
81 changes: 81 additions & 0 deletions apps/desktop/messages/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",

"app_name": "KunKun",
"secondary_app_name": "KunKun",

"common_edit": "Edit",
"common_clear": "Clear",
"common_check": "Check",
"common_install": "Install",

"home_command_input_placeholder": "Type a command or search...",
"home_command_input_dropdown_quit": "Quit",
"home_command_input_dropdown_developer_title": "Developer",
"home_command_input_dropdown_close_window": "Close Window",
"home_command_input_dropdown_toggle_devtools": "Toggle Devtools",
"home_command_input_dropdown_reload_window": "Reload Window",
"home_command_input_dropdown_toggle_dev_extension_hmr": "Toggle Dev Extension HMR",

"command_group_heading_dev_ext": "Dev Extensions",
"command_group_heading_ext": "Extensions",
"command_group_heading_quick_links": "Quick Links",

"settings_menu_settings": "Settings",
"settings_menu_general": "General",
"settings_menu_developer": "Developer",
"settings_menu_extensions": "Extensions",
"settings_menu_set_dev_ext": "Set Dev Extension",
"settings_menu_add_dev_ext": "Add Dev Extension",
"settings_menu_about": "About",

"settings_general_launch_at_login": "Launch at Login",
"settings_general_hotkey": "Hotkey",
"settings_general_menu_bar_icon": "Menu Bar Icon",
"settings_general_hide_on_blur": "Hide On Blur",
"settings_general_extension_auto_upgrade": "Extension Auto Upgrade",
"settings_general_dev_extension_hmr": "Dev Extension HMR",
"settings_general_join_beta_updates": "Join Beta Updates",
"settings_general_developer_mode": "Developer Mode",
"settings_general_language": "Language",

"settings_about_version": "Version",
"settings_about_author": "Author",
"settings_about_source_code": "Source Code",
"settings_about_extensions_source_code": "Extensions Source Code",
"settings_about_check_for_updates": "Check for Updates",

"settings_set_dev_ext_title": "Set Dev Extension Path",
"settings_set_dev_ext_description": "This is where your extensions will be installed.",
"settings_set_dev_ext_enter_path": "Enter Path",

"settings_extensions_title": "Your Extensions",
"settings_extensions_table_col_name": "Name",
"settings_extensions_table_col_identifier": "Identifier",
"settings_extensions_table_col_type": "Type",
"settings_extensions_table_col_version": "Version",
"settings_extensions_table_col_uninstall": "Uninstall",

"settings_add_dev_ext_title": "Add Dev Extension",
"settings_add_dev_ext_description": "There are 4 options to install an extension in developer mode. Either load it from your local tarball file, a tarball remote URL, npm package name or load from a remote URL.",
"settings_add_dev_ext_install_from_ext_folders": "Install from Extension Folders",
"settings_add_dev_ext_install_from_ext_files": "Install from Extension Tarball File",
"settings_add_dev_ext_drag_and_drop": "Drag and Drop",
"settings_add_dev_ext_drag_and_drop2": "Extension Folder or Tarball",
"settings_add_dev_ext_install_tarball_from_url": "Install Tarball From URL",

"troubleshooters_sidebar_title": "Troubleshooters",
"troubleshooters_sidebar_extension_loading_title": "Extension Loading",
"troubleshooters_sidebar_extension_window_title": "Extension Window",
"troubleshooters_sidebar_mdns_debugger_title": "MDNS Debugger",

"troubleshooters_extension_window_title": "Extension Window Troubleshooter",
"troubleshooters_extension_window_refresh_every_second": "Refresh Every Second",
"troubleshooters_extension_window_refresh": "Refresh",
"troubleshooters_extension_window_refreshed": "Refreshed {count} times",

"troubleshooters_extension_loading_title": "Extension Loading Troubleshooter",
"troubleshooters_extension_loading_table_col_identifier": "Identifier",
"troubleshooters_extension_loading_table_col_path": "Path",
"troubleshooters_extension_loading_table_col_error": "Error"
}
81 changes: 81 additions & 0 deletions apps/desktop/messages/ru.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",

"app_name": "KunKun",
"secondary_app_name": "KunKun",

"common_edit": "Редактировать",
"common_clear": "Очистить",
"common_check": "Проверить",
"common_install": "Установить",

"home_command_input_placeholder": "Введите команду или поиск...",
"home_command_input_dropdown_quit": "Выйти",
"home_command_input_dropdown_developer_title": "Разработчик",
"home_command_input_dropdown_close_window": "Закрыть окно",
"home_command_input_dropdown_toggle_devtools": "Переключить Devtools",
"home_command_input_dropdown_reload_window": "Перезагрузить окно",
"home_command_input_dropdown_toggle_dev_extension_hmr": "Переключить HMR",

"command_group_heading_dev_ext": "Разработчики",
"command_group_heading_ext": "Расширения",
"command_group_heading_quick_links": "Быстрые ссылки",

"settings_menu_settings": "Настройки",
"settings_menu_general": "Общие",
"settings_menu_developer": "Разработчик",
"settings_menu_extensions": "Расширения",
"settings_menu_set_dev_ext": "Установить расширение",
"settings_menu_add_dev_ext": "Добавить расширение",
"settings_menu_about": "О программе",

"settings_general_launch_at_login": "Запуск при входе",
"settings_general_hotkey": "Горячая клавиша",
"settings_general_menu_bar_icon": "Иконка в меню",
"settings_general_hide_on_blur": "Скрыть при потере фокуса",
"settings_general_extension_auto_upgrade": "Автообновление расширений",
"settings_general_dev_extension_hmr": "HMR",
"settings_general_join_beta_updates": "Присоединиться к бета-версиям",
"settings_general_developer_mode": "Режим разработчика",
"settings_general_language": "Язык",

"settings_about_version": "Версия",
"settings_about_author": "Автор",
"settings_about_source_code": "Исходный код",
"settings_about_extensions_source_code": "Исходный код расширений",
"settings_about_check_for_updates": "Проверить на наличие обновлений",

"settings_set_dev_ext_title": "Установить путь к расширению",
"settings_set_dev_ext_description": "Это место, где будут установлены ваши расширения.",
"settings_set_dev_ext_enter_path": "Введите путь",

"settings_extensions_title": "Ваши расширения",
"settings_extensions_table_col_name": "Название",
"settings_extensions_table_col_identifier": "Идентификатор",
"settings_extensions_table_col_type": "Тип",
"settings_extensions_table_col_version": "Версия",
"settings_extensions_table_col_uninstall": "Удалить",

"settings_add_dev_ext_title": "Добавить расширение",
"settings_add_dev_ext_description": "Есть 4 способа установить расширение в режиме разработчика. Либо загрузите его из вашего локального файла tarball, URL-адреса tarball, npm-пакета или URL-адреса.",
"settings_add_dev_ext_install_from_ext_folders": "Установить из папки расширений",
"settings_add_dev_ext_install_from_ext_files": "Установить из файла tarball",
"settings_add_dev_ext_drag_and_drop": "Перетащите и отпустите",
"settings_add_dev_ext_drag_and_drop2": "Папка расширений или файл tarball",
"settings_add_dev_ext_install_tarball_from_url": "Установить tarball из URL",

"troubleshooters_sidebar_title": "Troubleshooters",
"troubleshooters_sidebar_extension_loading_title": "Загрузка расширения",
"troubleshooters_sidebar_extension_window_title": "Окно расширения",
"troubleshooters_sidebar_mdns_debugger_title": "MDNS Debugger",

"troubleshooters_extension_window_title": "Troubleshooter расширения",
"troubleshooters_extension_window_refresh_every_second": "Обновлять каждую секунду",
"troubleshooters_extension_window_refresh": "Обновить",
"troubleshooters_extension_window_refreshed": "Обновлено {count} раз",

"troubleshooters_extension_loading_title": "Troubleshooter загрузки расширения",
"troubleshooters_extension_loading_table_col_identifier": "Идентификатор",
"troubleshooters_extension_loading_table_col_path": "Путь",
"troubleshooters_extension_loading_table_col_error": "Ошибка"
}
81 changes: 81 additions & 0 deletions apps/desktop/messages/zh.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",

"app_name": "KunKun",
"secondary_app_name": "鲲鲲",

"common_edit": "编辑",
"common_clear": "清除",
"common_check": "检查",
"common_install": "安装",

"home_command_input_placeholder": "输入命令或搜索...",
"home_command_input_dropdown_quit": "退出",
"home_command_input_dropdown_developer_title": "开发者",
"home_command_input_dropdown_close_window": "关闭窗口",
"home_command_input_dropdown_toggle_devtools": "切换开发者工具",
"home_command_input_dropdown_reload_window": "重新加载窗口",
"home_command_input_dropdown_toggle_dev_extension_hmr": "切换开发插件 HMR",

"command_group_heading_dev_ext": "开发插件",
"command_group_heading_ext": "插件",
"command_group_heading_quick_links": "快捷链接",

"settings_menu_settings": "设置",
"settings_menu_general": "通用",
"settings_menu_developer": "开发者",
"settings_menu_extensions": "插件",
"settings_menu_set_dev_ext": "设置开发插件",
"settings_menu_add_dev_ext": "添加开发插件",
"settings_menu_about": "关于",

"settings_general_launch_at_login": "开机启动",
"settings_general_hotkey": "快捷键",
"settings_general_menu_bar_icon": "菜单栏图标",
"settings_general_hide_on_blur": "隐藏在后台",
"settings_general_extension_auto_upgrade": "自动更新插件",
"settings_general_dev_extension_hmr": "开发模式",
"settings_general_join_beta_updates": "加入 Beta 更新",
"settings_general_developer_mode": "开发者模式",
"settings_general_language": "语言",

"settings_about_version": "版本",
"settings_about_author": "作者",
"settings_about_source_code": "源代码",
"settings_about_extensions_source_code": "插件源代码",
"settings_about_check_for_updates": "检查更新",

"settings_set_dev_ext_title": "设置开发插件安装路径",
"settings_set_dev_ext_description": "这是你的开发插件将被安装的地方。",
"settings_set_dev_ext_enter_path": "输入路径",

"settings_extensions_title": "你的插件",
"settings_extensions_table_col_name": "名称",
"settings_extensions_table_col_identifier": "标识符",
"settings_extensions_table_col_type": "类型",
"settings_extensions_table_col_version": "版本",
"settings_extensions_table_col_uninstall": "卸载",

"settings_add_dev_ext_title": "添加开发插件",
"settings_add_dev_ext_description": "有四种方法可以在开发模式下安装插件。 从本地 tarball 文件、tarball 远程 URL、npm 包名称或远程 URL 加载。",
"settings_add_dev_ext_install_from_ext_folders": "从插件文件夹安装",
"settings_add_dev_ext_install_from_ext_files": "从插件 tarball 文件安装",
"settings_add_dev_ext_drag_and_drop": "拖放",
"settings_add_dev_ext_drag_and_drop2": "插件文件夹或 tarball",
"settings_add_dev_ext_install_tarball_from_url": "从 tarball URL 安装",

"troubleshooters_sidebar_title": "故障排除器",
"troubleshooters_sidebar_extension_loading_title": "插件加载",
"troubleshooters_sidebar_extension_window_title": "插件窗口",
"troubleshooters_sidebar_mdns_debugger_title": "MDNS 调试器",

"troubleshooters_extension_window_title": "插件窗口故障排除器",
"troubleshooters_extension_window_refresh_every_second": "每秒刷新",
"troubleshooters_extension_window_refresh": "刷新",
"troubleshooters_extension_window_refreshed": "已刷新 {count} 次",

"troubleshooters_extension_loading_title": "插件加载故障排除器",
"troubleshooters_extension_loading_table_col_identifier": "标识符",
"troubleshooters_extension_loading_table_col_path": "路径",
"troubleshooters_extension_loading_table_col_error": "错误"
}
Loading

0 comments on commit b115e0a

Please sign in to comment.