Skip to content

翻译 ​

ezBookkeeping 支持多语言和本地化设置,前端和后端分别有自己的多语言文件。前端多语言文件在 /src/locales/,后端多语言文件在 /pkg/locales/。所有语言文件需要以语言标签(单一语言子标签 或 语言子标签加书写体子标签,例如 en、fr、zh-Hans、zh-Hant)命名。

有关语言标签的更多信息,请参考 RFC56​​46。所有可用语言标签可从这里 IANA registry language-subtag-registry 找到。

为前端增加新语言 ​

  1. 复制 /src/locales/en.json 并创建一个以语言标签命名的新文件
  2. 在 /src/locales/index.ts 中的 allLanguages 对象中添加键值对,其中键名应当为语言标签,值对象里字段说明如下:
    1. name 为英文的语言名称
    2. displayName 为该语言下的语言名称
    3. alternativeLanguageTag 为 language-region 格式的语言标签(例如 zh-CN),为了兼容一些不支持 language-script 格式语言标签的第三方服务
    4. textDirection 为文字方向,支持 ltr(从左到右)及 rtl(从右到左)
    5. content 字段为该语言的字典对象
  3. 翻译每个文字条目

为后端增加新语言 ​

  1. 复制 /pkg/locales/en.go 并创建一个以语言标签命名的新文件
  2. 在 /pkg/locales/all_locales.go 中的 AllLanguages map 中添加键值对,其中键名应当为语言标签,值对象里的 Content 字段应当为新的语言对象
  3. 翻译每个文字条目

检查未翻译的条目 ​

ezBookkeeping 的仓库在每次更新词条时都会自动计算各个语言的翻译完成度及未翻译的条目,并将这些信息记录在 ezBookkeeping-i18n-badge 仓库中。

你可以打开这个仓库中的 untranslated 文件夹,找到对应语言的 JSON 文件,里面列出了所有未翻译的条目,包括所在文件、词条路径以及原始的英文文本,你可以根据这些信息来进行完善翻译内容。

国际化 ​

ezBookkeeping 允许用户更改多项区域设置,如日期、时间、数字和货币格式。当用户没有修改时,这些区域设置将使用语言文件中配置的默认值。这些默认值都在语言文件的 default 对象中。

这里是所有需要配置默认值的设置和说明:

项目所有可用选项描述
currency/src/consts/currency.ts 中的 ALL_CURRENCIES默认货币
firstDayOfWeek/src/core/datetime.ts 中的 WeekDay默认每周第一天,支持 Sunday、Monday、Tuesday、Wednesday、Thursday、Friday 和 Saturday
fiscalYearFormatFiscalYearFormat in /src/core/fiscalyear.ts默认财年格式,支持 StartYYYY_EndYYYY、StartYYYY_EndYY、StartYY_EndYY、EndYYYY 和 EndYY
calendarDisplayType/src/core/calendar.ts 中的 CalendarDisplayType默认日历组件及月份中使用的历法,支持 Gregorian、Buddhist、GregorianWithChinese 和 GregorianWithPersian
dateDisplayType/src/core/calendar.ts 中的 DateDisplayType默认日期显示时使用的历法,支持 Gregorian、Buddhist 和 Persian
longDateFormat/src/core/datetime.ts 中的 LongDateFormat默认长日期格式,支持 YearMonthDay(年月日)、MonthDayYear(月日年) 和 DayMonthYear(日月年)
shortDateFormat/src/core/datetime.ts 中的 ShortDateFormat默认短日期格式,支持 YearMonthDay(年月日)、MonthDayYear(月日年) 和 DayMonthYear(日月年)
longTimeFormat/src/core/datetime.ts 中的 LongTimeFormat默认长时间格式,支持 HourMinuteSecond(24小时制)、MeridiemIndicatorHourMinuteSecond(12小时制,上午/下午标识在前) 和 HourMinuteSecondMeridiemIndicator(12小时制,上午/下午标识在后)
shortTimeFormat/src/core/datetime.ts 中的 ShortTimeFormat默认短时间格式,支持 HourMinute(24小时制)、MeridiemIndicatorHourMinute(12小时制,上午/下午标识在前) 和 HourMinuteMeridiemIndicator(12小时制,上午/下午标识在后)
currencyDisplayType/src/core/currency.ts 中的 CurrencyDisplayType默认货币显示类型,支持 None、SymbolBeforeAmount、SymbolAfterAmount、SymbolBeforeAmountWithoutSpace、SymbolAfterAmountWithoutSpace、CodeBeforeAmount、CodeAfterAmount、UnitBeforeAmount、UnitAfterAmount、NameBeforeAmount 和 NameAfterAmount
numeralSystem/src/core/numeral.ts 中的 NumeralSystem默认数字系统,支持 WesternArabicNumerals、EasternArabicNumerals、PersianDigits、BurmeseNumerals 和 DevanagariNumerals
decimalSeparator/src/core/numeral.ts 中的 DecimalSeparator默认小数点,支持 Dot 和 Comma
digitGroupingSymbol/src/core/numeral.ts 中的 DigitGroupingSymbol默认数字分组符号,支持 Dot、Comma、Space 和 Apostrophe
digitGrouping/src/core/numeral.ts 中的 DigitGroupingType默认数字分组类型,支持 None、ThousandsSeparator 和 IndianNumberGrouping

