如何用另一种语言翻译网站?(ASP .NET,c#)

时间:2010-06-04 11:26:41

标签: c# asp.net localization internationalization

我开发了一个大型商业门户网站。我刚刚意识到我需要用另一种语言访问我的网站。我研究过像这样的解决方案

  • 在我的网站上使用第三方控件。 (适合我的设计。对于SEO观点没有用。不想显示第三方品牌名称。)
  • 为每种语言创建资源文件。(重构页面以使用资源文件中的文本需要大量工作。用户输入的数据如“业务描述”。)
  • 是否有其他可用选项。  
    我想的是一个解决方案,比如在服务器端创建页面然后我可以在发送回客户端之前翻译它。有什么方法可以做到吗?(翻译所有内容,包括从数据库或通过代码添加的数据。并且不影响设计。)

    11 个答案:

    答案 0 :(得分:15)

    如果你真的需要翻译你的应用程序,那将需要做很多艰苦,乏味的工作。 没有灵丹妙药。

    您需要做的第一件事是将标记中的纯文本转换为asp:Localize控件。通过使用“本地化”控件,您可以保留现有的<span>标记,只需替换其中的文本即可。真的没办法解决这个问题。 Visual Studio的搜索和替换支持正则表达式匹配,可以帮助您,或者您可以使用Resharper(见下文)。

    第一种方法是下载开源购物应用程序nopCommerce,看看他们如何处理本地化。它们将字符串存储在数据库中,并具有用于编辑语言的UI。类似的方法可能适合您。

    或者,如果要使用资源文件,除了Visual Studio之外,我还建议使用两种工具:Resharper 5Localization Features screencast)和Zeta Resource Editor。这些是我使用这种方法完成它的步骤:

    1. 在visual studio中为每个页面使用“生成本地资源”工具
    2. 使用Resharper的“将HTML移动到资源”标记中的文本,使其成为“本地化”控件。
    3. 使用Resharper搜索后面代码中的任何可本地化字符串,并将它们移动到资源文件中。
    4. 使用代码分析全球化规则/ FXCop帮助您找到格式化数字,日期等可能遇到的任何其他问题。
    5. 一旦所有文本都在resx文件中,使用Zeta资源编辑器加载所有resx文件,添加新语言并导出以进行翻译(或者如果你足够勇敢则自动翻译)。
    6. 我已经在一个翻译成8种语言(并且正在增长)的网站上使用这种方法,其中有数十页(并且还在增长)。但是,这不是用户可编辑的网站;这些页面完全由程序员控制。

    答案 1 :(得分:1)

    将页面转换为阿拉伯语或其他语言。

    转到:

    1页设计

    2-工具

    3 - 生成本地资源

    4 - 获取“Ap​​p_LocalResources”包括“filename.aspx.resx”

    复制文件并将名称更改为“filename.aspx.ar.resx”,将页面转换为阿拉伯语或其他语言。

    希望有所帮助:)

    答案 2 :(得分:1)

    我找到了一个很好的解决方案,请参阅http://www.nopcommerce.com/p/1784/nopcommerce-translator.aspx

    此项目是开源的,源存储库位于:https://github.com/Marjani/NopCommerce-Translator

    祝你好运

    答案 3 :(得分:1)

    如果您不想编写更多代码,并且如果使用 google 翻译器可行,那么您可以尝试使用 Google Translator API。您可以查看以下代码。

    <script src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
    <script>
        function googleTranslateElementInit() {
            $.when(
                    new google.translate.TranslateElement({pageLanguage: 'en', includedLanguages: 'en',
                        layout: google.translate.TranslateElement.FloatPosition.TOP_LEFT}, 'google_translate_element')
                ).done(function(){
                    var select = document.getElementsByClassName('goog-te-combo')[0];
                    select.selectedIndex = 1;
                    select.addEventListener('click', function () {
                        select.dispatchEvent(new Event('change'));
                    });
                    select.click();
                });
        }
        $(window).on('load', function() {
            var select = document.getElementsByClassName('goog-te-combo')[0];
            select.click();
            var selected = document.getElementsByClassName('goog-te-gadget')[0];
            selected.hidden = true;
        });
    </script>
    

    另外,找到下面的 <body> 标签代码

    <div id="google_translate_element"></div>
    

    答案 4 :(得分:0)

    为每种语言创建资源文件肯定会有更多的工作 - 但这是我可以选择的选项,因为它让您有机会更准确。如果您这样做,您可以手动翻译由说该语言的人翻译的文本(有许多公司提供此类服务)。

    自动翻译系统通常很好地给出了对另一种语言的含义的一般印象,但在尝试描绘专业形象时我永远不会使用它们,因为它们输出的内容通常没有意义。没有什么比'不专业'更尖叫!就像文本一样没有意义,因为它已被自动翻译。

    答案 5 :(得分:0)

    我会将资源文件路由放在翻译选项上,因为语言中单词的含义可能非常具有上下文性,甚至一个错误也可能会破坏您网站的可信度。

    正如您所建议的那样,Visual Studio可以为包含文本的大多数控件生成元资源文件密钥,但可能会让您不得不手动执行其余操作,但我看不到更简单,更可靠的解决方案。

    我不认为本地化是一种易于自动化的事情,因为数据库中保存的文本经常导致模式更改以允许多种语言,并且Web HTML经常需要重组来处理截断或包装的标签和按钮因为,例如,你已经翻译成德语或其他东西。

    其他考虑因素: 文化设置 - 财务分隔符,日期格式。 从右到左 - 阿拉伯语等一些语言是从右到左书写的,这意味着页面需要重新思考以控制图像等定位。

    祝你好运。

    答案 6 :(得分:0)

    我最终以艰难的方式做到了:

    • 我在名为TranslateInto
    • 的字符串类上编写了一个扩展方法
    • 在Page的PreRender方法中,我根据类型(具有文本的类型)递归获取所有控件
    • 通过他们和text.TranslateInto(SupportedLanguages.CurrentLanguage)
    • 在我的TranslateInto方法中,我有一个非常大的switch语句,每个字符串都显示给用户及其相关的翻译。

    它不是很漂亮,但它确实有效。

    答案 7 :(得分:0)

    一个大型开关盒?使用字典/哈希表(每种语言的单独实例),它会更加有效和快速。

    答案 8 :(得分:0)

    我们使用名为MemoQ的翻译CAT工具(计算机辅助翻译),它允许我们翻译文本,同时保留所有标签和编码。当您从一种语言翻译成另一种语言时,单词的顺序会发生变化,这非常有用。

    它也非常有用,因为它允许我们与来自世界各地的翻译人员合作,而无需他们拥有任何技术专长。它还允许我们由第二个翻译人员阅读翻译证明。

    我们使用此翻译环境来翻译html,xml,InDesign,Word等。

    答案 9 :(得分:0)

    无需安装任何第三方工具,API或dll对象,我就可以利用App_LocalResources。尽管我仍然使用Google翻译来翻译单词和句子,然后将其复制并粘贴到文件中,如下面的屏幕截图之一所示(或者您可以使用人员翻译并手动键入以进行添加)。在您的Project文件夹中(使用MS Visual Studio作为编辑器),添加一个App_LocalResources文件夹并创建英语和其他语言(resx文件)。就我而言,这是西班牙语(es-ES)的翻译。请参见下面的屏幕截图。 enter image description here

    接下来,在您的aspx上,添加将在App_LocalResources中匹配的元标记(meta:resourcekey)。一个用于英语,另一个用于西班牙语文件。查看以下屏幕截图:

    enter image description here

    西班牙语:(filename.aspx.es-ES.resx)

    enter image description here

    英语:(filename.aspx.resx)

    enter image description here

    然后在母版文件上创建带有查询字符串的链接,该链接将切换页面翻译并在所有页面上可用:

    <%--ENGLISH/SPANISH VERSION BUTTON--%>
    <asp:HyperLink ID="eng_ver" runat="server" Text="English" Font-Underline="false"></asp:HyperLink> | 
    <asp:HyperLink ID="spa_ver" runat="server" Text="Español" Font-Underline="false"></asp:HyperLink>
    <%--ENGLISH/SPANISH VERSION BUTTON--%>
    

    在后面的母版页代码上,创建指向Hyperlink标签的动态链接:

    ////LOCALIZATION
    string thispage = Request.Url.AbsolutePath;
    eng_ver.NavigateUrl = thispage;
    spa_ver.NavigateUrl = thispage + "?ver=es-ES";
    ////LOCALIZATION
    

    现在,您可以在页面文件后面的代码中设置会话变量,以通过始终向网址中添加查询字符串来使所有链接或重定向坚持所需的翻译。

    在PageLoad上:

            ///'LOCALIZATION
            //dynamic querystring; add this to urls ---> ?" + Session["add2url"]
            {
                if (Session["version"] != null)
                {
                    Session["add2url"] = "?ver=" + Session["version"]; //SPANISH version
                }
                else
                {
                    Session["add2url"] = ""; // ENGLISH as default
                }
            }
            ///'LOCALIZATION
    

    。 点击事件示例:

        protected void btnBack_Click(object sender, EventArgs e)
        {
            Session["FileName.aspx"] = null;
            Response.Redirect("FileName.aspx" + Session["add2url"]);
        }
    

    我希望我的描述足够简单。

    答案 10 :(得分:-1)

    我认为您应该尝试Google翻译。

    http://translate.google.com/translate_tools

    非常简单,非常有效。

    HTH