我正在创建一个多语言应用程序。翻译功能的要求比我尝试过的使用 .resx 文件更复杂。
我正在调用一个 web 服务,它返回一个包含所需翻译的数据集,然后将这些翻译保存到静态类 Translation。在这个类中,我有一个数据表,数据集被转换为对象,然后添加到数据表中。
所以数据表就像其他教程中使用的数据集。当我希望翻译视图中的关键字时,问题就出现了。我尝试的第一件事是在我的控制器中声明一个关键字列表,翻译这些关键字并在 ViewData["Translations"] 中传递字典。这行得通,但这种方法不够有效。
在下面的示例中,可以只调用 Multi.{Keyword} 并且本地化将选择正确的文件用于显示翻译文本。
看法
//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("keyword") 并将结果显示为纯文本,这是要走的路吗?
例子
在翻译类中有一个声明为 translate 的方法,这将只返回一个翻译后的关键字。
@Html.Label(keyword, translation.translate("keyword"));
3)有没有办法可以在我的cshtml列表/控制器中创建一个关键字列表,然后将字典或其他东西返回到我的视图中?
在此先感谢您的帮助。如果有不清楚的地方,请发表评论,我会尝试进一步解释。