适用于 .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 列表/控制器中创建关键字列表,然后将字典或其他东西返回给我的视图?
提前感谢您的帮助。如果有什么不清楚的地方,请发表评论,我会尝试进一步解释我。
你可能想重新考虑一下设计。
例如,每次你想要一种新的语言时,你都必须在ExecuteCore
中更改开关。这从根本上与 SOLID 原则不一致。
区域性代码存储在cultureCookie
中,然后使用它来创建CultureInfo
- 然后任何异常都可以使用默认值。这样您就可以卸下开关...
但是,我实际上不会使用cookie来保存语言详细信息,因为网络爬虫不会拾取这些详细信息。谷歌只会知道您的网站使用一种语言。我建议您更改每种语言的 URL,而不是使用 cookie。