多语言

ZKWeb内置提供了多语言支持, 不使用.Net自带的资源文件机制.
语言的翻译由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>