Table of Contents

Πολύγλωσσα προγράμματα

Αλλαγή locale

Προσθέτουμε τα κατάλληλα locales με την εντολή

dpkg-reconfigure locales 

Βλέπουμε την τρέχουσα γλώσσα με

locale

Αλλάγή γλώσσας του περιβάλλοντος π.χ. σε γαλλικά

export LANG=fr_FR

bash

Αρχική μετάφραση

Έστω ότι δημιουργούμε το παρακάτω απλό πρόγραμμα σε bash

#!/bin/bash
# localized.sh
. /usr/bin/gettext.sh
export TEXTDOMAINDIR=/usr/share/locale
export TEXTDOMAIN=localized.sh
 
  read -p "`gettext \"Enter the value: \"`" $value
  echo "`eval_gettext \"You have entered : \\\$value\"

Γαλλικά

Στην συνέχεια εκτελούμε

xgettext -n localized.sh
msginit --locale=fr --input=messages.po 

Τροποποιούμε το αρχείο fr.po που παράχθηκε αλλάζοντας τις παρακάτω γραμμές

#: localized.sh:24
msgid "Enter the value: "
msgstr "Entrez la valeur"
#: localized.sh:26
#, sh-format
msgid "You have entered : $value"
msgstr "Vous avez entrez : $value"

Εκτελούμε τέλος την παρακάτω εντολή για να δημιουργήσουμε το αρχειο mo

msgfmt -o localized.sh.mo fr.po

Ως root αντιγράφουμε το αρχείο αυτό στον φάκελο /usr/share/locale/fr_FR/LC_MESSAGES/

cp localized.sh.mo /usr/share/locale/fr_FR/LC_MESSAGES/

Αλλάγή γλώσσας του περιβάλλοντος σε γαλλικά

export LANG=fr_FR

και εκτελούμε

./localized.sh

Ελληνικά

Προσοχή να αλλάξουμε την γραμμή

"Content-Type: text/plain; charset=ASCII\n"

π.χ. σε UTF-8 και να είμαστε σίγουροι ότι αποθηκεύουμε και σε utf-8

"Content-Type: text/plain; charset=UTF-8\n"

Αποθηκεύουμε σε

cp localized.sh.mo /usr/share/locale/el/LC_MESSAGES/

Τροποποίηση

Μετονομάζουμε το παλιό αρχείο po για να μην χαθεί

mv fr.po fr.po.old

Δημιουργούμε ξανά το αρχείο messages.po και fr.po με τις εντολές

xgettext -n localized.sh
msginit --locale=fr --input=messages.po 

Συγχωνεύουμε τα αρχεία

msgmerge fr.po.old fr.po --output-file=fr.po.new

Τροποποιούμε το νέο αρχείο fr.po.new

vi fr.po.new

και τέλος δημιουργούμε το mo αρχείο και το αποθηκεύουμε εκεί που πρέπει

msgfmt -o localized.sh.mo fr.po.new

Περιπτώσεις strings

  # simple
  echo "Hello World"
  echo "`gettext \"Hello World\"`"
 
  # the same
  read -p "Enter the value: " value
  read -p "`gettext \"Enter the value: \"`" value
 
  # now a variable 
  echo "You have entered : $value"
  echo "`eval_gettext \"You have entered : \\\$value\"`"
 
  # Escape characters: 
  # e.g. tab
  echo -e "Hello\tworld"
  echo -e "`gettext \"Hello\\tworld\"`"
 
  # Escape characters: 
  # e.g. -h (to avoid gettext seeing it as an option)
  echo "-h display help and exit"
  echo -e "`gettext \"\\0-h display help and exit\"`"

ΕΦαρμογές

Πηγές