Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用另一种语言翻译网站?(ASP.NET,c#)_C#_Asp.net_Localization_Internationalization - Fatal编程技术网

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

如何用另一种语言翻译网站?(ASP.NET,c#),c#,asp.net,localization,internationalization,C#,Asp.net,Localization,Internationalization,我开发了一个大型商业门户。我刚刚意识到我需要我的网站在另一种语言。我已经研究了可用的解决方案,如 在我的网站上使用了第三方控件。(不适合我的设计。从SEO的角度看没有用处。不想显示第三方品牌名称。) 为每种语言创建资源文件。(重新构造页面以使用资源文件中的文本需要大量工作。用户输入的数据(如业务描述)如何。) 还有其他选择吗。 我在想一个解决方案,比如在服务器端创建一个页面,然后在发送回客户端之前翻译它。有什么方法可以做到吗?(翻译所有内容,包括从数据库或通过代码添加的数据。并且不影响设计。

我开发了一个大型商业门户。我刚刚意识到我需要我的网站在另一种语言。我已经研究了可用的解决方案,如
  • 在我的网站上使用了第三方控件。(不适合我的设计。从SEO的角度看没有用处。不想显示第三方品牌名称。)
  • 为每种语言创建资源文件。(重新构造页面以使用资源文件中的文本需要大量工作。用户输入的数据(如业务描述)如何。)
  • 还有其他选择吗。

    我在想一个解决方案,比如在服务器端创建一个页面,然后在发送回客户端之前翻译它。有什么方法可以做到吗?(翻译所有内容,包括从数据库或通过代码添加的数据。并且不影响设计。)

    我想你应该试试谷歌翻译

    非常简单,非常有效


    HTH

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


    自动翻译系统通常很好地让人对另一种语言的意思有一个大致的印象,但我在试图描绘一个专业形象时,永远不会使用它们,因为它们输出的内容往往毫无意义。没有什么叫“不专业!”就像文本一样,因为它是自动翻译的,所以没有意义。

    我会选择资源文件路径而不是翻译选项,因为一种语言中单词的含义可能是非常上下文化的,甚至一个错误都可能破坏网站的可信度

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

    我认为本地化无论如何都不是一件容易实现自动化的事情,因为数据库中保存的文本通常会导致模式更改以允许多种语言,而web HTML通常需要重新构造以处理截断或包装的标签和按钮文本,因为,例如,您已经翻译成德语或其他语言

    其他考虑: 区域性设置-财务定界符、日期格式。 从右到左-有些语言(如阿拉伯语)是从右到左书写的,这意味着页面需要重新思考,以控制图像等位置


    祝你万事如意。

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

    您需要做的第一件事是将标记中的纯文本转换为asp:Localize控件。通过使用Localize控件,您可以保留现有的
    标记,只需替换其中的文本即可。真的没办法。VisualStudio的搜索和替换支持正则表达式匹配,这可能有助于您实现这一点,您也可以使用Resharper(见下文)

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

    或者,如果您想使用资源文件,除了VisualStudio之外,我建议您使用两个工具:()和。以下是我将采取的步骤,以使用此方法完成此任务:

  • 在VisualStudio中为每个页面使用“生成本地资源”工具
  • 对标记中的文本使用Resharper的“将HTML移动到资源”使它们成为本地化控件
  • 使用Resharper搜索代码中任何可本地化的字符串,并将它们移动到资源文件中
  • 使用代码分析/FXCop的全球化规则来帮助您查找可能遇到的任何其他问题,如设置数字、日期等
  • 一旦所有文本都在resx文件中,使用Zeta资源编辑器加载所有resx文件,添加新语言,并导出以进行翻译(如果您足够勇敢,也可以自动翻译)

  • 我已经在一个被翻译成8种语言(并且还在增长)的网站上使用了这种方法,该网站有几十个页面(并且在增长)。然而,这不是一个用户可编辑的网站;页面完全由程序员控制。

    我最终以艰难的方式完成了这项工作:

    • 我在string类上编写了一个名为TranslateInto的扩展方法
    • 在页面的PreRender方法中,我根据控件的类型(包含文本的类型)递归获取所有控件
    • Foreach通过它们和text.TranslateInto(SupportedLanguages.CurrentLanguage)
    • 在我的TranslateInto方法中,我有一个大得离谱的switch语句,每个字符串都显示给用户及其关联的翻译

    它不是很漂亮,但很管用。

    一个大的开关盒?使用字典/哈希表(每种语言都有一个单独的实例),效率和速度都会大大提高。

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

    它也非常有用,因为它允许我们与来自世界各地的翻译人员合作,而不需要他们具备任何技术专长。它还允许我们让第二位译者阅读翻译校对


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

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

    转到:

    一,
    <%--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--%>
    
    ////LOCALIZATION
    string thispage = Request.Url.AbsolutePath;
    eng_ver.NavigateUrl = thispage;
    spa_ver.NavigateUrl = thispage + "?ver=es-ES";
    ////LOCALIZATION
    
            ///'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"]);
        }
    
    <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>
    
    <div id="google_translate_element"></div>