01.02.09

Transcript to script translations?

Posted in Uncategorized at 12:03 pm by Pirate Praveen

What is there to script in translations? In many cases placeholders like ‘%1’ are used when you have many similar strings that follow a pattern like choices in a dropdown menu. With agglutinative languages like Malayalam mere substitution is not enough when prepositions are used to connect the placeholder with the rest of the sentence. The nouns that takes the position of the placeholder needs to be changed depending on the preposition/relationship. I will give an example to make this clear.

before_transcript

Consider the following message “&Location of %1”, where %1 can be Province, State, District, Country … In case of English just replacing %1 with the actual word would solve the problem. Lets see how it looks if we try to translate this into Malayalam.

"%1 ന്റെ &സ്ഥാനം"

In the actual case, if we substitute %1 with “Province”, it looks like this.

"പ്രോവിന്‍സ് ന്റെ &സ്ഥാനം"

It doesn’t look right. So how do we do this? So Transcript comes to our rescue here. It is fully integrated into kde4. Read more about it here.

So with Transcript you can create a dictionary where all possible forms of a noun can be added and depending on the relationship of the placeholder you can tell transcript to pick the appropriate form. Neat, ain’t it?

This is how the dictionary looks like.

// dictionary entries follow:
addDictCases("സംസ്ഥാനങ്ങള്‍", "സംസ്ഥാനങ്ങളുടെ");
addDictCases("രാജ്യങ്ങള്‍", "രാജ്യങ്ങളുടെ");
addDictCases("സംസ്ഥാനങ്ങളും വിഭാഗങ്ങളും", "സംസ്ഥാനങ്ങളുടേയും വിഭാഗങ്ങളുടേയും");
addDictCases("സംസ്ഥാനങ്ങളും ഭരണപ്രദേശങ്ങളും", "സംസ്ഥാനങ്ങളുടേയും ഭരണപ്രദേശങ്ങളുടേയും");
addDictCases("പ്രവിശ്യകള്‍", "പ്രവിശ്യകളുടെ");
addDictCases("പ്രദേശങ്ങള്‍", "പ്രദേശങ്ങളുടെ");
addDictCases("ജില്ലകള്‍", "ജില്ലകളുടെ");
addDictCases("വിഭാഗങ്ങള്‍", "വിഭാഗങ്ങളുടെ");
addDictCases("കൌണ്ടികള്‍", "കൌണ്ടികളുടെ");
addDictCases("മുനിസിപ്പാലിറ്റികള്‍", "മുനിസിപ്പാലിറ്റികളുടെ");
addDictCases("പെരിഫറികള്‍", "പെരിഫറികളുടെ");
addDictCases("പാരിഷസ്", "പാരിഷസുകളുടെ");
addDictCases("ഗവര്‍ണറേറ്റുകള്‍", "ഗവര്‍ണറേറ്റുകളുടെ");
addDictCases("മഹാസമുദ്രങ്ങളും താഴ്വരകളും", "മഹാസമുദ്രങ്ങളുടേയും താഴ്വരകളുടേയും");
addDictCases("പ്രിഫക്ച്ചറുകള്‍", "പ്രിഫക്ച്ചറുകളുടെ");
addDictCases("ഒബ്ലാസ്റ്റുകള്‍", "ഒബ്ലാസ്റ്റുകളുടെ");
addDictCases("കോമാര്‍കെസ്", "കോമാര്‍കെസുകളുടെ");
addDictCases("ഭൂഖണ്ടങ്ങള്‍", "ഭൂഖണ്ടങ്ങളുടെ");
addDictCases("കാന്റോണ്‍സ്", "കാന്റോണ്‍സുകളുടെ");
addDictCases("എമിറൈറ്റ്സ്", "എമിറൈറ്റ്സുകളുടെ");

This example has only one form, but any number of forms can be added.

Now you add this and javascript functions to pull this info in a file with a .js extension and name remaining the same as the .po file. The javascript functions that does the actual magic is given below.

function getProperty (prop, key) {
return _dict_[key][prop];
}
Ts.setcall("get-case", getProperty);

_dict_ = {};
function addDictCases (key, pos) {
if (!_dict_[key])
_dict_[key] = {};
_dict_[key]["possesion"] = pos;
}

Link to the repo.

And in the po file you can call this function like this.

msgid "&Location of %1"
msgstr "%1 ന്റെ/ളുടെ സ്ഥാനം"
"|/|"
"$[get-case possesion %1] &സ്ഥാനം"

after_transcript

Leave a Comment