Slide 1

Slide 1 text

foss.my 2009 Welcome Software Internationalization (i18n) with GNU gettext Muhammad Najmi Ahmad Zabidi Department of Computer Science KICT, International Islamic University Malaysia, MALAYSIA 25th October 2009 [email protected] Created with L A TEX Muhammad Najmi () foss.my 2009 October 26, 2009 1 / 48

Slide 2

Slide 2 text

foss.my 2009 About Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 2 / 48

Slide 3

Slide 3 text

foss.my 2009 About About the speaker KDE Subversion committer and original translator to ms MY Muhammad Najmi () foss.my 2009 October 26, 2009 3 / 48

Slide 4

Slide 4 text

foss.my 2009 About About the speaker KDE Subversion committer and original translator to ms MY Translation CVS committer for Tuxpaint project Muhammad Najmi () foss.my 2009 October 26, 2009 3 / 48

Slide 5

Slide 5 text

foss.my 2009 About About the speaker KDE Subversion committer and original translator to ms MY Translation CVS committer for Tuxpaint project Occasionally sending translation for GNU ms MY, (Munsyi Project), lead by Sharuzzaman Muhammad Najmi () foss.my 2009 October 26, 2009 3 / 48

Slide 6

Slide 6 text

foss.my 2009 About About the speaker KDE Subversion committer and original translator to ms MY Translation CVS committer for Tuxpaint project Occasionally sending translation for GNU ms MY, (Munsyi Project), lead by Sharuzzaman Muhammad Najmi () foss.my 2009 October 26, 2009 3 / 48

Slide 7

Slide 7 text

foss.my 2009 Internationalization Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 4 / 48

Slide 8

Slide 8 text

foss.my 2009 Internationalization Internationalization What actually internationalization is: Software going global Muhammad Najmi () foss.my 2009 October 26, 2009 5 / 48

Slide 9

Slide 9 text

foss.my 2009 Internationalization Internationalization What actually internationalization is: Software going global Software package getting “world” acceptance, thus people willing to localize it Muhammad Najmi () foss.my 2009 October 26, 2009 5 / 48

Slide 10

Slide 10 text

foss.my 2009 Internationalization Internationalization What actually internationalization is: Software going global Software package getting “world” acceptance, thus people willing to localize it Needs i18n support first! Muhammad Najmi () foss.my 2009 October 26, 2009 5 / 48

Slide 11

Slide 11 text

foss.my 2009 Internationalization Localization vs Internationalization The differences. . . Localization Done by translator It can be by the user/Developer Submit to package maintainer Get credit Muhammad Najmi () foss.my 2009 October 26, 2009 6 / 48

Slide 12

Slide 12 text

foss.my 2009 Internationalization Localization vs Internationalization The differences. . . Localization Done by translator It can be by the user/Developer Submit to package maintainer Get credit Internationalization Developer Prepare package Merge package Update package Announce new package Give proper credit Muhammad Najmi () foss.my 2009 October 26, 2009 6 / 48

Slide 13

Slide 13 text

foss.my 2009 gettext Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 7 / 48

Slide 14

Slide 14 text

foss.my 2009 gettext gettext gettext’s features Part of GNU packages Enables internationalization of software Enables the creation of Portable Object (PO) file Portable Object? Muhammad Najmi () foss.my 2009 October 26, 2009 8 / 48

Slide 15

Slide 15 text

foss.my 2009 gettext Features Gettext features Why gettext? Supports major characters encoding . . . UTF-8 for an example KDE,Gnome, Squirrelmail use it Relatively to update and maintain Muhammad Najmi () foss.my 2009 October 26, 2009 9 / 48

Slide 16

Slide 16 text

foss.my 2009 Task of developer/translator Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 10 / 48

Slide 17

Slide 17 text

foss.my 2009 Task of developer/translator What developers and translators should do? Muhammad Najmi () foss.my 2009 October 26, 2009 11 / 48

Slide 18

Slide 18 text

foss.my 2009 Flow of the translation process Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 12 / 48

