使用linguist处理国际化字符串
使用Mix创建一个项目:
1
mix new i18n_example
cd i18n_example
编辑mix.exs
项目文件, 添加linguist依赖
1
defp deps do
[{:linguist, github: "chrismccord/linguist"}]
end
获取依赖
1
mix deps.get
增加国际化字符串文件
1
# locales/zh.exs
[
flash: [
notice: [
hello: "你好 %{first} %{last}"
]
]
]
# locales/fr.exs
[
flash: [
notice: [
hello: "salut %{first} %{last}"
]
]
]
实现模块
1
defmodule I18n do
use Linguist.Vocabulary
# 默认英文, 注意,这里的locale是一个宏,而不是一个函数
locale "en", [
flash: [
notice: [
hello: "hello %{first} %{last}",
bye: "bye now, %{name}!"
]
],
users: [
title: "Users",
profiles: [
title: "Profiles"
]
]
]
# locale宏还可以直接读取文件
locale "fr", Path.join([Path.dirname(__DIR__), "locales","fr.exs"])
locale "zh", Path.join([Path.dirname(__DIR__), "locales","zh.exs"])
end
测试
1
$ iex -S mix
iex(1)> I18n.t!("en", "flash.notice.hello", first: "chris", last: "mccord")
"hello chris mccord"
iex(2)> I18n.t!("zh", "flash.notice.hello", first: "chris", last: "mccord")
"你好 chris mccord"