Разлика помеѓу преработките на „Македонска локализација“

Од Сподели wiki
Прејди на прегледникот Прејди на пребарувањето
 
с (9 ревизии: initial)
 
(Не се прикажани 8 меѓувремени преработки од 5 корисници)
Ред 1: Ред 1:
!!!Македонска локализација
Locale е дел од стандардните C библиотеки на [[GNU/Linux]] (и кај другите Unix-и), кој ја олеснува интернационализацијата (i18n) на софтверот. На пример locale-то ги дефинира следните стандарди, кои автоматски се користат од сите правилно направени [[GNU/Linux]] програми:
 
 
!!Што е тоа locale?


*форматот на датумите и времето
*форматот на броевите
*форматот на паричните единици
*правила за подредување (сортирање)
*множество на буквите и знаците


Locale е дел од стандардните C библиотеки на Linux (и кај другите Unix-и), кој ја олеснува интернационализацијата(i18n) на софтверот. На пример locale-то ги дефинира следните стандарди, кои автоматски се користат од сите правилно направени Linux програми:
== Македонското locale и негово активирање ==


*форматот на датите и времето
Македонското locale за GNU/Linux е [http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/localedata/locales/mk_MK?cvsroot=glibc|стандарден дел на glibc] од верзијата 2.1.3, 2.2 и понови, така што е дел од сите современи GNU/Linux дистрибуции и стандардно доаѓа и во најосновните инсталации. Евентуално на некои дистрибуции треба да се „искомпајлира“, што се прави или преку едитирање на <code>/etc/locale.gen</code> и потоа извршување на командата <code>locale-gen</code> или пак со командите:
*форматот на броевите
*форматот на паричните единици
*правила за сортирање
*множество на буквите и карактерите


!!Македонското locale и негово активирање.
# localedef -i mk_MK -f UTF-8 mk_MK
# localedef -i mk_MK -f UTF-8 mk_MK.UTF-8


Нормално не треба да потсетувам дека овие наредби мора да се извршат како root.


Македонското locale за Linux е стандарден дел на glibc од верзијата 2.1.3, 2.2 и понови, а може да се најде во дистрибуциите Slackware (од 8.0 нагоре) !RedHat (од 7.0), Mandrake (од 8.0) и други. Освен што во Glibc-2.2 е вклучено најновото македонско locale, glibc-2.2 содржи и многу богата подршка за локализирање и интернационализирање на програмите и затоа моја препорака е да надгради glibc-то. Одкога го имаме localeto на компјутерот (стандардната локација: ''/usr/share/i18n/locales/mk_MK''), евентуално треба да се скомпајлира, а тоа се прави со наредбите:
Следниот чекор е активирање на locale-то. Тоа се прави на едноставен начин со поставување на променливата LANG. На пример тоа може да се направи во <code>~/.bashrc</code> вака:
root# localedef -i mk_MK -f ISO-8859-5 mk_MK
root# localedef -i mk_MK -f UTF-8 mk_MK.UTF-8
(Нормално не треба да потсетувам дека овие наредби мора да се извршат како root.)


  export LANG=mk_MK.UTF-8


Следниот чекор е активирање на locale-то. Тоа се прави на едноставен начин со поставување на shell-променливата LANG. На пример тоа може да се направи во __.bashrc__ вака:
или во <code>~/.cshrc</code> вака:
export LANG=mk_MK.UTF-8
или во __.cshrc__ вака:
setenv LANG mk_MK.UTF-8


!!Тоа е доволното што треба да го знае обичен Linux корисник. ;)
  setenv LANG mk_MK.UTF-8


----
!!Што потоа?


За било кој обичен GNU/Linux корисник, до тука е доволно да се знае.


Со самото подесување на гореспоменатота shell променлива, сите правилно напишани Linux програми автоматски стануваат свесни за македонските стандарди и букви. Како се случува тоа? И што значи тоа правилно напишани Linux програми? За најлесно да се разјасни начинот на дејствување на локализацијата еве неколку примери на "правилно напишани Linux програми".
=== Референци ===
* Debian/Ubuntu?
* ArchLinux?
* Gentoo?
* RHEL?


