多语言


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>