ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] Заметки о локализации программ
@ 2004-11-09 23:21 Vitaly Lipatov
  2004-11-10  7:11 ` Denis Ovsienko
                   ` (2 more replies)
  0 siblings, 3 replies; 115+ messages in thread
From: Vitaly Lipatov @ 2004-11-09 23:21 UTC (permalink / raw)
  To: ALT Devel discussion list

В процессе доработки некоторых программ у меня появился
опыт, который я в итоге записал. Если у кого-то будут
дополнения или замечания, жду.

Замечания по локализации GTK2-программ
=======================================

Введение
========

Как показывает практика, в большинстве программ, 
написанных на gtk2, вывод в консоль осуществляется
с помощью функции g_printf, которая есть ни что иное, как обёртка 
для
printf. Поскольку внутри программ на gtk2 используется 
кодировка UTF8 (обратных примеров не знаю), на консоль
выводится нечитаемая UTF8, без всякого перекодирования.
Но gtk имеется функция g_print, которая осуществляет
перекодирование в кодировку консоли.

Подлежат проверке сообщения выводимые на консоль
- в ходе работы программы
- при запуске с ключом --help
- сообщения в системных журналах. Это так?: Сейчас
все сообщения Гнома пишутся в журнал в UTF-8, и прочесть их
затруднительно.


Перекодировка строк
===================

Чтобы преобразовать строку в текущую локаль,
используйте:
gchar* g_locale_from_utf8(строка,-1,NULL,NULL,NULL)
и из локали в utf8:
gchar* g_locale_to_utf8(строка,-1,NULL,NULL,NULL)
получаемые с помощью этих функций строки желательно
освобождать после использования с помощью g_free(указатель)


Десятичный разделитель
======================

Если программа формирует выходные файлы, в которых
неверно указывается десятичный разделитель
(запятая вместо точки), то рекомендуется применить
setlocale(LC_NUMERIC, "C");

Локализация сообщений
=====================

Типовые строки для локализации сообщений в программе
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset(GETTEXT_PACKAGE,"UTF-8");
textdomain(GETTEXT_PACKAGE);


Общие рекомендации
==================

- вместо функций printf/g_printf для вывода в консоль
  использовать g_print
- вместо конструкций fprintf(stderr...) использовать g_error


Работа с файлами и файловыми диалогами
======================================
gchar* g_filename_from_utf8(строка,-1,NULL,NULL,NULL)
gchar* g_filename_to_utf8(строка,-1,NULL,NULL,NULL)
получаемые с помощью этих функций строки желательно
освобождать после использования с помощью g_free(указатель)

Во внутренних структурах программы рекомендуется хранить
название файла в filesystem encoding (которая получается
с помощью g_filename_from_utf8), но выдавать на редактирование
и сохранять в конфигурационные файлы - в utf8.

Возможно использование функции
g_filename_from_uri
в чём преимущества пока не знаю.

Для дублирование строк используется функция
g_strdup

Файловому диалогу передаётся название файла в filesystem 
encoding.
Устанавливается название файла такой конструкцией:
gtk_file_selection_set_filename(GTK_FILE_SELECTION(opendlg), 
filename);
Получается название файла так:
filename = 
gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs));

