Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Как в MonoDevelop сделать набор локализаций для своей программы  (Прочитано 1801 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Mixim

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Продолжаю работать над мельком указанном здесь проектом. Понадобилось предоставить пользователю возможность локализации программы, чтобы весь текст для GUI-элементов можно было установить из файла-настроек.
Немного почитал как такое вообще возможно сделать, но ничего не понял. Согласитесь, что создавать текстовый файл формата:
Цитировать
entry1.Text="abc";
label1.LabelProp="123";
//etc
и потом в процессе загрузки программы вручную парсить его и подгружать настройки для каждого элемента управления, т.е. писать в Main.cs что-то вроде:
...
using(StreamReader loadSettings=new StreamReader("settings.cs"))
{
String fileLine;
while((fileLine=loadSettings.ReadLine())!=null)
{
if(fileLine.StartWith("label1.LabelProp"))
{
form1.label1.LabelProp=fileLine.TrimStart("label1.LabelProp");
}
else
{
//...
}
}
}
...
- это перебор :idiot2:. Подскажите пожалуйста, более рациональный способ локализации приложения.
Сам пока пошел Google мучить

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6255
    • Просмотр профиля
хз что там в этих непотребных Mono-поделках используется, но всё прогрессивное человечество, и сообщество СПО в частности, использует gettext.

Оффлайн Mixim

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Это к gettext. Вот ссылки: интернационализация, локализация.
хз что там в этих непотребных Mono-поделках используется, но всё прогрессивное человечество, и сообщество СПО в частности, использует gettext.
Локализацией до этого никогда не занимался, поэтому прошу не кричать за возможно тупые вопросы. Почитал про GetText, но что-то ничего вразумительного понять не могу.
Сейчас буду читать материалы, любезно предоставленные Quiet_readonly, но все же хотелось бы получить пошаговое описание указанного процесса
После беглого просмотра, стало немного понятнее: добавляем в решение Translation Project, в который вставляем нужные локализации; переводим элементы пользовательского интерфейса в Translation Project и вроде бы все. Но как теперь подгрузить нужную локаль?
« Последнее редактирование: 13 Марта 2013, 08:38:19 от Mixim »

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Подгрузка локализации в проекте — это и есть internationalization, оно же i18n. Локализация — это создание конкретного перевода для проекта, который уже поддерживает мультиязычность.

Вы справились с локализацией, так что теперь изучайте, как в mono сделать интернационализацию. Технически, надо просто обернуть литералы какой-то функцией, например "Select file to open:" в Qt преобразуется в tr("Select file to open"), а в чистом C в _("Select file to open"). Как в моно — не знаю, но по первой ссылке, вероятно, рассказано.

Оффлайн Mixim

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
С консолью получило разобраться, четко следуя этим указаниям. Теперь остался GUI - перекур и продолжу ковыряться
С консолью все хорошо, но вот разобраться с Gtk#-приложениями не так это просто оказалось, как я подумал.
Создал простой Gtk#-проект ("TestApp") на главную форму которого бросил парочку контролов: Table, Lable, Button, Entry. Сохранил проект. Выполняю в терминале (вывод и мои комментарии):
Цитировать
mixim@Miximia:~$ cd Документы/MonoDevelop/Projects/TestApp/TestApp/gtk-gui
//перешли в каталог, где MonoDevelop хранит описание интерфейса форм
mixim@Miximia:~/Документы/MonoDevelop/Projects/TestApp/TestApp/gtk-gui$ mcs -r Mono.Posix MainWindow.cs
//пытаюсь создать локаль, на что получаю:
//warning CS8029: Compatibility: Use -r:LIBRARY instead of -r library
//MainWindow.cs(6,17): error CS0400: The type or namespace name `Gtk' could not be found in the global namespace (are you missing an assembly reference?)
//MainWindow.cs(7,17): error CS0400: The type or namespace name `Gtk' could not be found in the global namespace (are you missing an assembly reference?)
//MainWindow.cs(8,17): error CS0400: The type or namespace name `Gtk' could not be found in the global namespace (are you missing an assembly reference?)
//MainWindow.cs(9,17): error CS0400: The type or namespace name `Gtk' could not be found in the global namespace (are you missing an assembly reference?)
//MainWindow.cs(10,17): error CS0400: The type or namespace name `Gtk' could not be found in the global namespace (are you missing an assembly reference?)
//Compilation failed: 5 error(s), 1 warnings
//т.е. не может найти тип или пространство имен Gtk
//правлю указанную команду
mixim@Miximia:~/Документы/MonoDevelop/Projects/TestApp/TestApp/gtk-gui$ mcs -r Mono.Posix Gtk MainWindow.cs
//на что получаю:
//warning CS8029: Compatibility: Use -r:LIBRARY instead of -r library
//error CS2001: Source file `Gtk' could not be found
//Compilation failed: 1 error(s), 1 warnings
Понятно, что он не может найти Gtk, но как тогда делать?
В приведенных указаниях есть пошаговая инструкция по созданию локалей для консоли и Glade-приложений, есть кратенький мануал для Gtk#:
(Нажмите, чтобы показать/скрыть)
- если правильно понимаю, то с локализацией Gtk#-приложений есть проблемы и предлагаются какие-то костыли. Неужели нет нормального способа локализации Gtk#-программы?
« Последнее редактирование: 13 Марта 2013, 10:26:25 от Mixim »

 

Страница сгенерирована за 0.048 секунд. Запросов: 25.