Translating the strings in a glade file is really
easy: If gettext is available and loaded and the textdomain
is set, it automatically looks for translations - you
just have to provide the translated .mo
file in the right directory.
Here is the example application, but with glade:
Example 3.6. Basic example with glade
<?php
if( !extension_loaded('gtk')) {
dl( 'php_gtk.' . PHP_SHLIB_SUFFIX);
}
putenv( "LANG=" . 'de_DE'); //required on windows, because setlocale doesn't work
setlocale( LC_ALL, 'de_DE');
if( !function_exists( 'gettext')) {
//gettext not automatically loaded
if( !@dl( 'php_gettext.' . PHP_SHLIB_SUFFIX)) {
die( 'gettext extension is not available!');
}
}
bindtextdomain( 'testapp', dirname( __FILE__) . '/locale');
textdomain( 'testapp');
$glade =& new GladeXML( dirname( __FILE__) . "/example-tutorial-translation.glade");
$window = $glade->get_widget( 'window');
$button = $glade->get_widget( 'button');
$window->connect_object('destroy', array('gtk', 'main_quit'));
$button->connect_object( 'clicked', array( 'gtk', 'main_quit'));
gtk::main();
?>
|
and here the glade file:
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>example-tutorial-translation</name>
<program_name>example-tutorial-translation</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>False</gnome_support>
<gettext_support>False</gettext_support>
<output_translatable_strings>True</output_translatable_strings>
<translatable_strings_file>example-tutorial-translation.strings</translatable_strings_file>
</project>
<widget>
<class>GtkWindow</class>
<name>window</name>
<title>window title</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<default_width>300</default_width>
<default_height>200</default_height>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<widget>
<class>GtkVBox</class>
<name>vbox</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkLabel</class>
<name>label</name>
<label>Translation test</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button</name>
<can_focus>True</can_focus>
<label>Close window</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
</GTK-Interface>
|
Just start the script, and you will see
a translated application as the string contents
are already in testapp.mo.
It can be quite boring to collect all the strings
which shall be translated in a .glade
file. Glade has the option "save translatable strings"
which creates a file containing all the strings from
a glade file - it's easy to convert them to a
.po file.