Slide 19

Slide 19 text

foss.my 2009 Flow of the translation process Flow of Translation Muhammad Najmi () foss.my 2009 October 26, 2009 13 / 48

Slide 20

Slide 20 text

foss.my 2009 Flow of the translation process PO file Portable Object (PO) files PO file’s features It’s a raw, untranslated file Created automatically using gettext package Ready to be translated Muhammad Najmi () foss.my 2009 October 26, 2009 14 / 48

Slide 21

Slide 21 text

foss.my 2009 Flow of the translation process MO file Machine Object (MO) files MO file’s features Compiled file, derived from PO It’s a binary, thus machine readable Muhammad Najmi () foss.my 2009 October 26, 2009 15 / 48

Slide 22

Slide 22 text

foss.my 2009 Flow of the translation process Location of MO file Default & customized location By default Linux refers to /usr/share/locale Customized directory najmi@notre-dame:/var/www$ tree ms ms ‘-- LC_MESSAGES |-- greetings.mo |-- index.mo ‘-- messages.mo Muhammad Najmi () foss.my 2009 October 26, 2009 16 / 48

Slide 23

Slide 23 text

foss.my 2009 Flow of the translation process Creating MO file Generating Machine Object file How? Use msgfmt - message format This will generate default name, message.mo, unless you specify it You can trash it out, given you just want to check the localized stats to /dev/null It can be reverted back, use msgunfmt Muhammad Najmi () foss.my 2009 October 26, 2009 17 / 48

Slide 24

Slide 24 text

foss.my 2009 Flow of the translation process Locale Intro to locale Locale Locale is the local setting of a particular country, race, venue etc For Bahasa Melayu, the assigned locale is ms MY, where ms is for Malay, and MY is for Malaysia As for now, since Indonesia is using “id” , so sometimes ms is just fine Date sequence, for .eg dd/mm/yyyy is also fall under locale . We also do not have Daylight Saving Time(DST), that is also locale Locale can be simply viewed by typing $locale Muhammad Najmi () foss.my 2009 October 26, 2009 18 / 48

Slide 25

Slide 25 text

foss.my 2009 Flow of the translation process Charset Some stuffs on chartset Charset? Different charset support different language, characters Includes Roman, Arabic, CJK and etc UTF-8, UTF-16 etc I don’t really know on this stuffs, only know Roman based and Arabic based chars Muhammad Najmi () foss.my 2009 October 26, 2009 19 / 48

Slide 26

Slide 26 text

foss.my 2009 Codes Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 20 / 48

Slide 27

Slide 27 text

foss.my 2009 Codes Sample of C++ file How’s the C++ file looks like? #include #include < l i b i n t l . h> #include using namespace std ; int main ( ) { setlocale ( LC ALL , ” ” ) ; bindtextdomain ( ” hello ” , ” / usr / share / locale ” ) ; textdomain ( ” hello ” ) ; cout<< g e tt e x t ( ” Hello , world ! ” ) <

Slide 28

Slide 28 text

foss.my 2009 Codes Sample Executable output $ ./hello Hello, world! How are you? Muhammad Najmi () foss.my 2009 October 26, 2009 22 / 48

Slide 29

Slide 29 text

foss.my 2009 Codes Sample Executable output $ ./hello Hello, world! How are you? $ export LC_ALL=ms_MY.UTF-8 Muhammad Najmi () foss.my 2009 October 26, 2009 22 / 48

Slide 30

Slide 30 text

foss.my 2009 Codes Sample Executable output $ ./hello Hello, world! How are you? $ export LC_ALL=ms_MY.UTF-8 $ ./hello Assalamualaikum, dunia! Awak apa khabar? Muhammad Najmi () foss.my 2009 October 26, 2009 22 / 48

Slide 31

Slide 31 text

foss.my 2009 Codes xgettext About xgettext Part of gettext Extracting translatable strings from source code xgettext -d lang lang.php This will create lang.po, with respect to strings in lang.php Muhammad Najmi () foss.my 2009 October 26, 2009 23 / 48

