Merge pull request #270 from denymz/i18n-add-zh

Added zh-CN language
This commit is contained in:
seriousm4x
2023-10-18 18:20:26 +02:00
committed by GitHub
8 changed files with 232 additions and 5 deletions

View File

@@ -79,6 +79,10 @@
case 'pt-PT':
dateFnsLocale = (await import('date-fns/locale/pt/index.js')).default;
break;
case 'zh':
case 'zh-CN':
dateFnsLocale = (await import('date-fns/locale/zh/index.js')).default;
break;
default:
dateFnsLocale = (await import('date-fns/locale/en-US/index.js')).default;
break;

View File

@@ -9,7 +9,7 @@ import type {
export type BaseTranslation = BaseTranslationType;
export type BaseLocale = 'en';
export type Locales = 'de' | 'de-DE' | 'en' | 'en-US' | 'fr' | 'fr-FR' | 'pt' | 'pt-PT';
export type Locales = 'de' | 'de-DE' | 'en' | 'en-US' | 'fr' | 'fr-FR' | 'pt' | 'pt-PT' | 'zh' | 'zh-CN';
export type Translation = RootTranslation;

View File

@@ -13,7 +13,9 @@ const localeTranslationLoaders = {
fr: () => import('./fr'),
'fr-FR': () => import('./fr-FR'),
pt: () => import('./pt'),
'pt-PT': () => import('./pt-PT')
'pt-PT': () => import('./pt-PT'),
zh: () => import('./zh'),
'zh-CN': () => import('./zh-CN')
};
const updateDictionary = (locale: Locales, dictionary: Partial<Translations>): Translations =>

View File

@@ -13,6 +13,8 @@ import fr from './fr';
import fr_FR from './fr-FR';
import pt from './pt';
import pt_PT from './pt-PT';
import zh from './zh';
import zh_CN from './zh-CN';
const localeTranslations = {
de,
@@ -22,7 +24,9 @@ const localeTranslations = {
fr,
'fr-FR': fr_FR,
pt,
'pt-PT': pt_PT
'pt-PT': pt_PT,
zh,
'zh-CN': zh_CN
};
export const loadLocale = (locale: Locales): void => {

View File

@@ -14,7 +14,7 @@ import type { Formatters, Locales, Translations, TranslationFunctions } from './
export const baseLocale: Locales = 'en';
export const locales: Locales[] = ['de', 'de-DE', 'en', 'en-US', 'fr', 'fr-FR', 'pt', 'pt-PT'];
export const locales: Locales[] = ['de', 'de-DE', 'en', 'en-US', 'fr', 'fr-FR', 'pt', 'pt-PT', 'zh', 'zh-CN'];
export const isLocale = (locale: string): locale is Locales => locales.includes(locale as Locales);

View File

@@ -0,0 +1,8 @@
import zh from '../zh';
import type { Translation } from '../i18n-types';
const zh_CN = {
...(zh as unknown as Translation)
} satisfies Translation;
export default zh_CN;

View File

@@ -0,0 +1,207 @@
import type { BaseTranslation } from '../i18n-types';
const zh = {
home: {
page_title: '首页',
order_groups: '分组',
order_name: '名称',
order_ip: 'IP地址',
order_tooltip: '排序',
no_devices: '还没有任何设备',
add_first_device: '添加您的第一台设备',
grant_permissions: '请联系管理员授予您相应权限.'
},
account: {
page_title: '账户信息',
account_type_admin: '管理员',
account_type_user: '普通用户',
avatar_title: '头像',
language_title: '语言',
language_option_auto: '自动',
change_password_title: '更改密码',
change_password_body: '更改密码后, 您需要重新登录.',
change_password_label: '旧密码',
change_password_new: '新密码',
change_password_confirm: '确认密码'
},
device: {
page_title: '新设备',
tabs: ['手动配置', '网络扫描'],
card_btn_more: '更多',
card_btn_more_edit: '编辑',
card_btn_more_sleep: 'Sleep',
card_btn_more_reboot: '重启',
card_tooltip_wake_cron: '唤醒计划',
card_tooltip_shutdown_cron: '关机计划',
card_tooltip_wake_password: '唤醒密码',
card_tooltip_last_status_change: '最近状态更新',
card_password: '密码',
card_nic_tooltip_pending: '等待中...',
card_nic_tooltip_shutdown: '关机',
card_nic_tooltip_shutdown_no_cmd: '未设置关机命令',
card_nic_tooltip_shutdown_no_permission: '没有关闭此设备的权限',
card_nic_tooltip_power: '启动',
card_nic_tooltip_power_no_permission: '没有启动此设备的权限',
general: '通用',
general_name: '名称',
general_name_placeholder: '设备名',
general_ip: 'IP',
general_mac: 'Mac',
general_netmask: '子网掩码',
general_required_field: '必填字段',
ports: '端口',
ports_desc: 'UpSnap 可以检查设备端口是否正常.',
ports_add_new: '添加端口',
ports_name: '名称',
ports_number: '端口号',
link: '链接',
link_desc:
'为您的设备名设置一个可点击的链接.',
wake: '唤醒',
wake_desc: '您可以通过计划任务来唤醒设备.',
wake_cron: '唤醒计划任务',
wake_cron_enable: '启用定时唤醒',
sol: 'Sleep-On-LAN',
sol_desc1:
'您可以使用 <a class="link" href="https://github.com/SR-G/sleep-on-lan" target="_blank">Sleep-On-LAN</a> 工具让计算机进入睡眠状态. Sleep-On-LAN (SOL) 是一个外部的工具/守护程序, 它在您想要进入休眠状态的PC上运行并提供RestApi接口. 有关 Sleep-On-LAN 设置的说明, 请参阅文档 <a href="https://github.com/SR-G/sleep-on-lan#usage" class="link" target="_blank">Usage</a> 部分.',
sol_desc2:
'SOL 配置为通过HTTP而不是UDP发送请求, 以启用认证功能并使请求更可靠',
sol_desc3:
'因此, 请确保在 <a href="https://github.com/SR-G/sleep-on-lan#configuration" class="link" target="_blank">SOL 配置</a> 的 <span class="badge">Listeners</span> 部分中包含<span class="badge">HTTP:&lt;YOURPORT&gt;</span>',
sol_enable: '启用 Sleep-On-LAN',
sol_port: 'SOL 端口',
sol_authorization: '认证',
sol_user: 'SOL 账号',
sol_password: 'SOL 密码',
shutdown: '关机',
shutdown_desc:
'此 <strong>shell 命令</strong> 将在您的容器内运行 (如果使用的是Docker) 或在您的主机上运行. 要验证该命令是否有效, 您可以在容器内或主机上的shell中运行该命令. 通常在 Windows 上使用 <span class="badge">net rpc</span>, Linux上使用 <span class="badge">sshpass</span> 或者针对Web请求使用 <span class="badge">curl</span>.',
shutdown_examples: '示例:',
shutdown_examples_windows: '关闭远程 Windows 主机:',
shutdown_examples_linux: '关闭远程 Linux 主机:',
shutdown_cmd: '关机命令',
shutdown_cron_desc: '就像设置计划任务来唤醒设备一样, 您也可以设置计划任务来关闭该设备.',
shutdown_cron: '关机计划任务',
shutdown_cron_enable: '启用定时关机',
password: '密码',
password_desc:
'一些网卡允许为 magic packets 设置密码, 也可以称之为 <span class="badge">SecureON</span>. 密码长度只能为0、4或6个字符.',
groups: '分组',
groups_desc: '您可以将设备添加到组, 以便在控制面板上按组对其进行排序.',
groups_placeholder: "例如: 'Basement' 或 'Office'",
network_scan_range_saved: '扫描范围已保存',
network_scan_desc: '自动扫描网络中的设备. 要实现这一点, 您需要以超级用户/管理员身份运行 UpSnap, 并在您的 $PATH 中安装和使用nmap(对于docker用户, 您不需要执行任何操作). 扫描可能需要一些时间.',
network_scan_ip_range: 'IP 范围',
network_scan_no_range: '无扫描范围',
network_scan_unsaved_changes: '未保存的更改',
network_scan_running: '扫描中',
network_scan: '扫描',
network_scan_ip: 'IP:',
network_scan_mac: 'Mac:',
network_scan_mac_vendor: 'Mac 供应商:',
network_scan_netmask: '子网掩码:',
network_scan_add_all: '添加全部设备',
network_scan_replace_netmask: '更换所有设备的子网掩码?',
network_scan_new_netmask: '新子网掩码',
network_scan_include_unknown: '包括名称为 “Unknown” 的设备'
},
login: {
welcome: '欢迎使用',
email_label: '邮箱/用户名:',
password_label: '密码:',
btn_more: '更多',
menu_title_auth_providers: '其他身份验证提供程序',
btn_login: '登录'
},
settings: {
page_title: '设置',
ping_interval_title: 'Ping 间隔',
ping_interval_desc1:
'设置 ping 的间隔。为空时使用默认值 <span class="badge">@every 3s</span>.',
ping_interval_desc2:
'有关 cron 的更多信息, 请访问<a class="link" href="https://en.wikipedia.org/wiki/Cron" target="_blank">Wikipedia</a> 或参阅 <a class="link" href="https://pkg.go.dev/github.com/robfig/cron/v3" target="_blank">cron 文档</a>.',
lazy_ping_title: 'Lazy ping',
lazy_ping_desc:
"当开关打开时, UpSnap 只会在用户访问网站期间进行 ping 操作.",
lazy_ping_enable: '启用',
website_title_title: '网站标题',
website_title_desc: '设置在浏览器选项卡和网站中显示标题',
icon_title: '图标',
icon_desc: '设置一个自定义图标. 支持的文件类型:',
upsnap_version: 'UpSnap 版本'
},
users: {
page_title: '用户',
allow_create_devices: '允许 {username} 创建新设备和编辑设备组',
device_permissions: '设备权限',
create_new_device: '创建新设备',
read: '查看',
update: '更新',
delete: '删除',
power: '电源',
toggle: '全选',
confirm_delete_title: '确认删除',
confirm_delete_desc: '您确定要删除 {username} 吗?',
create_new_user: '新增用户',
username: '用户名',
password: '密码',
password_confirm: '确认密码',
required_field: '必填字段'
},
buttons: {
save: '保存',
delete: '删除',
change: '更改',
reset: '重置',
cancel: '取消',
add: '添加'
},
welcome: {
step1_page_title: '欢迎使用 UpSnap 🥳',
step1_setup_desc: '初次使用, 请依照指示完成下列步骤.',
step1_setup_btn_next: '下一步',
step2_page_title: '创建管理员账号',
step2_label_email: '邮箱:',
step2_label_password: '密码:',
step2_label_min_chars: '请输入至少10个字符',
step2_label_password_confirm: '确认密码:',
step2_btn_create: '创建',
step3_page_title: '一切就绪! 🎉',
step3_page_desc: '继续向您的仪表板添加一些设备.',
step3_btn_done: '开始使用!',
not_expected_title: "意料之外! 🧐",
not_expected_desc: '您已经完成了设置, 无需再次设置',
not_expected_back: '返回',
progress_step1: '欢迎',
progress_step2: '创建账号',
progress_step3: '完成'
},
toasts: {
admin_saved: '账户信息已保存',
user_saved: '账户信息已保存',
user_created: '用户 {username} 已创建',
user_deleted: '用户 {username} 已删除',
settings_saved: '设置已保存',
password_changed: '密码已修改, 请重新登录.',
passwords_missmatch: "两次输入的密码不匹配",
permissions_created: '用户 {username} 的权限已创建',
permissions_deleted: '用户 {username} 的权限已删除',
permissions_updated: '用户 {username} 的权限已更新',
permissions_updated_personal: '您的权限已更新',
no_permission: "您没有权限访问 {url}",
device_created: '已创建 {device}',
devices_created_multiple: '已创建 {count|int} 个设备',
device_updated: '已更新 {device}',
device_deleted: '已删除 {device}',
group_created: '已创建组 {group}',
group_deleted: '已删除组 {group}'
},
navbar: {
theme: '主题',
new: '新增',
edit_account: '编辑账户',
logout: '退出'
}
} satisfies BaseTranslation;
export default zh;

View File

@@ -22,7 +22,9 @@
de: '🇩🇪',
'de-DE': '🇩🇪',
pt: '🇵🇹',
'pt-PT': '🇵🇹'
'pt-PT': '🇵🇹',
zh: '🇨🇳',
'zh-CN': '🇨🇳'
};
let localStorageLang: Locales | 'auto' = 'auto';
let selectedLanguage: Locales | 'auto' = localStorageLang;