#gettext #lambda #serde #api #deserialize #date-time

serde-gettext

可反序列化的结构体,用于翻译和格式化

2 个版本

0.1.1 2019 年 8 月 17 日
0.1.0 2019 年 8 月 16 日

#247 in 国际化 (i18n)

MIT 许可证

24KB
338

CircleCI Latest Version License Docs.rs LOC Dependency Status

简介

此库仅是 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_localetz_setlibc-strftime 来激活当前区域设置的区域设置和时区。

如果您想更改当前进程的区域设置和时区,您需要首先将 TZLC_ALL 作为环境变量导出,然后再次调用 set_localetz_set

依赖项

~11MB
~88K SLoC