多语言
ZKWeb支持多语言功能。
语言的翻译由ITranslateProvider
实现,每个线程都可以指定不同的语言和时区。
默认的插件集提供了自动设置当前线程语言和时区的功能,请参考Common.Base
插件的文档。
设置当前线程的语言
设置指定语言
LocaleUtils.SetThreadLanguage("zh-CN");
自动设置语言(Cookies => 浏览器语言 => 默认语言)
第一个参数决定是否检测浏览器语言
LocaleUtils.SetThreadLanguageAutomatic(true, "en-US");
添加翻译
翻译需要实现ITranslateProvider
接口并使用[ExportMany]
注册到容器中。
添加src\Components\Translates\zh_CN.cs
,内容如下
[ExportMany, SingletonReuse]
public class zh_CN : ITranslateProvider {
private static HashSet<string> Codes = new HashSet<string>() { "zh-CN" };
private static Dictionary<string, string> Translates = new Dictionary<string, string>()
{
{ "Example", "示例" }
};
public bool CanTranslate(string code) {
return Codes.Contains(code);
}
public string Translate(string text) {
return Translates.GetOrDefault(text);
}
}
使用翻译
在代码中使用翻译
string translated = new T("Example"); // 当前语言是中文时,translated等于"示例"
在模板中使用翻译,通过过滤器翻译字符串或变量
<p>{{ "Example" | trans }}</p>
<p>{{ stringVariable | trans }}</p>