另外,各语言文件的 format 对象中定义了各种长度的日期格式(年月日、月日年 及 日月年)和时间格式(24小时制、上午/下午标识在前的12小时制 及 上午/下午标识在后的12小时制),这些格式支持如下的占位符:

占位符说明范例
YY2位数年份99、00、25
YYYY4位数年份1999、2000、2025
M月份1、2、11
MM2位数月份01、02、11
MMM月份名称缩写1月、2月、11月
MMMM月份名称一月、二月、十一月
D每月第几天1、10、28
DD2位数每月第几天01、10、28
dd星期名称最短缩写日、一、五
ddd星期名称缩写周日、周一、周五
dddd星期名称星期日、星期一、星期五
H24小时制小时0、13、23
HH2位数24小时制小时00、13、23
h12小时制小时12、1、11
hh2位数12小时制小时12、01、11
m分钟0、10、59
mm2位数分钟00、10、59
s秒钟0、10、59
ss2位数秒钟00、10、59
A上午或下午上午、下午
Z时区分钟偏移+08:00、+00:00、-05:00

上述日期时间格式会在下列场景使用:

项目使用场景
longDate多个场景
shortDate多个场景
longYear首页总览数据中使用
shortYear交易和统计分析页面的时间筛选中使用
longYearMonth交易列表显示月份时使用
shortYearMonth交易和统计分析页面的时间筛选中使用
longMonthDay首页总览数据中使用
shortMonthDay交易和统计分析页面的时间筛选中使用,显示在 shortDate 旁边,格式应该类似于 shortDate
shortDay交易列表显示日期时使用
longTime多个场景
shortTime多个场景

此外,时区的数据来自 nodatime ,时区本地化的名称来自 TimeZoneNames

预览前端翻译 ​

您可以在桌面版中直接预览前端语言文件,无需重新编译应用。该功能默认关闭,你可以参照 配置 - 开发者工具 启用,或者可以在在线演示的服务中使用。

在桌面版中打开 “设置” -> “开发者工具” -> “预览语言配置”:

  1. 选择文字方向:从左到右(ltr)或从右到左(rtl)。
  2. 将完整的语言 JSON 粘贴到文本框中,或点击 “加载语言配置文件”,加载本地 JSON 文件。
  3. 点击 “应用预览”,当前语言配置会立即被替换,您可以切换到其他页面查看效果。修改本地文件后,重新加载文件并应用预览,即可测试更新后的内容。

预览仅影响当前页面会话,刷新页面后即失效,不会将更改保存到语言文件中。您也可以点击 “恢复内置语言”,在不刷新页面的情况下恢复原始配置。

Released under the MIT License.