Вот типичный код получения названия файла в кодировке UTF8 (взят 
из dia):
const char *filename;
struct stat stat_struct;
filename = 
gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs));
if (stat(filename, &stat_struct) == 0) { // File already exist
    char buffer[300];
    char *utf8filename = NULL;
    if (!g_utf8_validate(filename, -1, NULL)) {
        utf8filename = g_filename_to_utf8(filename, -1, NULL, 
NULL, NULL);
        if (utf8filename == NULL) {
            message_warning(_("Some characters in the filename 
are neither UTF-8 nor you local encoding"));
        }
    }
    if (utf8filename == NULL) utf8filename = g_strdup(filename);
    g_snprintf(buffer, 300,
        _("The file '%s' already exists.\n"
        "Do you want to overwrite it?"), utf8filename);
    ....
    g_free(utf8filename);
}


Замечания по локализации QT/KDE программ
========================================

Работа с файлами и файловыми диалогами
======================================

Как нельзя получать название файла:
       result.second = string(dlg.selectedFile().data());
Как надо:
       result.second = fromqstr(dlg.selectedFile());

       
Порядок испытания программы на корректную работу с локалью
==========================================================

Проблема работы с файлами, названными по-русски, может
возникнуть в любой программе. Вот примерный план проверки:

1. Сохранение файла с русским названием в английский каталог

2. Сохранение файла с русским путём к файлу

3. Корректное название вновь создаваемого файла
   (в диалоге Создать)

4. Открытие файла по русскому пути (во всех возможных
  диалогах вставки и открытия файла)

5. Проверка экспортируемых файлов (например EPS на предмет
  корректности оформления цифр (десятичный
  разделитель), проверяется через
  $ LANG=C программа

6. Запуск программы с указанием русского файла в
  качестве параметра

Дополнительное замечание: Файловые диалоги при
повторном обращении должны помнить предыдущий каталог.


Vitaly Lipatov <lav@altlinux.ru>, 2004

09.11.2004

-- 
Lav
Виталий Липатов
Санкт-Петербург
GNU! ALT Linux Team! LaTeX! LyX!


^ permalink raw reply	[flat|nested] 115+ messages in thread

end of thread, other threads:[~2004-11-18 14:25 UTC | newest]

Thread overview: 115+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-11-09 23:21 [devel] Заметки о локализации программ Vitaly Lipatov
2004-11-10  7:11 ` Denis Ovsienko
2004-11-10  8:28   ` Vitaly Lipatov
2004-11-10  9:08 ` Sergey V Turchin
2004-11-10  9:19   ` Vitaly Lipatov
2004-11-10  9:39     ` Sergey V Turchin
2004-11-10  9:58 ` Mikhail Zabaluev
2004-11-10 12:44   ` Вячеслав Диконов
2004-11-10 11:55     ` Alexey I. Froloff
2004-11-10 13:42       ` Вячеслав Диконов
2004-11-10 12:51         ` Dmitry V. Levin
2004-11-10 13:51           ` [devel] [JT] Re: Заметки о локализации программ -- системных vs прикладных Michael Shigorin
2004-11-10 20:13             ` Вячеслав Диконов
2004-11-10 23:16               ` Mikhail Zabaluev
2004-11-11  4:57               ` Andrey Rahmatullin
2004-11-11  7:45               ` [devel] " Michael Shigorin
2004-11-10 14:08           ` [devel] Заметки о локализации программ Вячеслав Диконов
2004-11-10 13:36             ` Sergey V Turchin
2004-11-10 13:48             ` [devel] " Michael Shigorin
2004-11-10 14:01             ` [devel] " Andrei Bulava
2004-11-10 21:06             ` Andrey Orlov
2004-11-10 23:10               ` Mikhail Zabaluev
2004-11-11  6:54                 ` Anton Farygin
2004-11-11  8:28                   ` Mikhail Zabaluev
2004-11-11 12:03                     ` Andrey Orlov
2004-11-12  2:09                       ` [JT] " Mikhail Zabaluev
2004-11-12  8:29                         ` Michael Shigorin
2004-11-12 23:48                           ` Вячеслав Диконов
2004-11-13  4:05                             ` Andrey Rahmatullin
2004-11-13 10:06                               ` Вячеслав Диконов
2004-11-15  7:49                                 ` Anton V. Boyarshinov
2004-11-16 19:19                                   ` Вячеслав Диконов
2004-11-17 12:15                                     ` Michael Shigorin
2004-11-17 16:14                                     ` Денис Смирнов
2004-11-17 17:09                                     ` Sergey V Turchin
2004-11-13 10:24                             ` Michael Shigorin
2004-11-13 10:26                             ` Michael Shigorin
2004-11-15 10:48                             ` Денис Смирнов
2004-11-15 11:06                               ` Andrey Orlov
2004-11-15 21:28                                 ` Денис Смирнов
2004-11-15 23:10                                   ` Andrey Orlov
2004-11-16 16:37                                     ` Денис Смирнов
2004-11-15 15:31                               ` Andrey Rahmatullin
2004-11-16  6:52                                 ` Alexey I. Froloff
2004-11-16 10:12                                   ` [devel] Re: [JT] " Mikhail Zabaluev
2004-11-16 17:19                                     ` Денис Смирнов
2004-11-17  0:38                                       ` Mikhail Zabaluev
2004-11-17 16:01                                         ` Денис Смирнов
2004-11-18  0:30                                           ` Mikhail Zabaluev
2004-11-18 14:25                                             ` Денис Смирнов
2004-11-16 18:38                                   ` [JT] Re: [devel] " Денис Смирнов
2004-11-16 18:37                                 ` Денис Смирнов
2004-11-16 19:46                               ` Вячеслав Диконов
2004-11-17 12:07                                 ` Nick S. Grechukh
2004-11-17 12:14                                 ` Michael Shigorin
2004-11-17 13:41                                   ` Вячеслав Диконов
2004-11-17 14:03                                     ` Michael Shigorin
2004-11-17 16:13                                     ` Денис Смирнов
2004-11-17 16:09                                 ` Денис Смирнов
2004-11-17 16:56                                 ` Andrey Rahmatullin
2004-11-12  9:12                         ` Andrey Orlov
2004-11-12 13:25                           ` Nick S. Grechukh
2004-11-12 22:21                             ` Andrey Orlov
2004-11-12 23:55                               ` Вячеслав Диконов
2004-11-12 23:18                                 ` Andrey Orlov
2004-11-13 12:11                           ` Mikhail Zabaluev
2004-11-13 12:58                             ` Andrey Orlov
2004-11-13 13:11                               ` Mikhail Zabaluev
2004-11-13 14:21                                 ` Andrey Rahmatullin
2004-11-13 20:31                                 ` Andrey Orlov
2004-11-16 12:44                                   ` Nick S. Grechukh
2004-11-11 12:04                   ` Andrey Orlov
2004-11-12 19:19                     ` Вячеслав Диконов
2004-11-12 18:57                       ` Денис Смирнов
2004-11-12 22:07                       ` Andrey Orlov
2004-11-12 16:35             ` Andrey Astafiev
2004-11-12 23:10               ` Andrey Orlov
2004-11-12 23:03                 ` Denis Klykvin
2004-11-12 23:22                   ` Andrey Orlov
2004-11-15  5:28                   ` Alexey I. Froloff
2004-11-16 20:02                     ` Вячеслав Диконов
2004-11-17 12:09                       ` Nick S. Grechukh
2004-11-17 13:06                         ` Вячеслав Диконов
2004-11-17 13:11                           ` Alexey I. Froloff
2004-11-17 13:46                             ` Вячеслав Диконов
2004-11-17 14:01                               ` [devel] " Michael Shigorin
2004-11-17 14:03                               ` [devel] " Alexey I. Froloff
2004-11-17 16:16                               ` Денис Смирнов
2004-11-17 16:38                                 ` Nick S. Grechukh
2004-11-17 18:21                                   ` Денис Смирнов
2004-11-17 18:29                                     ` Nick S. Grechukh
2004-11-17 20:30                                       ` Денис Смирнов
2004-11-17 16:52                                 ` Andrey Rahmatullin
2004-11-17 18:25                                   ` Denis Smirnov
2004-11-17 12:10                       ` Alexey I. Froloff
2004-11-17 12:38                       ` Denis Klykvin
2004-11-17 13:18                         ` Вячеслав Диконов
2004-11-17 13:24                           ` Alexey I. Froloff
2004-11-17 13:51                             ` Вячеслав Диконов
2004-11-17 14:08                               ` Alexey I. Froloff
2004-11-17 20:13                                 ` Alexander Bokovoy
2004-11-18  6:58                                   ` Alexey I. Froloff
2004-11-17 14:12                               ` Nick S. Grechukh
2004-11-17 14:16                                 ` Nick S. Grechukh
2004-11-18  0:28                                 ` Mikhail Zabaluev
2004-11-17 13:35                           ` Denis Klykvin
2004-11-18  8:57                             ` [devel][JT] " Yury Aliaev
2004-11-18 10:46                               ` Denis Klykvin
2004-11-17 21:34                           ` [devel] [JT] " Anatoly A. Yakushin
2004-11-17 21:45                             ` Andrey Rahmatullin
2004-11-18  0:24                         ` [devel] " Mikhail Zabaluev
2004-11-18  6:54                           ` Denis Klykvin
2004-11-12 23:41               ` [devel] " Вячеслав Диконов
2004-11-10 15:05   ` Yuri N. Sedunov
2004-11-10 20:30     ` Vitaly Lipatov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git