Skip to content

翻译

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

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

为前端增加新语言

  1. 复制 /src/locales/en.json 并创建一个以语言标签命名的新文件
  2. /src/locales/index.ts 中的 allLanguages 对象中添加键值对,其中键名应当为语言标签,值对象里字段说明如下:
    1. name 为英文的语言名称
    2. displayName 为该语言下的语言名称
    3. alternativeLanguageTaglanguage-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 允许用户更改多项区域设置,如日期、时间、数字和货币格式。当用户没有修改时,这些区域设置将使用语言文件中配置的默认值。这些默认值都在语言文件的 default 对象中。

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

项目所有可用选项描述
currency/src/consts/currency.ts 中的 ALL_CURRENCIES默认货币
firstDayOfWeek/src/core/datetime.ts 中的 WeekDay默认每周第一天,支持 SundayMondayTuesdayWednesdayThursdayFridaySaturday
fiscalYearFormatFiscalYearFormat in /src/core/fiscalyear.ts默认财年格式,支持 StartYYYY_EndYYYYStartYYYY_EndYYStartYY_EndYYEndYYYYEndYY
calendarDisplayType/src/core/calendar.ts 中的 CalendarDisplayType默认日历组件及月份中使用的历法,支持 GregorianBuddhistGregorianWithChineseGregorianWithPersian
dateDisplayType/src/core/calendar.ts 中的 DateDisplayType默认日期显示时使用的历法,支持 GregorianBuddhistPersian
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默认货币显示类型,支持 NoneSymbolBeforeAmountSymbolAfterAmountSymbolBeforeAmountWithoutSpaceSymbolAfterAmountWithoutSpaceCodeBeforeAmountCodeAfterAmountUnitBeforeAmountUnitAfterAmountNameBeforeAmountNameAfterAmount
numeralSystem/src/core/numeral.ts 中的 NumeralSystem默认数字系统,支持 WesternArabicNumeralsEasternArabicNumeralsPersianDigitsBurmeseNumeralsDevanagariNumerals
decimalSeparator/src/core/numeral.ts 中的 DecimalSeparator默认小数点,支持 DotComma
digitGroupingSymbol/src/core/numeral.ts 中的 DigitGroupingSymbol默认数字分组符号,支持 DotCommaSpaceApostrophe
digitGrouping/src/core/numeral.ts 中的 DigitGroupingType默认数字分组类型,支持 NoneThousandsSeparator

另外,各语言文件的 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

Released under the MIT License.