== Што потоа? ==


Првиот пример е мало програмче кое ги претвара малите букви во големи користејќи ја функцијата toupper(3).
Со самото поставување на гореспоменатота shell-променлива, сите правилно напишани [[GNU/Linux]] програми автоматски стануваат „свесни“ за македонските стандарди и букви. Како се случува тоа? И што значи тоа правилно напишани [[GNU/Linux]] програми? За најлесно да се разјасни начинот на дејствување на локализацијата еве неколку примери на „правилно напишани [[GNU/Linux]] програми“.


Првиот пример е мало програмче во [[C]] кое ги претвора малите букви во големи користејќи ја функцијата toupper(3).
<pre>
  /* gcc -o capital capital.c */
  /* gcc -o capital capital.c */
  #include <locale.h>
  #include <locale.h>
  #include <ctype.h>
  #include <ctype.h>
 
  int main() {
  int main() {
   char buff[[1024];
   char buff[[1024];
Ред 52: Ред 53:
   puts(""); exit(0);
   puts(""); exit(0);
  }
  }
</pre>


Може да се тестира на два начини:


Пробај го на два начина,
  # LC_CTYPE=mk_MK ./capital
  LC_CTYPE=mk_MK ./capital
и
и
  LC_CTYPE=C ./capital
  # LC_CTYPE=C ./capital
и дај му некои кирилични букви на stdin и ќе ја видиш разликата.
и дај му некои кирилични букви на stdin и ќе ја видиш разликата.


 
Втор пример, употреба на strcoll(3) за подредување на кириличните букви.
Втор пример, употреба на strcoll(3) за сортирање на кириличните букви.
<pre>
 
 
  /* gcc -o sortit sortit.c */
  /* gcc -o sortit sortit.c */
  #include <locale.h>
  #include <locale.h>
  #include <string.h>
  #include <string.h>
 
  int compare(char **p1, char **p2) {
  int compare(char **p1, char **p2) {
     return strcoll(*p1, *p2);
     return strcoll(*p1, *p2);
  }
  }
 
  int main() {
  int main() {
     char *array[] = {"шамар", "ѕивра", "чаша", "ѓон", "ќумур", "жаба"};
     char *array[] = {"шамар", "ѕивра", "чаша", "ѓон", "ќумур", "жаба"};
Ред 81: Ред 81:
     exit(0);
     exit(0);
  }
  }
</pre>


 
Конечно GNU-библиотеката нуди решение и за независно преведување на програмите на други јазици. Така на пример тимот на [http://mkde.sf.net мкде] го преведува [[KDE]] на македонски, без притоа да имаат потреба од изворниот код на KDE и без ре-компилирање. Еве како изгледа дел од една програма предвидена за преведување:
Конечно GNU библиотеката нуди решение и за независно преведување на програмите на други јазици. Така на пример мкде тимот го преведува KDE2 на македонски, без притоа да имаат потреба од source кодот на KDE и без ре-компајлирање. Еве како изгледа дел од еден програм предвиден за преведување:
<pre>
 
  #include <libintl.h>
  #include <libintl.h>
  int main {
  int main {
Ред 97: Ред 97:
     ...
     ...
  }
  }
</pre>


 
каде што PACKAGE="kbabel", а LOCALEDIR="/opt/kde/share/locale/LC_MESSAGES". Може да се види дека пораките предвидени за преведување се вметнати во функцијата gettext. За да се преведе оваа програма треба да се најде таканаречената PO-template датотека (.pot), која ги содржи сите пораки што треба да се преведат. При преведувањето .pot датотеката ја добива наставката .po . Еве еден дел од преведена PO-датотека, за програмата kbabel:
каде што PACKAGE="kbabel", а LOCALEDIR="/opt/kde/share/locale/LC_MESSAGES". Може да се види дека string-овите предвидени за преведување се вметнати во gettext функцијата. За да се преведе овој програм треба да се најде таканаречената PO template датотека (.pot), која ги содржи сите string-ови кои треба да се преведат. При преведувањето .pot датотеката ја добива наставката .po . Еве еден дел од преведена PO датотека, за програмот kbabel:


  #: catalog.cpp:1086 kbabel.cpp:499
  #: catalog.cpp:1086 kbabel.cpp:499
  msgid "loading file"
  msgid "loading file"
  msgstr "датотеката се вчитува"
  msgstr "датотеката се вчитува"
 
  #: catalog.cpp:1303
  #: catalog.cpp:1303
  msgid "saving file"
  msgid "saving file"
  msgstr "датотеката се снима"
  msgstr "датотеката се снима"
 
  #: searchresultbox.cpp:914 searchresultbox.cpp:998
  #: searchresultbox.cpp:914 searchresultbox.cpp:998
  #, c-format
  #, c-format
Ред 118: Ред 118:
  "%1"
  "%1"


По преведување на PO-датотеката, таа се компилира во hash-табела за побрз пристап. Тоа се прави со наредбата
msgfmt kbabel.po -o kbabel.mo
и потоа добиената датотека се копира или во ''/usr/share/locale/mk/LC_MESSAGES'' или ''/opt/kde/share/locale/mk/LC_MESSAGES''. За програмата да знае кој јазик да го користи се поставува shell-променливата LANGUAGE=mk:en. При тоа не е потребно никакво пре-компилирање на софтверот што сме го превеле, ниту пре-инсталирање, ниту ресетирање на компјутерот и слично.


По преведување на PO датотеката, таа се компајлира во hash табела за побрз пристап. Тоа се прави со наредбата
msgfmt kbabel.po -o kbabel.mo
и потоа добиената датотека се копира или во ''/usr/share/locale/mk/LC_MESSAGES'' или ''/opt/kde/share/locale/mk/LC_MESSAGES''. За да програмот знае кој јазик да го користи се поставува shell-променливата LANGUAGE=mk:en. При тоа не е потребно никакво пре-компајлирање на софтверот што сме го превеле, ниту пре-инсталирање, ниту ресетирање на компјутерот и слично.
За повеќе информации околу правењето на интернационални програми, види __info libc Locales__ и __info gettext__.
За повеќе информации околу правењето на интернационални програми, види __info libc Locales__ и __info gettext__.


 
[[Категорија:Локализација]]
 
[[Категорија:L10n]]
 
 
%%%
%%%
%%%

Последна преработка од 17:35, 29 јануари 2011

Locale е дел од стандардните C библиотеки на GNU/Linux (и кај другите Unix-и), кој ја олеснува интернационализацијата (i18n) на софтверот. На пример locale-то ги дефинира следните стандарди, кои автоматски се користат од сите правилно направени GNU/Linux програми:

  • форматот на датумите и времето
  • форматот на броевите
  • форматот на паричните единици
  • правила за подредување (сортирање)
  • множество на буквите и знаците

Македонското locale и негово активирање

Македонското locale за GNU/Linux е дел на glibc од верзијата 2.1.3, 2.2 и понови, така што е дел од сите современи GNU/Linux дистрибуции и стандардно доаѓа и во најосновните инсталации. Евентуално на некои дистрибуции треба да се „искомпајлира“, што се прави или преку едитирање на /etc/locale.gen и потоа извршување на командата locale-gen или пак со командите:

# localedef -i mk_MK -f UTF-8 mk_MK
# localedef -i mk_MK -f UTF-8 mk_MK.UTF-8

Нормално не треба да потсетувам дека овие наредби мора да се извршат како root.

Следниот чекор е активирање на locale-то. Тоа се прави на едноставен начин со поставување на променливата LANG. На пример тоа може да се направи во ~/.bashrc вака:

 export LANG=mk_MK.UTF-8

или во ~/.cshrc вака:

 setenv LANG mk_MK.UTF-8


За било кој обичен GNU/Linux корисник, до тука е доволно да се знае.

Референци

  • Debian/Ubuntu?
  • ArchLinux?
  • Gentoo?
  • RHEL?

Што потоа?

Со самото поставување на гореспоменатота shell-променлива, сите правилно напишани GNU/Linux програми автоматски стануваат „свесни“ за македонските стандарди и букви. Како се случува тоа? И што значи тоа правилно напишани GNU/Linux програми? За најлесно да се разјасни начинот на дејствување на локализацијата еве неколку примери на „правилно напишани GNU/Linux програми“.

Првиот пример е мало програмче во C кое ги претвора малите букви во големи користејќи ја функцијата toupper(3).

 /* gcc -o capital capital.c */
 #include <locale.h>
 #include <ctype.h>
 
 int main() {
   char buff[[1024];
   int len,i;
   setlocale(LC_ALL,"");
   while(len = read(0,buff,1024)) {
       for(i=0;i < len;i++) buff[[i] = toupper(buff[[i]);
   write(1,buff,len);
   }
   puts(""); exit(0);
 }

Може да се тестира на два начини:

# LC_CTYPE=mk_MK ./capital

и

# LC_CTYPE=C ./capital

и дај му некои кирилични букви на stdin и ќе ја видиш разликата.

Втор пример, употреба на strcoll(3) за подредување на кириличните букви.

 /* gcc -o sortit sortit.c */
 #include <locale.h>
 #include <string.h>
 
 int compare(char **p1, char **p2) {
     return strcoll(*p1, *p2);
 }
 
 int main() {
    char *array[] = {"шамар", "ѕивра", "чаша", "ѓон", "ќумур", "жаба"};
    int nstrings = 6;
    int i;
    setlocale(LC_ALL,"");
    qsort (array, nstrings, sizeof (char *), compare);
    for(i=0; i<nstrings;i++) puts(array[[i]);
    exit(0);
 }

Конечно GNU-библиотеката нуди решение и за независно преведување на програмите на други јазици. Така на пример тимот на мкде го преведува KDE на македонски, без притоа да имаат потреба од изворниот код на KDE и без ре-компилирање. Еве како изгледа дел од една програма предвидена за преведување:

 #include <libintl.h>
 int main {
    ...
    setlocale(LC_ALL,"");
    bindtextdomain(PACKAGE, LOCALEDIR);
    texdomain(PACKAGE);
    ...
    puts(gettext("loading file"));
    ...
    puts(gettext("saving file"));
    ...
 }

каде што PACKAGE="kbabel", а LOCALEDIR="/opt/kde/share/locale/LC_MESSAGES". Може да се види дека пораките предвидени за преведување се вметнати во функцијата gettext. За да се преведе оваа програма треба да се најде таканаречената PO-template датотека (.pot), која ги содржи сите пораки што треба да се преведат. При преведувањето .pot датотеката ја добива наставката .po . Еве еден дел од преведена PO-датотека, за програмата kbabel:

#: catalog.cpp:1086 kbabel.cpp:499
msgid "loading file"
msgstr "датотеката се вчитува"

#: catalog.cpp:1303
msgid "saving file"
msgstr "датотеката се снима"

#: searchresultbox.cpp:914 searchresultbox.cpp:998
#, c-format
msgid ""
"The file does not exist:\n"
"%1"
msgstr ""
"Датотеката не постои:\n"
"%1"

По преведување на PO-датотеката, таа се компилира во hash-табела за побрз пристап. Тоа се прави со наредбата

msgfmt kbabel.po -o kbabel.mo

и потоа добиената датотека се копира или во /usr/share/locale/mk/LC_MESSAGES или /opt/kde/share/locale/mk/LC_MESSAGES. За програмата да знае кој јазик да го користи се поставува shell-променливата LANGUAGE=mk:en. При тоа не е потребно никакво пре-компилирање на софтверот што сме го превеле, ниту пре-инсталирање, ниту ресетирање на компјутерот и слично.

За повеќе информации околу правењето на интернационални програми, види __info libc Locales__ и __info gettext__.