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

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.