Slide 32

Slide 32 text

foss.my 2009 Codes Sample of the POT file How’s the raw POT file looks like? # SOME DESCRIPTIVE TITLE . # Copyright (C) YEAR THE PACKAGE’ S COPYRIGHT HOLDER # This f i l e i s d i s t r i b u t e d under the same license as the PACKAGE package . # FIRST AUTHOR , YEAR. # # , fuzzy msgid ” ” msgstr ” ” ” Project−Id−Version : PACKAGE VERSION\n ” ” Report−Msgid−Bugs−To : \n ” ”POT −Creation−Date : 2009−10−23 22:08+0800\n ” ”PO −Revision−Date : YEAR − MO − DA HO: MI+ZONE\n ” ” Last−Translator : FULL NAME \n ” ” Language− Team: LANGUAGE \n ” ”MIME −Version : 1.0\n ” ” Content−Type : t e x t / plain ; charset=CHARSET\n ” ” Content−Transfer−Encoding : 8 b i t \n ” #: hello . cpp:11 msgid ” Hello , world ! ” msgstr ” ” #: hello . cpp:12 msgid ”How are you ?” msgstr ” ” Muhammad Najmi () foss.my 2009 October 26, 2009 24 / 48

Slide 33

Slide 33 text

foss.my 2009 Codes Sample of the translated PO file How’s the translated PO file looks like? # t r a n s l a t i o n of hello . po to Malay # Muhammad Najmi bin Ahmad Zabidi , 2009. msgid ” ” msgstr ” ” ” Project−Id−Version : hello\n ” ” Report−Msgid−Bugs−To : \n ” ”POT −Creation−Date : 2009−10−23 22:08+0800\n ” ”PO −Revision−Date : 2009−10−19 18:32+0800\n ” ” Last−Translator : Muhammad Najmi bin Ahmad Zabidi \n ” ” Language− Team: Malay \n ” ”MIME −Version : 1.0\n ” ” Content−Type : t e x t / plain ; charset=UTF−8\n ” ” Content−Transfer−Encoding : 8 b i t \n ” ”X −Generator : KBabel 1.11.4\n ” #: hello . cpp:11 msgid ” Hello , world ! ” msgstr ” Assalamualaikum , dunia ! ” #: hello . cpp:12 msgid ”How are you ?” msgstr ”Awak apa khabar ?” Muhammad Najmi () foss.my 2009 October 26, 2009 25 / 48

Slide 34

Slide 34 text

foss.my 2009 Codes gettext in Python python! import gettext g ettext . bindtextdomain ( ’ piton ’ , ’ / usr / share / locale ’ ) g ettext . textdomain ( ’ piton ’ ) = gettext . gettext # . . . print ( ’ python i s simple ’ ) print ( ’ as simple as t h i s ’ ) Muhammad Najmi () foss.my 2009 October 26, 2009 26 / 48

Slide 35

Slide 35 text

foss.my 2009 Codes gettext in Python Traslatable strings from Python file # t r a n s l a t i o n of piton . po to Malay # Copyright (C) YEAR THE PACKAGE ’S COPYRIGHT HOLDER # This f i l e i s d i s t r i b u t e d under the same license as the PACKAGE package . # # Muhammad Najmi bin Ahmad Zabidi , 2009. msgid ” ” msgstr ” ” ” Project−Id−Version : piton\n ” ” Report−Msgid−Bugs−To : \n ” ”POT −Creation−Date : 2009−10−24 20:56+0800\n ” ”PO −Revision−Date : 2009−10−24 20:57+0800\n ” ” Last−Translator : Muhammad Najmi bin Ahmad Zabidi \n ” ” Language− Team: Malay \n ” ”MIME −Version : 1.0\n ” ” Content−Type : t e x t / plain ; charset=UTF−8\n ” ” Content−Transfer−Encoding : 8 b i t \n ” ”X −Generator : KBabel 1.11.4\n ” # : piton . py :6 msgid ” python i s simple ” msgstr ” python mudah” # : piton . py :7 msgid ” as simple as t h i s ” msgstr ”semudah i n i ” Muhammad Najmi () foss.my 2009 October 26, 2009 27 / 48

