I am creating a website structure which will allow for multiple "language packs" for verbiage across the site.
I have look into internationalization, but I'm not sure it's the route will work because all the different language packs will be in English. It would just be re-wordings, essentially.
Can internationalization (with resource files) work for this, or is there a better option out there?
Internationalization should work because it does factor in locale. Even if the language is the same, the locale is different. Eg en-gb
Take a look at this post. Note the section where the post talks about the differences between spanish in mexico and spanish in spain.
http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx
Related
I'm posting this on behalf of a client and am unfamiliar with Kentico and .NET so please bear with me.
The issue
Our client has a website in two languages, let's say English and German.
URLs are currently outputting like this:
example.com
example.com/home (when they try to redirect this to the root,
they get a loop)
example.com?lang=de
example.com/home?lang=de
example.com/cat-l1/page
example.com/cat-l2/page?lang=de
Even with canonicalization, the above is very untidy and bad for SEO purposes.
My client has tried to implement multilingual prefixes for URLs in Kentico 8, but wound up with something like:
example.com/en
example.com/de
example.com/en/page
example.com/de/seite
This is better, but I neither want to redirect the root domain nor have the superfluous /en/ subdirectory.
I've gone through Kentico support forums and tried to source documentation, but this information doesn't appear to be readily available.
What I require
I would like to use multilingual prefixes ONLY for alternate languages (not the default). For instance:
example.com/
example.com/de
example.com/page
example.com/de/seite
Can someone please let me know:
What CMS settings need to be set in order to get the required URL
structure to work?
If some kind of custom URL rewriting handler
is required, what needs to be done? (I'll update this as I go, but don't even know where to look/start)
If understand correctly you want default (English) with no prefix, and other langs with prefix. You can do it purely with Kenitco settings (I had the same set up on one of my web sites). Go to settings-> URLs and SEO -> SEO - Cultures.
You need to check the last 2 (Use language prefix for URLs and Allow URLs without language prefixes). Here is the documentation Also take a look at how to configure prefixes
Also make sure that in sites -> your site name -> culture Default content culture is set to English. I know you can do with routes, i.e. you will have /home for english and /de/home for German, but I don't think you can do it with standard URLs. Essentially you will have to switch to routes the whole site (if your site is not big you can do it manually).
P.S. When you adding a new route you need to restart the app in order for route to work (especially in 8).
Let's say I have a website that has 2 languages, one uses Latin and the second one Cyrillic transcriptions in URLs.
For example:
example.com/link
example.com/ссылка
My question is which is more user and SEO friendly, if I leave them as is or if I add the language prefix, so they'd become
example.com/en/link
example.com/ru/ссылка
I understand that such subdirectories should be used if I have languages that are similar and then the user wouldn't be confused, but does that also apply in my case?
It's better to use the second one for better SEO results.
example.com/en/link
example.com/ru/ссылка
Google likes the tree-like structure. Of course you can use the main language without prefix.
Also it's better to have all languages in one domain:
domain.com/en
domain.com/ru
not on subdomains like this
en.domain.com
ru.domain.com
Wish you luck.
What is considered the best strategy for URLs of translated websites? Something I see happen frequently is:
http://example.com/english-slug.html
http://example.com/de/english-slug.html
http://example.com/fr/english-slug.html
This has the (minor) advantage that a user can manually switch to another language by modifying the URL. The disadvantage seems to be that the URL consists of a slug in the wrong language for every page not in the default language. That would cause a SEO penalty, I think.
The alternative would be to translate the slugs as well and optionally omit the language identifier as well:
http://example.com/english-slug.html
http://example.com/deutscher-slug.html
http://example.com/slug-francois.html
Some languages do not really lend themselves to be 'sluggified', such as Russian, Chinese and Arab. You'll end up with transliterations that make little sense.
I think you should use language tags and translated slugs:
http://example.com/en/hello-world
http://example.com/de/hallo-welt
Why language tags? To avoid collisions.
Sometimes you might want to have the same slug for different languages (for example, "team" in English as well as in German).
Why translated paths? For better usability.
Not all users understand the "default" language, and depending on its script, they might not even be able to type/remember/dictate the slug. (It doesn’t make sense in the first place to use human-readable slugs that only part of your users are able to understand.)
Yes, it would be a "(minor) advantage that a user can manually switch to another language by modifying the URL". But it’s unlikely that users or search engines would expect this to work (see my related answer on Webmasters). So you would gain little (URL hacking for advanced users) and lose much (bad usability for users using the non-default language).
That said, it would still be possible to enable this URL hacking feature in most cases: When users change the language tag de (in /de/hallo-welt) to en (/en/hallo-welt), you could check if it exists (if yes, show it), and if not, check if there exists a slug "hallo-welt" in any language, find its English translation and redirect to it (from /en/hallo-welt to /en/hello-world).
Another way is setting the language as a query string parameter, such as:
http://example.com/hello-world?hl=en
http://example.com/hallo-welt?hl=de
for example Google Flights web site uses this method.
The best solution, if you can afford it, is to send the document with the right name, that means, using the right word on each language.
Of course each document should be sent with the respective language setting on the headers.
For storing them, you can use folders and let the web server choose the right document according to the language preference; or you can use server side technology, like PHP, perl, etc to send the document and adjust the URL.
In any case, you have to have a default language to be sent when you don't have the requested language.
If you can't or don't want to send document with the right name, using subdomains is the best next option. This option, is not as common as adding the language after the domain, and that means, that people may not be used to it, although, it has some advantages, for instance;
Each language behaves like a whole new URL/site (almost).
People feel like visiting a dedicated site, not a subsection where the second language is relegated and may fail at any moment (some content may not be translated).
Some people are not familiar with their two letter representation of language, but everybody knows how his language is called and spelled.
It generates cleaner URL's.
It is believed that having subdomains increases appearance on SERPs (I don't have knowledge of this and it may have changed).
It's easier to have different layouts if you want to.
It's easier to set different servers according to language.
Of course subdomains have some disadvantages, like:
A bit more work to set properly from the server perspective.
Less collaboration from the part towards high ranking.
Some people may not expect it but expect a subfolder.
Next would be the subfolder option, as you show on the question. This is the recommended way if your main perspective is SEO since all the relevance of the domain stays on that same domain and each language helps to a common "pot" of ranking.
My perspective when choosing a solution, is never SEO, under any circumstance. Whatever ranking I get is due to the content itself and the best use I can give to technology. But I understand that my point ov view is not the most common.
One thing to consider also, is that you should provide some kind of explanation or help the user so he can take actions to change to the preferred language. It may be using icons, a tooltip, or any other method that works for your design and verbosity.
One thing to avoid, and you didn't ask for it, but is related; is using language autodetection. Lots of times, the user is in a different country or using a version of a browser that has a different language from what he can understand and the autodetction just makes a big mess. Offer the default version and a clear way to change it.
What are the best Rails inflection rules for the German language out there? Examples from other languages to be ported would be great, too.
In my experience looking for a complete set of German inflection rules is hopeless. Even the default ones (English) are incomplete.
Here's what I do in my Rails applications.
Only use pluralize and Co. for code identifiers.
For model names (and all "user facing" strings) use the I18n API even if there's only one language.
Configuring the I18n stuff is slightly more work to set up, on the other hand your code is no longer cluttered with end-user messages.
While I have experience developing Rails apps in English, I am a blank slate when it comes to handling globalization, so please don't shoot me in the head if my question 'doesn't make sense' :)
I have been asked to add multi language feature to a part of a Rails app that I am working on. Initially its only going to be 2 languages, French and German. The content that will be translated (which is in English now) is rendered using partials at the moment hence I am getting a bit inclined on creating partials with different languages and then based on the users language selection call the relevant partial - Would you recommend this approach?
Although it seems a heavy weight solution for this particular purpose, but I am also looking at the Rails Globalize plugin. This seems to appeal if I look at the long term gains, something like what if later I am asked to translate the entire app.
Any insights on what would be a proper structured approach to handle globalization in Rails?
Many Thanks
Have you had a look at the i18n (internationalization) API that is in Rails itself as of 2.2? It makes it easy to store your language translation files as .yml files, so a fr.yml and a de.yml or whatever. It also steps through different approaches of making languages accessible via browser prefs, or URLs, subdomains, etc. In your HTML template files you use symbols to specify the keys for the string you've translated. At least in my basic usage and testing, it was very easy to work with.
I preffer using translator instead of Rail's i18n, since the former handles "scoping of translation" automatically. I recommend you give it a look.
This is a great article on how to use Ruby's GetText to localise you Rails App.