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.
Related
I could not find a single official document on setting up and using multilingual on Sitecore SDN.
Basically, we have a requirement to enable couple of our multi-site Sitecore website to support multi-lingual i.e. Chinese Mandarin and Japanese.
Based on geoip of the visitor or some questions, we need to display either English or Mandarin or Japanese for couple of pages on site.
Given that I'm quiet new to multi-lingual set up, could someone please help me below:
Sitecore setup:
What exactly do I need to do in terms of Sitecore IA setup? Create separate page for each languages?
How will content author author the english, japanese and mandarin for the same content pages?
Do we need to install any language translator such that content author will type in English and it will get translated to Mandarin and Japanese during run time?
Is it possible that user can type in Mandarin or Japanese in Sitecore CMS?
Sitecore Experience Editor:
How will user author in Mandarin or Japanese languages using Sitecore page editor?
Coding Changes:
We are using ASP.NET MVC, do we need to make our content repository smart such that it will get content from Sitecore in specific language e.g. pass language or similar?
I googled on above topic as well, but could not find any legitimate result.
Thanks.
Your post is really broad. Below you can find high level answers to your questions. If you need any more specific answers, try to be more precise and post separate questions.
Sitecore setup:
You need to add selected languages under /sitecore/system/Languages node
Then you need to select chosen language and click Add a new version:
Your content authors will be able to select chosen language version and edit it
Sitecore doesn't have any automated translation out of the box. There are some code samples and modules which can help you with that. Ask google for it, e.g. https://www.google.com/search?q=sitecore+translate
Yes, user can type Mandarin or Japanese or any other language.
Experience Editor:
In Experience Editor authors can switch between languages in the Experience tab of the ribbon:
Coding Changes:
For automated language selection based on user IP, you need to use some GEO IP provider, e.g.: https://www.google.pl/search?q=sitecore+geo+ip, for switching the languages manually, create language selector, e.g.: https://www.google.pl/search?q=sitecore+language+selector
Remember that Sitecore 8 related documentation can be found on https://doc.sitecore.net/ or https://kb.sitecore.net/
To make language resolution work based on user IP you may replace
<processor type="Sitecore.Pipelines.HttpRequest.LanguageResolver, Sitecore.Kernel"/> with your implementation where you do resolve languages based on IP lookup.
With miltilinguality In Sitecore, you will still have the same items, but some of the fields will be versioned (having their own version for each specific language).
When authors create content - they are able to switch between languages from your ribbon.
From UI point of view, the language will be take out from exact user settings, that also includes Page Editor (in sample below user has German languguage set):
Few more links to read:
http://www.newguid.net/sitecore/2012/adding-ip-lookup-to-language-resolving/
http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2011/05/spoof-an-ip-address-to-test-geoip-with-the-sitecore-customer-engagement-platform.aspx
For most multi-lingual strategies, it is also recommended to have a fallback strategy so if an item does not have a version in the current context language, the user will still see something, even if its in the default language (probably English). I have a custom solution in which you can model after in my blog post:
http://mrstevenzhao.blogspot.com/2015/08/sitecore-custom-language-fallback.html
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 )
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'm really stumped here.
I've created a page with 3 languages, but the language switcher will not work properly.
I have translated both the menu entries and the content, and I want to use the language switcher to change both the menu item language and the content language.
What is happening now:
The language switcher points the browser to the node with the content translated, but the menu items are not working.
Or more exactly, the are for english, not russian.
I have in total 3 languages: Latvian, Russian and English, with Latvian as default. When I create some content in Latvian and the corresponding menu items, all is well. When I translate it into English, and add the menu items for English, all is well too, but the prefix for the link is not added. Since I'm using PathAuto, I believed, that that the language switcher would be using the newly generated node alias, but it is not. It is simply pointing to the node in English. But that is not the worst part.
When I select Russian, the content is translated, but none of the menu items appear. Also, sometimes, the prefix is added for russian, and then I can't revert back to Latvian, since there are no prefixes added for the default language, and the node alias is not displayed, only the node ID.
Any Ideas of how could I fix this? It is the only thing standing between me and completion of a project.
P.S. It almost seems, that Drupal was not made for this kind of a thing.
P.P.S I solved the problem for 2 languages - renamed English to Russian, since the client doesn't need English right now. I know, short term fix, but otherwise, my whole work would be in ruins.
Just in case someone else has a similar problem.
I fixed the language switcher issue by adding a path prefix for english.
My site's default language is spanish and I have english as a second one. I Installed everything, add the english prefix and followed the instructions of this site: http://openflows.com/blog/mvc/2008/10/03/drupal-6-i18n-basics
the prefix issue is discussed here: http://drupal.org/node/354069
Hope this helps
You can easily add the prefix for your languages by going to /admin/settings/language/edit/en
I had the same problem and this saved me the hassle of going and fixing it from the template.
The problem was in the template I was using. It rewrote all of the url's for beauty purposes, but didn't add prefixes correctly.
I'm about to embark on a journey to build a multilingual Drupal site, where I will most likely have to use Views, Panels and Taxonomy pretty heaily. I am a bit worried about the new-node-for-every-language approach, especially using Panels.
So far I've gotten it to work similarly to what I want by not having multilingual support for the Panels content-type, and fetching content that is from Current language and language neutral . This seem to work as expected, but I'm seeing some problems with it. There might be the occasion that I will have to have a language specific Panel (not published in English for example). If I need to have all my Panels multilingual, there seems to be alot of work to place the nodes for every column in every page in every language. I'm thinking I could possibly solve this by fetching the content with some kind of view with arguments, but this will most likely also lead to alot of work.
Is there some proper way of doing what I'm attempting to describe, or do I have alot of seemingly unnecessary work to expect?
I assume you have i18n module (http://drupal.org/project/i18n) and Views module installed. Then you can create a view for each language - one can choose language in "Filter" section of the view definition.
Once you have views, then you can link them to menus or blocks. The problem is you must have a separate version of block or menu for every language, with a proper view associated - Drupal is choosing proper language version itself according to the configuration (typically content type set in a browser). I haven't found any easier way of doing that.
Fortunately preparing multilingual content is not that hard thanks to the "transalte" functionality for nodes after enabling i18n module, so new node for every page is something one can live with.
BTW you are right that the way Drupal is doing i18n is not the best solution one can think of. I am having hard time with it sometimes.
Well there are some serious issues with views over translating taxonomy terms or vocabs names. This could be resolved with some extra modules or / and custom PHP code inside views fields. Usually 70% of modules does not support translation, then you need to patch them to support it. While others does have translation possibility, but it could be two possible ways: uses variables table to hold different translations UI dependent (need to switch to other language to find a string) or uses translation field tables to utilize "translation interface" from admin menu.
So far that's it :)
I wish you luck!