Slide 36

Slide 36 text

foss.my 2009 Codes gettext in Python Python executable Muhammad Najmi () foss.my 2009 October 26, 2009 28 / 48

Slide 37

Slide 37 text

foss.my 2009 Codes gettext in Python Python executable $ python piton.py python mudah semudah ini Muhammad Najmi () foss.my 2009 October 26, 2009 28 / 48

Slide 38

Slide 38 text

foss.my 2009 Codes gettext in Python Python executable $ python piton.py python mudah semudah ini $ export LC_ALL=C Muhammad Najmi () foss.my 2009 October 26, 2009 28 / 48

Slide 39

Slide 39 text

foss.my 2009 Codes gettext in Python Python executable $ python piton.py python mudah semudah ini $ export LC_ALL=C $ python piton.py python is simple as simple as this Muhammad Najmi () foss.my 2009 October 26, 2009 28 / 48

Slide 40

Slide 40 text

foss.my 2009 Codes PHP source code Let’s see for PHP ” ; echo ( ”Bye
” ) ; echo gettext ( ” The s e t t i n g s of ” ) . $language . ( ” i s working f i n e ” ) ; ?> Muhammad Najmi () foss.my 2009 October 26, 2009 29 / 48

Slide 41

Slide 41 text

foss.my 2009 Codes PO file generated from the PHP file. . . Let’s see for PHP The following is the example of snipped file - without header #: lang . php :8 msgid ”Welcome\n ” msgstr ” ” #: lang . php:10 msgid ”Bye
” msgstr ” ” #: lang . php:11 msgid ” The se tt i n g s of ” msgstr ” ” #: lang . php:11 msgid ” i s working f i n e ” msgstr ” ” Muhammad Najmi () foss.my 2009 October 26, 2009 30 / 48

Slide 42

Slide 42 text

foss.my 2009 Codes Ideal PHP code for i18n Avoid confusing translator Try to put strings in a minimal line Avoid separation of sentence ”; echo ( ” Bye
”); / / echo ( ” The s e t t i n g s of ” ) . $language . ( ” i s working f i n e ” ) ; echo s p r i n t f ( ( ” The s e t t i n g s of %s i s working f i n e ” ) , $language ) ; ?> Muhammad Najmi () foss.my 2009 October 26, 2009 31 / 48

Slide 43

Slide 43 text

foss.my 2009 Codes Ideal PHP code for i18n Use “sprintf” Use the following . . . echo sprintf ( ( ‘ ‘ The s e t t i n g s of %s i s working f i n e ’ ’ ) , $language ) ; instead of . . . echo ( ‘ ‘ The se t t i n g s of ’ ’ ) . $language . ( ‘ ‘ i s working f i n e ” ) ; Muhammad Najmi () foss.my 2009 October 26, 2009 32 / 48

Slide 44

Slide 44 text

foss.my 2009 Codes Sample confusing strings Separated into two echo ( ‘ ‘ The se t t i n g s of ’ ’ ) . $language . ( ‘ ‘ i s working f i n e ” ) ; will generate. . . #: lang . php:11 msgid ‘ ‘ The se t t i n g s of ’ ’ msgstr ‘ ‘ #: lang . php:11 msgid ’ ’ i s working fine ‘ ‘ msgstr ’ ’ ‘ ‘ ’ ’ which separates sentence into two different strings. . . Muhammad Najmi () foss.my 2009 October 26, 2009 33 / 48

Slide 45

Slide 45 text

foss.my 2009 Codes The ideal coding echo sprintf ( ( ‘ ‘ The s e t t i n g s of %s i s working f i n e ’ ’ ) , $language ) ; since this will generate. . . msgid ‘ ‘ The se t t i n g s of %s i s working fine ’ ’ msgstr ‘ ‘ Muhammad Najmi () foss.my 2009 October 26, 2009 34 / 48

