65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (13投票s)

2009 年 4 月 23 日

CPOL

2分钟阅读

viewsIcon

67898

downloadIcon

2091

这是一个命令行实用工具,使用 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 日。
© . All rights reserved.