0

我正在使用支持多种语言(例如英语、法语)的Hot Towel创建应用程序

我有以下链接

翻译视图

Durandal 本地化示例

我的问题是如何根据用户语言呈现应用程序视图。如果用户选择英文,则完整的应用程序应以英文显示内容。如何实现这一目标

我在第二个链接中尝试过类似的东西。

define({
    'root': {
        welcome: 'Welcome!',
        flickr: 'Flickr'
    },
    'fr-fr': true,
    'es-es': true,
});

这是我必须为语言创建单独的视图还是我必须为内容创建单独的App 文件夹

建议我一些最佳实践。

4

2 回答 2

1

如果您的项目很大,我不建议使用单独的视图单独的文件夹。您可以只创建一个标签文件,如果您使用类似淘汰赛的 lib,只需将这些标签数据绑定一次(文本:xxxx)。此外,您可以使用i18n来管理标签。使用选定的语言只需将特定语言文件加载到您的视图模型中。

EDIT1: 我从未遇到过完整的示例或教程。所以我的做法是:

  1. 使用 i18n 之类的工具来获取 html 和一些 javascript 代码(如消息)中标签的密钥配对字典文件
  2. 然后我通过增加视图的淘汰视图模型和模块的变量来手动索引这些标签。这是我等待更好解决方案的最后选择。希望这可以帮助!
于 2013-09-24T11:38:26.660 回答
0

你可以做这样的事情。如果您需要进行大量区域设置更改,您可以更改 APP 文件夹,您可以使用以下方法

@{

        string strAcceptLanguage;


        strAcceptLanguage = System.Configuration.ConfigurationManager.AppSettings["Locale"].ToString();

        if (strAcceptLanguage == "en-us")
    {
         @Scripts.Render("~/Scripts/vendor.js")
        <script type="text/javascript" src="~/Scripts/require.js" data-main="en-US/main"></script>

    }
        else if (strAcceptLanguage == "es-es")
    {
         @Scripts.Render("~/Scripts/vendor.js")
        <script type="text/javascript" src="~/Scripts/require.js" data-main="en-UK/main"></script>

    }

    else      if (strAcceptLanguage == "fr-fr")
    {
         @Scripts.Render("~/Scripts/vendor.js")
        <script type="text/javascript" src="~/Scripts/require.js" data-main="AUZ/main"></script>

    }



}

在 Index.cshtml 中,您可以使用上面的代码,并且您需要在 Webconfig 文件中具有值

<add key="Locale" value="en-us" />

并且在 SPA 页面中,每当用户尝试通过按下按钮或任何类型的选项来更改区域设置时,您必须触发一个事件来调用 AJAX 帖子以评估 REST api 以更新 webconfig 文件中的给定区域设置值

changeLocale: function (val) {

            var name = JSON.stringify({
                locale: val
            });

            $.ajax({
                cache: false,
                url: "http://localhost:49589/api/Locale",
                type: "POST",
                dataType: "json",
                data: name,
                contentType: "application/json; charset=utf-8",
                processData: false,
                success: function (json) {


                    alert(json);
                    location.reload();

                },
                error: function (json) {
                    alert("error" + JSON.stringify(json));
                }
            });

您必须在shell.js中编写上述代码, 而shell.html 具有以下代码

 <div class="btn-group" data-toggle="buttons-radio">
                <button type="button" class="btn btn-primary" data-bind="click: changeLocale.bind($data, 'en-us')">English</button>
                <button type="button" class="btn btn-primary" data-bind="click: changeLocale.bind($data, 'es-es')">French</button>
                <button type="button" class="btn btn-primary" data-bind="click: changeLocale.bind($data, 'fr-fr')">Japanese</button>
            </div>

其余的api是这样的

 [HttpPost]
        public string ChangeLocale(Locale l)
        {
            ConfigurationManager.AppSettings["Locale"] = l.locale;

            return "success";

        }

希望这会有所帮助

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2013-10-03T14:10:39.597 回答