The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

Интернационализация

Internationalization — макросы поддерживающие gettext.

Краткое описание


#include <glib.h>
#include <glib/gi18n.h>


#define     _                               (String)
#define     Q_                              (String)
#define     N_                              (String)
const gchar* g_strip_context                (const gchar *msgid,
                                             const gchar *msgval);

const gchar* const * g_get_language_names   (void);

Описание

GLib не требует от пользователей использовать специальный метод интернационализации. А так как GLib сама локализована с использованием механизма gettext(), является естественным предложение фактического стандарта gettext() поддерживающего макросы в простой для использования форме.

Для использования этих макросов в приложениях, вы должны включить glib/gi18n.h. Для использования в библиотеке, вы должны включить glib/gi18n-lib.h после определения макроса GETTEXT_PACKAGE соответственно для вашей библиотеки:

#define GETTEXT_PACKAGE "gtk20"
#include <glib/gi18n-lib.h>

Детали

_()

#define     _(String)

Маркирует строку для перевода, заменяется переведённой строкой во время выполнения.

String : строка для перевода

Начиная с версии 2.4


Q_()

#define     Q_(String)

Аналогично _(), но применяет g_strip_context() для перевода. Это имеет преимущество, потомучто строка может быть дополнена префиксом для гарантии уникальности и обеспечения содержимого для перевода.

Один случай использования приведён в руководстве gettext - это перевод GUI, где можно снять неоднозначность двух меню "Open" как "File|Open" и "Printer|Open". Другой способ использования - это строка "Russian" которая может иметь разный перевод в зависимости от того является ли она названием набора символов или языка. Это может быть решено при помощи "charset|Russian" и "language|Russian".

String : строка для перевода, с префиксом отделённым знаком '|', который не должен транслироваться

Начиная с версии 2.4


N_()

#define     N_(String)

Маркирует строку для перевода, заменяется не переведённой строкой во время выполнения. Это полезно в ситуациях где переведённые строки не могут быть использованы напрямую, например в инициализаторах строковых массивов.

     {
       static const char *messages[] = {
         N_("некоторое очень значимое сообщение"),
         N_("и ещё одно")
       };
       const char *string;
       ...
       string
         = index > 1 ? _("сообщение по умолчанию") : gettext (messages[index]);
     
       fputs (string);
       ...
     }
String : строка для перевода

Начиная с версии 2.4


g_strip_context ()

const gchar* g_strip_context                (const gchar *msgid,
                                             const gchar *msgval);

Вспомогательная функция для поддержки gettext() (смотрите Q_()).

msgid : строка
msgval : другая строка
Возвращает : msgval, если msgval не идентичен msgid и содержит символ '|', в этом случае возвращается указатель на подстроку msgid после первого символа '|'.

Начиная с версии 2.4


g_get_language_names ()

const gchar* const * g_get_language_names   (void);

Вычисляет список применимых имён локалей, которые могут быть использованы например для конструирования locale-зависимых имён файлов или поиска путей. Возвращаемый список сортируется от самого желательного до менее желательного и всегда содержит локаль по умолчанию "C".

Например, если LANGUAGE=de:en_US, то возвращаемый список будет "de", "en_US", "en", "C".

Эта функция консультируется с переменными окружения LANGUAGE, LC_ALL, LC_MESSAGES и LANG для поиска списка локалей определённых пользователем.

Возвращает : NULL-завершённый массив строк которыми владеет GLib и они не должны освобождаться или изменяться.

Начиная с версии 2.6

Смотрите также

Руководство gettext.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру