翻译
目录
介绍
ezBookkeeping 支持多语言和本地化设置,前端和后端分别有自己的多语言文件。前端多语言文件在 /src/locales/,后端多语言文件在 /pkg/locales/。所有语言文件需要以语言标签(单一语言子标签 或 语言子标签加书写体子标签,例如 en、fr、zh-Hans、zh-Hant)命名。
有关语言标签的更多信息,请参考 RFC5646。所有可用语言标签可从这里 IANA registry language-subtag-registry 找到。
为前端增加新语言
- 复制
/src/locales/en.json并创建一个以语言标签命名的新文件 - 在
/src/locales/index.ts中的allLanguages对象中添加键值对,其中键名应当为语言标签,值对象里字段说明如下:name为英文的语言名称displayName为该语言下的语言名称alternativeLanguageTag为language-region格式的语言标签(例如zh-CN),为了兼容一些不支持language-script格式语言标签的第三方服务textDirection为文字方向,支持ltr(从左到右)及rtl(从右到左)content字段为该语言的字典对象
- 翻译每个文字条目
为后端增加新语言
- 复制
/pkg/locales/en.go并创建一个以语言标签命名的新文件 - 在
/pkg/locales/all_locales.go中的AllLanguagesmap 中添加键值对,其中键名应当为语言标签,值对象里的Content字段应当为新的语言对象 - 翻译每个文字条目
国际化
ezBookkeeping 允许用户更改多项区域设置,如日期、时间、数字和货币格式。当用户没有修改时,这些区域设置将使用语言文件中配置的默认值。这些默认值都在语言文件的 default 对象中。
这里是所有需要配置默认值的设置和说明:
| 项目 | 所有可用选项 | 描述 |
|---|---|---|
currency | /src/consts/currency.ts 中的 ALL_CURRENCIES | 默认货币 |
firstDayOfWeek | /src/core/datetime.ts 中的 WeekDay | 默认每周第一天,支持 Sunday、Monday、Tuesday、Wednesday、Thursday、Friday 和 Saturday |
fiscalYearFormat | FiscalYearFormat 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 | 默认长日期格式,支持 YYYYMMDD(年月日)、MMDDYYYY(月日年) 和 DDMMYYYY(日月年) |
shortDateFormat | /src/core/datetime.ts 中的 ShortDateFormat | 默认短日期格式,支持 YYYYMMDD(年月日)、MMDDYYYY(月日年) 和 DDMMYYYY(日月年) |
longTimeFormat | /src/core/datetime.ts 中的 LongTimeFormat | 默认长时间格式,支持 HHMMSS(24小时制)、AHHMMSS(12小时制,上午/下午标识在前) 和 HHMMSSA(12小时制,上午/下午标识在后) |
shortTimeFormat | /src/core/datetime.ts 中的 ShortTimeFormat | 默认短时间格式,支持 HHMMSS(24小时制)、AHHMMSS(12小时制,上午/下午标识在前) 和 HHMMSSA(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 |
另外,各语言文件的 format 对象中定义了各种长度的日期格式(年月日、月日年 及 日月年)和时间格式(24小时制、上午/下午标识在前的12小时制 及 上午/下午标识在后的12小时制),这些格式支持如下的占位符:
| 占位符 | 说明 | 范例 |
|---|---|---|
YY | 2位数年份 | 99、00、25 |
YYYY | 4位数年份 | 1999、2000、2025 |
M | 月份 | 1、2、11 |
MM | 2位数月份 | 01、02、11 |
MMM | 月份名称缩写 | 1月、2月、11月 |
MMMM | 月份名称 | 一月、二月、十一月 |
D | 每月第几天 | 1、10、28 |
DD | 2位数每月第几天 | 01、10、28 |
dd | 星期名称最短缩写 | 日、一、五 |
ddd | 星期名称缩写 | 周日、周一、周五 |
dddd | 星期名称 | 星期日、星期一、星期五 |
H | 24小时制小时 | 0、13、23 |
HH | 2位数24小时制小时 | 00、13、23 |
h | 12小时制小时 | 12、1、11 |
hh | 2位数12小时制小时 | 12、01、11 |
m | 分钟 | 0、10、59 |
mm | 2位数分钟 | 00、10、59 |
s | 秒钟 | 0、10、59 |
ss | 2位数秒钟 | 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