Slide 46

Slide 46 text

foss.my 2009 Codes Plural issues What if we have plural noun. . . Plural is when you have different noun for singular and plural Singular cat Singular-Malay Plural cats Plural-Malay Muhammad Najmi () foss.my 2009 October 26, 2009 35 / 48

Slide 47

Slide 47 text

foss.my 2009 Codes Plural issues What if we have plural noun. . . Plural is when you have different noun for singular and plural Singular cat boy Singular-Malay Plural cats boys Plural-Malay Muhammad Najmi () foss.my 2009 October 26, 2009 35 / 48

Slide 48

Slide 48 text

foss.my 2009 Codes Plural issues What if we have plural noun. . . Plural is when you have different noun for singular and plural Singular cat boy man Singular-Malay Plural cats boys men Plural-Malay Muhammad Najmi () foss.my 2009 October 26, 2009 35 / 48

Slide 49

Slide 49 text

foss.my 2009 Codes Plural issues What if we have plural noun. . . Plural is when you have different noun for singular and plural Singular cat boy man Singular-Malay basikal Plural cats boys men Plural-Malay basikal-basikal Muhammad Najmi () foss.my 2009 October 26, 2009 35 / 48

Slide 50

Slide 50 text

foss.my 2009 Codes Plural issues What if we have plural noun. . . Plural is when you have different noun for singular and plural Singular cat boy man Singular-Malay basikal pensil Plural cats boys men Plural-Malay basikal-basikal pensil-pensil Muhammad Najmi () foss.my 2009 October 26, 2009 35 / 48

Slide 51

Slide 51 text

foss.my 2009 Codes Plural issues What if we have plural noun. . . Plural is when you have different noun for singular and plural Singular cat boy man Singular-Malay basikal pensil komputer Plural cats boys men Plural-Malay basikal-basikal pensil-pensil komputer-komputer Muhammad Najmi () foss.my 2009 October 26, 2009 35 / 48

Slide 52

Slide 52 text

foss.my 2009 Codes Plural issues However, as far as I know, plural issue in Malay languge is non trivial issue, so for the sake of easiness (perhaps, lazy?) plural = 0 Muhammad Najmi () foss.my 2009 October 26, 2009 36 / 48

Slide 53

Slide 53 text

foss.my 2009 Codes Using ngettext in PHP ngettext ” ; $n=1; echo sprintf ( ngettext ( ”%d cat f a l l s ” , ”%d cats f a l l ” , $n ) , $n ) ; echo ”
” ; $n=1; echo sprintf ( ngettext ( ”%d tingkap ditutup ” , ”%d tetingkap ditutup ” , $n ) , $n ) ; echo ”
” ; $n=4; / / i f i t goes without parameter %d , no s p r i n t f i s f i n e echo ngettext ( ” F i l e i s good ” , ” Files are good ” ,$n ) ; ?> 2 boys are eating 1 cat falls 1 tingkap ditutup Files are good Muhammad Najmi () foss.my 2009 October 26, 2009 37 / 48

Slide 54

Slide 54 text

foss.my 2009 Codes Using ngettext in PHP Sample PO #: n p lural . php :3 # , php−format msgid ”%d boy i s eating ” msgid plural ”%d boys are eating ” msgstr [ 0 ] ” ” msgstr [ 1 ] ” ” #: n p lural . php :6 # , php−format msgid ”%d cat f a l l s ” msgid plural ”%d cats f a l l ” msgstr [ 0 ] ” ” msgstr [ 1 ] ” ” #: n p lural . php :9 # , php−format msgid ”%d tingkap d i t ut u p ” msgid plural ”%d tetingkap d i t u tup ” msgstr [ 0 ] ” ” msgstr [ 1 ] ” ” #: n p lural . php:13 msgid ” F i l e i s good ” msgid plural ” Files are good ” msgstr [ 0 ] ” ” msgstr [ 1 ] ” ” Muhammad Najmi () foss.my 2009 October 26, 2009 38 / 48

