Reading strings from Wesnoth MO files
Moderator: Forum Moderators
- Viliam
- Translator
- Posts: 1341
- Joined: January 30th, 2004, 11:07 am
- Location: Bratislava, Slovakia
- Contact:
Reading strings from Wesnoth MO files
I tried to make a script that could read translated strings directly from MO files installed with Wesnoth. It was a bit difficult, and my choice of PHP as a scripting language on MS Windows probably contributed to it. So I want to share the solution, if anyone would like to do the same thing.
1) Setting up PHP 5
I use PHP 5 on MS Windows. In "php.ini" file (located in "C:\Windows") I had to uncomment the line:
But then PHP complained that is cannot find the DLL. Well, the EXE installer (which I used) does not include extensions. They must be downloaded from the "www.php.net" site in a ZIP distribution, and the file "php_gettext.dll" must be copied to the PHP 5 main directory.
Now, PHP 5 is ready to use gettext.
2) The script
and it is started by a BAT file:
I decided to put output to file, because the texts are in UTF-8, so writing them to command line would not produce the desired effect. Notepad is sometimes able to autodetect UTF-8 encoding in TXT files, but mostly it fails. The bytes ef bb bf at the beginning are the byte order mark, which is always recognized.
So the result is text file containing translations of "Battle for Wesnoth" in many languages.
1) Setting up PHP 5
I use PHP 5 on MS Windows. In "php.ini" file (located in "C:\Windows") I had to uncomment the line:
Code: Select all
extension=php_gettext.dll
Now, PHP 5 is ready to use gettext.
2) The script
Code: Select all
<?
bindtextdomain('wesnoth', 'C:\\Program Files\\Wesnoth\\po');
textdomain('wesnoth');
$languages = array(
"af", "ca", "cs", "de", "en", "es", "fi", "fr", "hu", "it", "ja", "la", "nl", "pl", "ru", "sk", "sv", "tr"
);
echo "\xef\xbb\xbf\r\n";
for ($i = 0; $i < count($languages); $i++) {
$lang = $languages[$i];
putenv('LANG=' . $lang);
echo "[" . $lang . "] " . gettext('Battle for Wesnoth') . "\r\n";
}
?>
Code: Select all
C:\php\php-cgi.exe -f test.php > out.txt
So the result is text file containing translations of "Battle for Wesnoth" in many languages.
Re: Reading strings from Wesnoth MO files
Hmm, why not simply convert .mo files back to .po files? (See msgunfmt.)Viliam wrote:I tried to make a script that could read translated strings directly from MO files installed with Wesnoth. It was a bit difficult, and my choice of PHP as a scripting language on MS Windows probably contributed to it. So I want to share the solution, if anyone would like to do the same thing.
- Viliam
- Translator
- Posts: 1341
- Joined: January 30th, 2004, 11:07 am
- Location: Bratislava, Slovakia
- Contact:
Re: Reading strings from Wesnoth MO files
1) Too easy?ettin wrote:Hmm, why not simply convert .mo files back to .po files?

2) You need some script (and maybe library) to read strings from PO files too. The resulting program will not be much easier.
But, I found that my solution does not work correctly. It returns strings in different encodings, e.g. it returns Hungarian accented letters in some 8-bit encoding, but Russian letters in UTF-8.