【问题标题】:DB based translation for JavaScript基于数据库的 JavaScript 翻译
【发布时间】:2015-03-03 03:18:55
【问题描述】:

在我的 Web 应用程序中,所有文本都通过如下方法呈现:

@GetLangText("SomeKeyForText")

数据库中尚不存在的文本将被自动添加。如果有人在数据库中添加翻译,它将在运行时显示,而不仅仅是键。

我开始玩 Ext JS

我正在寻找一种直接的方法来从数据库中获取我自己的所有文本。我可以接受标准文本的现有本地化。

我想在数据库中管理我的 Web 应用程序的翻译。管理员应该能够在运行时在数据库中定义或更正应用程序的任何文本。

我正在考虑使用其中一种解决方法在 JavaScript 中使用 razor(如 here 所示)。但也许有更好的方法,尤其是当我们谈论 Ext JSASP.NET C# 的组合时。

我正在使用 Sencha Cmd。如果可能的话,我想避免产生一些不能用 Sencha Cmd 编译的剃须刀代码。

煎茶文档和示例没有太多关于自定义文本翻译的信息。

【问题讨论】:

    标签: c# asp.net-mvc extjs


    【解决方案1】:

    在初始化 Ext JS 应用程序之前,使用输出一个包含翻译的 JavaScript 对象:

    var LANG = @appTranslations;
    
    /*
    The above should render as:
    
    var LANG = {
        alert: {
            title: 'Alert Title',
            message: 'Alert message'
        }
    };
    
    */
    
    Ext.onReady(function() {
        Ext.Msg.alert(LANG.alert.title, LANG.alert.message);
    });
    

    其中 appTranslations 是由 ASP.NET MVC 设置的视图变量。自从我做任何 C# 以来已经有一段时间了,但我找到了一些输出 JSON 的方法:

    Razor syntax error serializing ASP.NET Model to JSON with Html.Raw

    这种方法的总体思路是您没有做任何特定于 Ext JS 的事情。相反,您要求服务器将一些 JSON 输出到可以在 Ext JS 中使用的变量中。

    这里有一些检测缺失翻译的代码:

    var LANG = {
        THIS: {
            THAT: 'HELLO'
        }
    };
    
    function getLangText(key, source) {
        var parts = key.split('.'),
            current = source;
    
        for(var i = 0; i < parts.length; i++) {
            current = current[parts[i]];
        }
    
        if(current) {
            return current;
        } else {
            return 'Key "' + key + '" not found.';
        }
    }
    
    // HELLO
    alert(getLangText('THIS.THAT', LANG));
    
    // Key "THIS.THAT.THERE" not found.
    alert(getLangText('THIS.THAT.THERE', LANG));
    

    未经测试!

    【讨论】:

    • 看起来很简单。也许这也可以: Ext.Msg.alert(GetLangText("LANG.alert.title"), GetLangText("LANG.alert.message")) 这将使管理员可以看到哪些消息在哪里丢失并添加他们去数据库。 (GetLangText 会像您在 appTranslations 中描述的那样查找数组定义)。
    • 是的,我修改了答案以显示该想法的粗略实现。
    猜你喜欢
    • 2021-06-28
    • 2013-12-26
    • 1970-01-01
    • 2012-04-30
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多