适用于 .NET mvc 的自定义翻译工具

本文关键字:翻译 工具 自定义 NET mvc 适用于 | 更新日期: 2023-09-27 18:36:56

>我正在创建一个多语言应用程序。翻译功能的要求比我尝试过的使用 .resx 文件更复杂。

我正在调用一个 Web 服务,该服务返回具有所需翻译的数据集,然后将这些翻译保存到静态类 Translation。在此类中,我有一个数据表,数据集被转换为对象,然后添加到数据表中。

因此,数据表类似于其他教程中使用的数据集。当我想翻译视图中的关键字时,问题就出现了。我尝试的第一件事是在我的控制器中声明一个关键字列表,翻译这些关键字并在 ViewData 中传递字典["翻译"]。这有效,但这种方法不够有效。

在下面的示例中,可以只调用 Multi。{关键字},本地化将选择要用于显示翻译文本的正确文件。

视图

//street is a keyword in the resx file
@Html.LabelFor(c => c.name, Multi.Street)

多底座

    public abstract class MultiBase : Controller
    {
        /*CLASS TO CHECK WHAT LANGUAGE IS 
         * SELECTED AND LOAD THE 
         CORRESPONDING LANGUAGE*/
        protected override void ExecuteCore()
        {
            string CultureName = null;
            string Language = null;
            HttpCookie cultureCookie = Request.Cookies["Language"];
            if (cultureCookie != null)
            {
                Language = cultureCookie.Value;
                switch (Language)
                {
                    case "English":
                        CultureName = "en";
                        break;
                    case "French":
                        CultureName = "fr";
                        break;
                    case "Dutch":
                        CultureName = "nl";
                        break;
                    default:
                        CultureName = "nl";
                        break;
                }
            }
            else
            {
                CultureName = "en";
            }
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(CultureName);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
            base.ExecuteCore();
        }
        protected override bool DisableAsyncSupport
        {
            get { return true; }
        }

    }

1 ) 这种方式看起来是最有效的方法,但如果控制器中不知道关键字,我该如何调用字典?

2 ) 将翻译纳入我的观点的最佳方法是什么?在视图中查询似乎不是一个好主意...在视图中调用方法translate("关键字")并将结果显示为纯文本,这是要走的路吗?

在翻译类中是一个声明翻译的方法,这将只返回一个翻译的关键字。

 @Html.Label(keyword, translation.translate("keyword"));

3 ) 有没有办法在我的 cshtml 列表/控制器中创建关键字列表,然后将字典或其他东西返回给我的视图?

提前感谢您的帮助。如果有什么不清楚的地方,请发表评论,我会尝试进一步解释我。

适用于 .NET mvc 的自定义翻译工具

我想

你可能想重新考虑一下设计。

例如,每次你想要一种新的语言时,你都必须在ExecuteCore中更改开关。这从根本上与 SOLID 原则不一致。

最好将

区域性代码存储在cultureCookie中,然后使用它来创建CultureInfo - 然后任何异常都可以使用默认值。这样您就可以卸下开关...

但是,我实际上不会使用cookie来保存语言详细信息,因为网络爬虫不会拾取这些详细信息。谷歌只会知道您的网站使用一种语言。我建议您更改每种语言的 URL,而不是使用 cookie。