views:

32

answers:

3

Hi there i was wondering is there a way to write your code so that default language strings would not have to be hardcoded?

My app should not require code change to fix a typo in the label. It should also not affect other languages if i change english label.

As i see it now my strings have to be in english in the t('button label for example') call. Then this 'button label for example' text is key for other languages. Problems: 1. changing it requires code change 2. changing it requires to update key string in all languages 3. some languages can have different grammar and one english word could map to many versions so the text 'book' is not enoguh and can not be a label as it could be 2 different words in other language depending on the context (like to order or a book to read are).

Is there a way to have meaningful lables like mymodule_btn_buy_now and then each language would use this as key? So english labels would be decoupled from code and sit in translation file? Can that be done in some way in drupal?

Thanks!

+1  A: 

AFAIK there is no need to write the translation string inside t() in Enlisch, is is just the default and a convinience. If your default language is e.g. Polish, than you could write all the translation strings in polish and translate them via Drupals interface. The reason there is a proper english translation is that this is the default language and if no other languge is found, then the already given string is used.

It doesn't matter to Drupal if there is a single word or a complete sentence translated, so you can easily translate whole sentences and no need to worry about the grammer or whatsoever.

Personally, I would recommend keeping the Englisch translations from the t() method since it's a good default setting and just add all your needed languages with Drupal

DrColossos
but i cant see way to enable it, my drupal says English (provided by Drupal) in the search screen of the translate interface. do i have to play around somehow to allow translations of english texts when english is enabled?
Art79
If there is only english enabled, than there is nothing to translate since the default language is english and the only available language and it wouldn't make much sense to translate it since internals are dependent on the poper language. Try adding other languages, if you don't know how, bue sure to look into the Drupal website, it has plenty of tipps and articles how something can be translated.
DrColossos
I thought of that and i do have 3 languages. default is german and i also have polish and enlish. In my account i set polish to default to make sure English is no default in my context. English is still shown as "English (built-in)" and does not appear on translation interface screen when i want to edit translations of a string.
Art79
Art79
You don't need to use the `$custom_strings` mechanism for this - just add another custom language via the UI, and call it english as well. Then change your default as you like. This way, you can 'translate' any default english texts you don't like in your custom english language, and accept the default fallback in cases where the original is ok.
Henrik Opel
A: 

After sources investigation i think there is no way to do it clicking around.

The best solution i can see so far is replace all instances of "en" with "zu" ... did that in common.php and locale.php and actually works! LOL! will have to test it a bit as im not sure how badly does it hit performance. Should not be too bad its just as english was foreign language i guess. I can edit labels and export translated english texts.

Will test more, if you know better way to do it let me know.

Art79
+2  A: 

A common workaround for this problem is to add a new custom language, call it English as well and use that instead of the default one. If you configure translation to fall back to the untranslated string if no translation is available, you don't need to provide a full translation set for the custom English version - just add translations for the strings you want to change.

With this, you practically turn the hardcoded default English set into 'language agnostic' identifiers, for which all other languages, including the custom English, provide translated versions.

Henrik Opel