使用 Google Translation API 的多语言资源文件生成器






4.86/5 (13投票s)
这是一个命令行实用工具,使用 Google 翻译 API 将英语资源文件生成为日语和法语资源文件。
引言
该实用工具旨在从 ASP.NET 网页或用户控件的默认资源文件生成日语和法语资源文件。该实用工具用于使用 Google 翻译 API 翻译资源文件。
在运行此实用工具之前,请在您的 c: 驱动器中创建一个名为“conversion”的文件夹,并将所有默认资源文件(.resx)放入该文件夹中。
背景
几天前,我的团队正在致力于将我的应用程序转换为多种语言(英语、法语和日语),以满足不同地区的用户。启用 ASPX 页面和用户控件(.ascx)以支持多种语言非常容易,为此,我们需要为每种语言维护资源文件(*.resx),并轻松生成资源文件。
要生成资源文件,请在设计模式下打开 ASPX(或 ASCX)页面,然后转到“工具”->“生成本地资源”。现在,我们将拥有默认资源文件,例如 Webform1.aspx.resx。现在我们需要为法语创建 Webform1.aspx.fr.resx,为日语创建 Webform1.aspx.ja.resx。
要翻译任何字符串,请转到 Google 语言翻译页面:http://translate.google.com/translate_t#。
我拥有大约 40 个应用程序、大量的仪表板(用户控件)和一个大型门户应用程序。对于我来说,这将会是一种非常耗时的语言翻译方法。因此,我开发了一个控制台实用工具。您需要在 c 驱动器下创建一个名为“conversion”的文件夹,并将所有默认 RESX 文件放入其中。
代码讨论
我在 c:\Converion 中搜索所有 RESX 文件,并创建日语和法语 RESX 文件,每个文件都通过调用 Dotranslation
函数进行翻译。
foreach (string file in files)
{
Program _p = new Program();
Console.WriteLine("Conversion of file started: {0} {1}",
file, " to Japanese");
_p.DoTranslation(Google.API.Language.Japanese, file);
Console.WriteLine("Conversion of file completed.");
Console.WriteLine("Conversion of file started: {0} {1}",
file, " to French");
_p.DoTranslation(Google.API.Language.French, file);
Console.WriteLine("Conversion of file completed.");
}
在 DoTranslation
函数中,我传递了类型为 Google.API.Language
的语言和默认资源文件。我使用 XmlDocument
打开一个 .resx 文件并读取所有数据节点。每个数据节点再次被迭代以获取子节点。使用 Google API 的 Translate
类的 Translate
函数翻译节点值。我附上了由 google-api-for-dotnet 提供的 GoogleTranslateAPI.dll。
protected void DoTranslation(Google.API.Language language, string resxFilePath)
{
XmlDocument doc = new XmlDocument();
doc.Load(resxFilePath);
XmlNodeList dataNodes = doc.SelectNodes("//root/data");
using (ResXResourceReader rr = new ResXResourceReader(resxFilePath))
{
//New resx file
string outputFilePath = resxFilePath.Replace("resx", "") +
language.ToString().Substring(0, 2).ToLower() + ".resx";
using (ResXResourceWriter rw = new ResXResourceWriter(outputFilePath))
{
IDictionaryEnumerator di = rr.GetEnumerator();
foreach (DictionaryEntry de in rr)
{
string key = de.Key as string;
string value = de.Value as string;
//ignore emply keys
if (!String.IsNullOrEmpty(key) &&
!String.IsNullOrEmpty(value))
{
//translation using google translation api
string translatedValue = Translator.Translate(value,
Google.API.Language.English, language);
rw.AddResource(key, translatedValue);
}
}
rw.Generate();
}
}
}
关注点
这是一个非常小的实用工具,但在大型企业 Web 应用程序需要转换为多语言支持时,可以节省大量时间。
历史
- 上传于 2009 年 4 月 23 日。