How to translate website in another language?(ASP .NET , c#)
Asked Answered
B

11

11

I have developed a large business portal. I just realized I need my website in another language. I have researched the solutions available like

  • Used third party control on my website. (Does fit in my design. Not useful regarding SEO point of view. Dont want to show third party brand names.)
  • Create Resource files for each language.( A lot of work required to restructure pages to use text from resource files. What about the data entered by the user like Business Description. )
  • Are there any Other options available.
    I was thinking of a solution like a when a page is created on server side then I could translate it before sending back to client. Is there any way I can do that?(to translate everything including data added from databases or through a code. And without effecting design. )

    Behn answered 4/6, 2010 at 11:26 Comment(1)
    As far as I know for static resources people normally use the resource mechanism of ASP.NET and for user generated content you can, for example have CMS-like apporach, where they have versions of the same page for every supposted language and each version is manually edited by a resposible person. As for automatic translation you can try to integrate with google translate or something of the sort.Schutt
    F
    16

    If you really need to translate your application, it's going to take a lot of hard, tedious work. There is no magic bullet.

    The first thing you need to do is convert your plain text in your markup to asp:Localize controls. By using the Localize control, you can leave your existing <span> tags in place and just replace the text inside of them. There's really no way around this. Visual Studio's search and replace supports regular expression matching that may help you with this, or you can use Resharper (see below).

    The first approach would be to download the open source shopping application nopCommerce and see how they handle their localization. They store their strings in a database and have a UI for editing languages. A similar approach may work well for you.

    Alternatively, if you want to use Resource Files, there are two tools that I would recommend using in addition to Visual Studio: Resharper 5 (Localization Features screencast) and Zeta Resource Editor. These are the steps I would take to accomplish it using this method:

    1. Use the "Generate Local Resource" tool in visual studio for each page
    2. Use Resharper's "Move HTML to resource" on the text in your markup to make them into Localize controls.
    3. Use Resharper to search out any localizable strings in your code behind and move them to the resource file as well.
    4. Use the Globalization Rules of Code Analysis / FXCop to help find any additional problems you might face formatting numbers, dates, etc.
    5. Once all text is in the resx files, use Zeta Resource Editor to load up all of your resx files, add new languages, and export for translation (or auto translate if you're brave enough).

    I've used this approach on a site translated into 8 languages (and growing) with dozens of pages (and growing). However, this is not a user-editable site; the pages are solely controlled by the programmers.

    Filament answered 4/6, 2010 at 12:59 Comment(1)
    It's even harder than that - you're probably building up strings using some fixed text and some database text, and the order of these will be different in translation, requiring placeholders in the transltions. If it's a web site, you probably also have text in some images, which will need to be regenerated.Esthonia
    S
    2

    a large switch case? use a dictionary/hashtable (seperate instance for each a language), it is much, much more effective and fast.

    Superscription answered 15/8, 2010 at 9:23 Comment(1)
    Try and make your answer more understandable.Clingy
    F
    1

    To Convert The Page To Arabic Language Or Other Language .

    Go to :

    1-page design

    2-Tools

    3-Generate Local Resource

    4-obtain "App_LocalResources" include "filename.aspx.resx"

    5-copy the file and change the name to "filename.aspx.ar.resx" to convert the page to arabic language or other .

    hope to helpful :)

    Forthright answered 19/1, 2014 at 7:42 Comment(0)
    A
    1

    I found a good solution, see in http://www.nopcommerce.com/p/1784/nopcommerce-translator.aspx

    this project is open source and source repository is here: https://github.com/Marjani/NopCommerce-Translator

    good luck

    Augustusaugy answered 25/4, 2015 at 11:10 Comment(0)
    F
    1

    Without installing any 3rd party tool, APIs, or dll objects, I am able to utilize the App_LocalResources. Although I still use Google Translate for the words and sentences to be translated and copy and paste it to the file as you can see in one of the screenshots below (or you can have a person translator and type manually to add). In your Project folder (using MS Visual Studio as editor), add an App_LocalResources folder and create the English and other language (resx file). In my case, it's Spanish (es-ES) translation. See screenshot below. enter image description here

    Next, on your aspx, add the meta tags (meta:resourcekey) that will match in the App_LocalResources. One for English and another to the Spanish file. See screenshots below:

    enter image description here

    Spanish: (filename.aspx.es-ES.resx)

    enter image description here

    English: (filename.aspx.resx)

    enter image description here

    .

    Then create a link on your masterpage file with a querystring that will switch the page translation and will be available on all pages:

    <%--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--%>
    

    .

    On your masterpage code behind, create a dynamic link to the Hyperlink tags:

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

    .

    Now, on your page files' code behind, you can set a session variable to make all links or redirections to stick to the desired translation by always adding a querystring to urls.

    On 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
    

    . On Click Events sample:

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

    I hope my descriptions were easy enough.

    Fiann answered 22/10, 2020 at 11:45 Comment(0)
    C
    1

    If you don't want to code more and if its feasible with google translator then You can try with Google Translator API. you can check below code.

    <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>
    

    Also, Find below code for <body> tag

    <div id="google_translate_element"></div>
    
    Choirboy answered 13/1, 2021 at 21:3 Comment(0)
    M
    0

    It will certainly be more work to create resource files for each language - but this is the option I would opt for, as it gives you the opportunity to be more accurate. If you do it this way you can have the text translated, manually, by someone that speaks the language (there are many companies out there that offer this kind of service).

    Automatic translation systems are often good for giving a general impression of what something in another language means, but I would never use them when trying to portray a professional image, as often what they output just doesn't make sense. Nothing screams 'unprofessional!' like text that just doesn't make sense because it's been automatically translated.

    Moreen answered 4/6, 2010 at 11:42 Comment(1)
    Yes. But we dont have resource files for English either. I have seen the option Generate local Resource but It does not include the spans that show most of the user interface labels:(Behn
    H
    0

    I would take the resource file route over the translation option because the meaning of words in a language can be very contextual and even one mistake could undermine your site's credibility.

    As you suggest Visual Studio can generate the meta resource file keys for most controls containing text but may leave you having to do the rest manually but I don't see an easier, more reliable solution.

    I don't think localisation is an easy-to-automate thing anyway as text held in the database often results in schema changes to allow for multiple languages, and web HTML often need restructuring to deal with truncated or wrapped label and button text because, for example, you've translated into German or something.

    Other considerations: Culture settings - financial delimitors, date formats. Right-to-left - some languages like arabic are written right to left meaning that the pages require rethinking as to control positioning like images etc.

    Good luck whatever you go with.

    Hiedihiemal answered 4/6, 2010 at 12:36 Comment(0)
    M
    0

    I ended up doing it the hard way:

    • I wrote an extension method on the string class called TranslateInto
    • On the Page's PreRender method I grab all controls recursively based on their type (the types that would have text)
    • Foreach through them and text.TranslateInto(SupportedLanguages.CurrentLanguage)
    • In my TranslateInto method I have a ridiculously large switch statement with every string displayed to the user and its associated translation.

    Its not very pretty, but it worked.

    Manservant answered 4/6, 2010 at 14:38 Comment(0)
    E
    0

    We work with a Translation CAT tool (Computer Assisted Translation) called MemoQ that allows us to translate the text while leaving all the tags and coding in place. This is very helpful when the order of words change when you translate from one language to another.

    It is also very useful because it allows us to work with translators from around the world, without the need for them to have any technical expertise. It also allows us to have the translation proof read by a second translator.

    We use this translation environment to translate html, xml, InDesign, Word, etc.

    Equilibrate answered 1/2, 2011 at 17:44 Comment(0)
    K
    -4

    I think you should try Google Translate.

    http://translate.google.com/translate_tools

    Very easy and very very effective.

    HTH

    Kagera answered 4/6, 2010 at 11:33 Comment(2)
    Yes. This is great tool actually. But dont want to use because of the reasons listed in first bullet.Behn
    It's easy but it's not effective, it's not accurate, and it's not professionalDisembodied

    © 2022 - 2024 — McMap. All rights reserved.