views:

385

answers:

6

Hi All, 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. )

    A: 

    I think you should try Google Translate.

    http://translate.google.com/translate_tools

    Very easy and very very effective.

    HTH

    Raja
    Yes. This is great tool actually. But dont want to use because of the reasons listed in first bullet.
    Taz
    A: 

    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.

    Cocowalla
    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:(
    Taz
    +1  A: 

    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.

    iandayman
    +5  A: 

    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.

    Greg
    Thanks for a detailed answer.
    Taz
    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.
    Robin Bennett
    A: 

    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.

    Software.Developer
    That's one way to do it.
    Greg
    A: 

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

    max brin