I'm creating a website template where the owner of the site will be able to choose a native language other than English and localize some content by themselves. Let me explain it better with the real situation right now: My site will have English and Turkish (my native language is Turkish, but THIS should be changeable and applied to any non-English language) versions of the main content titles, such as BLOG, PROJECTS, ABOUT, CONTACT etc, but number and name of these are completely dependent to the choice of the user, so I could open a new section named MySection, and it's title and it's native translation to Turkish will be stored in my DB (using EF). Also in my settings at the DB, the native language's code (in this case "tr") is stored. What is the most modular/organized way of sending the webpage content according to browser, just like this:
In DB, sections are organized this way (titles and their Turkish translations) (all these will be at arbitrary number and completely user created):
Title NativeTitle
---------------------
BLOG BLOG
PROJECTS PROJELER
ABOUT HAKKINDA
Also I have my native language setting (that I've created) setting as tr (which is up to the site owner and can be changed too). So, depending on the user's browsers preferred language setting, I want to show the Turkish content, and for all the other language preferences, including (obviously) English, I want to show the default English content. Localization for a specific language of static content is pretty straightforward with RESX files, but in my situation, I neither have static content nor a specific known native language, so all my data comes from the DB. I want to code this as less as possible and as declarative as possible. What is the best practice of doing this? Is checking the setting of the native language and the Current Culture in a page and if they are equal sending the native else sending the default title the only way? It WILL definitely work, but what if I want to extend it to other parts of the site? I don't want if's and else's everywhere around the site, I need some kind of a centralized string mapping system. What's the best way?
You can override the InitializeCulture ( http://msdn.microsoft.com/en-us/library/system.web.ui.page.initializeculture.aspx ) method in your base Page to dynamically load your localized content by checking the Thread.CurrentThread.CurrentUICulture property ( http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentuiculture.aspx )
Related
I am currently working on a project where I will have some pages translated entirely (meta-information on the project) and some pages (articles) only in one language, but still with the interface in many languages.
How should I handle this with regard to Google etc.?
I want the information to be available in all languages, so that people can find it with search terms in their local language, but can I get duplicate content problems if the articles are available on /fr/my-nice-article /de/my-nice-article with the same article text (not translated) and only translated interface ("Ecris un commentaire", "Schreibe einen Kommentar").
AFAIK Google automatically determines what language your content is written in. It users the language of the majority of all text. If you want to explicitly specify it, you can use the following snippet:
<meta name="language" content="de" />
Google, of course, shows only the pages in the user's language (so German Google users only see the de-content).
Found something directly from Google
Websites that provide content for different regions and in different
languages sometimes create content that is the same or similar but
available on different URLs. This is generally not a problem as long
as the content is for different users in different countries. While we
strongly recommend that you provide unique content for each different
group of users, we understand that this may not always be possible.
There is generally no need to "hide" the duplicates by disallowing
crawling in a robots.txt file or by using a "noindex" robots meta tag.
However, if you're providing the same content to the same users on
different URLs (for instance, if both example.de/ and example.com/de/
show German language content for users in Germany), you should pick a
preferred version and redirect (or use the rel=canonical link element)
appropriately.
I'm trying to make a multilingual website in Drupal. My languages that I need are german, dutch, english and french. I've added the i18n module and added the languages.
I work with views to show my content on the website. For the moment I have one page that I want to translate in the 4 languages. I've created a view for each translation. Now I want to link my view to the correct node. Therefore I use a view field in my content node.
PROBLEM:
My problem lies in the url. The first time everything is fine.
my url: localhost/?q=nl/activiteiten
Now when I select english in my language bar the language changes but not the url. my url: localhost/?q=en/activiteiten
Here "activiteiten" must be "activities". How do I solve this?
I've searched a while for this problem on the drupal forums but I can't seem to find a good solution to this problem. The only thing I've found is working with a view field in the content node or with input_views in the body of your node. These two won't work for me.
i18 module with no need to create a view for each
language, you have to translate content using the i18, then
charge between changing the language.
You can have problems from the beginning did not use the module
all languages declared, you have to edit each
content and save it to associate it well.
Well, just reading your own answer I think you've taken a wrong turn somewhere (or you're trying to do something else and I didn't quite catch on).
To create multilingual views for pages (which is what I think you want to do) you would first create a page view (duh), specify what you want to be shown and define a path to it. Then you enable (if it's not enabled already) the URL-alias ("URL-aliassen") module and define aliases for each language (ie. FR : activites - I don't like accents in URLs :p - NL : activiteiten, DE : aktivitaten - if memory serves me right anyway, again with accents removed :p). These aliases will be used as the path from that moment on.
For an article describing this process refer to : Translating Views paths in Drupal.
BTW You could also use the Pathauto module to create these aliases based on the title of your nodes of course instead of defining them manually, you can even (re)create them in batch when you alter the settings.
Eventually I've solved my problem with a view field. I've made my view and in my node I've selected that view in the list. Then in the body you can type something for that language.
I am working on a bilingual site in the latest version of Drupal 6. I installed the Internationalization module and the Views translation module, among many others.
The problem: On /admin/build/translate/search, some elements (e.g. the view title) appear in the text group "Views" and Drupal assumes they are in German, requiring an English translation.
Other elements (e.g. exposed filter labels) appear in the text group "Built-in Interface" and Drupal assumes they are in English, requiring a German translation. But in fact all the strings are in German:
To be clear, I am not seeing an issue with the language selection or the display of the view. The issue is when the page is first parsed by the language system and any translatable strings are inserted into the translation table. Drupal assignes different source languages for elements on the same page. The result is a mix of languages, once these strings are translated.
I thought that maybe it is the language preference of the user who hits the page first that interferes with this, but once I started changing it, I ran into this issue (reading the thread was eye-opening - it should be mandatory reading for anyone considering Drupal for enterprise-class solutions). Ok, now I have the URL prefix in the mix, which means that when a user changes the language preference, the site language does not change until they manually change the URL.
Once I managed to get the page rendered in English, it turned out that Drupal does not pick up the translation strings when the display language equals the source language. So no luck there.
I am ready to code my view in 2 languages, depending on what Drupal thinks the source language is for the various elements, but even that won't work. Has anybody else experienced this?
I think that you probably had basic mistake in how Drupal multilingual system work. I did the same mistake in the first multilingual Drupal site that I've built.
The most important thing to do is - if one of your languages is English - Use English in your code. if you need to put the word 'room' in one of the template use t('room') and not t('zimmer'). Your view titles? use English. Tag names and description? use English. The primary language should be English. After you setup your English site, you can translate your site using translate interface. I know it sound strange to one that his mother tongue is other than English, but I made several multilangual sites with i18n and it is the right way to do it with minimal complications.
Changing the admin interface language only change the interface - not the value. If you change the interface to German (i.e yoursite.com/de/admin/views) it doesn't mean that you are on 'German views'. It is the same view.
There are some exceptions - Multilingual variable as I explained here: How can I set a different homepage per language in Drupal?
I hope that is helpful.
I am working on a multilingual web application. I'm wondering how do i design the best user interface that the user can localize data for various languages? for instance, in making a page which its title is different in every lang, do i put a textbox for every one? it's not a suitable way to do(in case of 10 lang, the user has 10 textbox!!! too silly)
what is your idea about this?
Edit: i have no problem with globalization in my system. in fact, i'm looking for a good way for my interface design which user can enter his data to my forms in various langs.
thanks in advance
What about only one textfield and a dropdown containing the languages. After selecting the language and filling out the textfield the field gets submitted and the chosen language disappears from the dropdown list.
the entered value and language then appears beneath the dropdown and textbox with a way to edit/delete it. this way it's always clear to the user which languages are already covered and which values are assigned to them. furthermore it's a nicer way if not all 10 languages have to be mandatorily filled in, if the user e.g. just knows english and french.
Hope you know what I mean, otherwise I'll have to create an example screenshot :-)
You could have 3 text boxes, and that's fine...get to 10, and it starts getting a bit crazy. Beyond that it starts looking pretty bad.
Maybe you could put up to say 5 text boxes up...but if it goes beyond 5 (because the user desires localization for more than 5 places) it places a single textbox with a dropdown next to it, and the dropdown would contain the current language.
Textbox would auto-populate with the current value for the language selected in the dropdown. Should work well in asp.net, and it can be done both client side, or server side on a post back pretty easily, so you don't need to do anything crazy for people not running javascript.
You have one text box.
On load you populate the text box depending on language.
The content will be populated from some kind of resource file. If there isn't much text it could even go in your config file.
Be aware of the following:
Different content length depending on language.
Right to Left alphabets screwing up your alignment
This is a classic project for using NUNIT or similar to promve that things work after new translations are added!
What language do you use in development? If this is something like PHP, then you definitely should use templates and load text strings into them from configuration files for every language. In Smarty, for example, I use configuration files for that.
Text strings for error messages or something like that could be put to files like .ini and loaded from there.
The Google Web Toolkit (GWT) demo shows the same page with versions available in English, French, Arabic and Chinese.
The GWT docs have a thorough discussion of internationalization. You could emulate their implementation.
Constants: Useful for localizing typed constant values
Messages: Useful for localizing messages requiring arguments
ConstantsWithLookup: Like Constants but with extra lookup flexibility for highly data-driven applications
Dictionary: Useful when adding a GWT module to existing localized web pages
Remember that dates and times are represented differently in different locales, if your forms use them.
The W3C also discusses Internationalization Best Practices in HTML content.
Normally, a user navigating a website will have a preference specifying the language of the whole site. I think it would be confusing to break this pattern.
So, in an intro page, or a user preferences page, allow the user to select a language; then, on the other pages, display a consistent set of controls to be able to edit the content on each page.
Are you making an administration page that allows users to change the text used in other pages in the application?
If so, you could use grid like in Zeta Resource Editor:
thumbnail http://img202.imageshack.us/img202/7813/zetaresourceeditor02.th.png
Or you could make a per-language list like in nopCommerce:
thumbnail http://img249.imageshack.us/img249/9079/nopcommerce.th.png
You can use javascipts as a resource file for your language like. language_arabic.js, language_english.js,etc.So when a use wants to see his preference language he/she has select the available languages from drop down list. Regarding this the user has to change the language settings from his/her computer. This is what I did while I was working a GIS project to customize a Geocortex IMF( http://demos.geocortex.net/imf-5.2.2/sites/demo_geocortex/jsp/launch.jsp ) site for an Arabic client.
I have a question about localization
how can i do localization lets say that i have a dropdown list
that holds the available languages: English,french and arabic
and I have a label which get it says "good morning",so i want to change the lang. according to selected lang. in drop down list so when the user chooses french label will say "bonjour" and when the user slect arabic the label will hold "صباح الخير" AND MOVE IT FROM THE LEFT OF THE PAGE TO THE RIGHT BECAUSE ARABIC IS WRITTEN FROM RIGHT TO LEFT ,,
ANY HELP WILL BE HIGHLY APPERCAITED
THNX IN ADVACE
In short, localization in ASP.NET is fully supported using resource files, e.g. files containing strings, images and other resources for each user interface language. They're named after the culture, for example MyResources.en-US.resx or MyCulture.fr-FR.resx.
The only thing that is a bit tricky is handling LTR and RTL languages and, as far as I know, must be done "manually", via code, or via CSS.
You might want to check some documentation on MSDN.
Have you ever saw the Localization video tutorials from ASP.NET website?
How Do I: Create a Multi-Lingual Site with Localization?
and
How Do I: Localize an ASP.NET AJAX Application?
They are great to get you started...
you can create an http module that is going to read the html from the output stream and translate it,use RegEx and make sure not to translate html tags and JavaScript
there is also the asp.net standard (built-in) way, with resource files, just right click your project and click add items resource file, you must create a resource file for each language like for example: MUI.resx (that's the neutral one), MUI.fr.resx, MUI.es.resx, and you are going to use them in the web pages like this: MUI.keyword , that's if you are going to have one resx per language for all pages, you could also have one resx per language per webform.
And the current language is in the System.Threading.CurrentThread.CurrentUICulture
google it a little bit you will find more, at least now you know what to look for