Slide 55

Slide 55 text

foss.my 2009 Tools Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 39 / 48

Slide 56

Slide 56 text

foss.my 2009 Tools Internationalization tools Internationalization tools gted (very recent) html2po / po2html Muhammad Najmi () foss.my 2009 October 26, 2009 40 / 48

Slide 57

Slide 57 text

foss.my 2009 Tools Localization tools Localization tools POedit Kbabel (now lokalize) VI? Emacs ... the list may infinite up to n # of tools Incoming . . . wish for PO Live Edit, prototype is webl10n by gandalf Pootle Muhammad Najmi () foss.my 2009 October 26, 2009 41 / 48

Slide 58

Slide 58 text

foss.my 2009 Route of PO to MO Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 42 / 48

Slide 59

Slide 59 text

foss.my 2009 Route of PO to MO PO to MO journey Translate PO file − > MO file − > Working Interface Muhammad Najmi () foss.my 2009 October 26, 2009 43 / 48

Slide 60

Slide 60 text

foss.my 2009 Route of PO to MO PO to MO journey Translate PO file − > MO file − > Working Interface Compile Muhammad Najmi () foss.my 2009 October 26, 2009 43 / 48

Slide 61

Slide 61 text

foss.my 2009 Route of PO to MO PO to MO journey Translate PO file − > MO file − > Working Interface Compile Invoke Muhammad Najmi () foss.my 2009 October 26, 2009 43 / 48

Slide 62

Slide 62 text

foss.my 2009 Issues with package generated by gettext Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 44 / 48

Slide 63

Slide 63 text

foss.my 2009 Issues with package generated by gettext Issues What are the issues? Software may become bloated Muhammad Najmi () foss.my 2009 October 26, 2009 45 / 48

Slide 64

Slide 64 text

foss.my 2009 Issues with package generated by gettext Issues What are the issues? Software may become bloated So, the user may not install everything in the first place! Muhammad Najmi () foss.my 2009 October 26, 2009 45 / 48

Slide 65

Slide 65 text

foss.my 2009 Issues with package generated by gettext Issues What are the issues? Software may become bloated So, the user may not install everything in the first place! Mozilla has its own way. . . I saw moz2po and po2moz . . . a good news, perhaps? Bug filed #501988 seems a good news Muhammad Najmi () foss.my 2009 October 26, 2009 45 / 48

Slide 66

Slide 66 text

foss.my 2009 Issues with package generated by gettext Issues What are the issues? Software may become bloated So, the user may not install everything in the first place! Mozilla has its own way. . . I saw moz2po and po2moz . . . a good news, perhaps? Bug filed #501988 seems a good news I also have problem with UTF-8 on console.. garbled characters Muhammad Najmi () foss.my 2009 October 26, 2009 45 / 48

Slide 67

Slide 67 text

foss.my 2009 Issues with package generated by gettext Issues What are the issues? Software may become bloated So, the user may not install everything in the first place! Mozilla has its own way. . . I saw moz2po and po2moz . . . a good news, perhaps? Bug filed #501988 seems a good news I also have problem with UTF-8 on console.. garbled characters Then, I export LC ALL=C, of course I’m not happy with this But most of the time, it works. . . Muhammad Najmi () foss.my 2009 October 26, 2009 45 / 48

Slide 68

Slide 68 text

foss.my 2009 Conclusion Agenda 1 About 2 Internationalization 3 gettext 4 Task of developer/translator 5 Flow of the translation process 6 Codes 7 Tools 8 Route of PO to MO 9 Issues with package generated by gettext 10 Conclusion Muhammad Najmi () foss.my 2009 October 26, 2009 46 / 48

Slide 69

Slide 69 text

foss.my 2009 Conclusion gettext rules Muhammad Najmi () foss.my 2009 October 26, 2009 47 / 48

Slide 70

Slide 70 text

foss.my 2009 Conclusion fin() Questions? najmi{at} kict.iiu.edu.my Muhammad Najmi () foss.my 2009 October 26, 2009 48 / 48