2 个版本
0.1.1 | 2019 年 8 月 17 日 |
---|---|
0.1.0 | 2019 年 8 月 16 日 |
#247 in 国际化 (i18n)
24KB
338 行
简介
此库仅是 gettext 的通用反序列化器/API。使用此库,您可以使用 JSON 或 YAML(或 serde 处理的“任何”格式)通过 gettext 翻译文本,甚至进行格式化。它还提供了 strftime 的 API 用于日期格式化。
您可以在 API 服务中使用它,以拥有一个翻译端点或在 lambda 中翻译输入。
-
JSON 示例
{ "ngettext": { "singular": "One item has been deleted", "plural": "%(n)s items have been deleted", "n": 5 } }
-
YAML 示例
ngettext: singular: One item has been deleted plural: "%(n)s items have been deleted" n: 5
在结构体反序列化时,您可以直接将其转换为已翻译的 String
use serde_gettext::SerdeGetText;
use std::convert::TryFrom;
let yaml = r#"---
ngettext:
singular: One item has been deleted
plural: "%(n)s items have been deleted"
n: 5
"#;
let s: SerdeGetText = serde_yaml::from_str(yaml).unwrap();
assert_eq!(String::try_from(s).unwrap(), "5 items have been deleted");
格式化
-
JSON 示例
{ "gettext": "Hello %(name)s!", "args": { "name": "Grace" } }
-
YAML 示例
gettext: "Hello %(name)s!" args: name: Grace
args
可以处理许多不同的格式,并使用位置参数或关键字参数
gettext: "%s %s %s"
args:
- true # "yes" (translated)
- 3.14 # "3.14"
- # "n/a" (translated)
输出: "yes 3.14 n/a"
args
可以添加到任何函数
ngettext:
singular: "%(n)s element deleted (success: %(success)s)"
plural: "%(n)s elements deleted (success: %(success)s)"
n: 1
args:
success: true
输出: "1 element deleted (success: yes)"
args
可以通过连接项目处理数组
gettext: "%(value)s"
args:
value:
- ", " # The separator
- true # "yes" (translated)
- 3.14 # "3.14"
- # "n/a" (translated)
输出: "yes, 3.14, n/a"
args
是递归的,并且可以处理 gettext 函数
gettext: "Last operation status: %(status)s"
args:
status:
ngettext:
singular: "%(n)s element deleted (success: %(success)s)"
plural: "%(n)s elements deleted (success: %(success)s)"
n: 1
args:
success: true
输出: "Last operation status: 1 element deleted (success: yes)"
所有可用函数列表
-
gettext
gettext: "msgid"
-
ngettext
ngettext: singular: "msgid_singular" plural: "msgid_singular" n: 5
-
pgettext
pgettext: ctx: "context" msgid: "msgid"
-
dgettext
dgettext: domain: "domain" msgid: "msgid"
-
dngettext
dngettext: domain: "domain" singular: "msgid_singular" plural: "msgid_singular" n: 5
-
npgettext
npgettext: ctx: "context" singular: "msgid_singular" plural: "msgid_singular" n: 5
-
dcngettext
dcngettext: domain: "domain" singular: "msgid_singular" plural: "msgid_singular" n: 5 cateogy: "ctype|numeric|time|collate|monetary|messages|all|paper|name|address|telephone|measurement|identification"
日期和时间格式化
您可以使用 strftime 在您选择的区域设置中格式化日期和时间
strftime: "It is now: %c"
epoch: 1565854615
输出: "It is now: Thu 15 Aug 2019 09:36:55 CEST"
您需要调用 set_locale
和 tz_set
从 libc-strftime 来激活当前区域设置的区域设置和时区。
如果您想更改当前进程的区域设置和时区,您需要首先将 TZ
和 LC_ALL
作为环境变量导出,然后再次调用 set_locale
和 tz_set
。
依赖项
~11MB
~88K SLoC