OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 23 Июнь, 2021 09:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 09 Январь, 2021 17:48 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 62
Я пользуюсь файлом ресурсов STRINGS (ключ символ_табуляции текст_на_русском). Затем получаю текст_на_русском из процедуры Dialog.MapString ("#имя_проекта:ключ", str);. Как сделать поддержку ещё какого-нибудь языка, чтобы можно было на него переключиться во время работы программы?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 09 Январь, 2021 18:17 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Блэкбокс смотрит доступные языки по директории System/Rsrc
Если вы создадите:
System/Rsrc/de/
то в списке языков появится de

Установить язык возможно процедурой
Dialog.SetLanguage


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 10 Январь, 2021 15:40 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 62
Цитата:
то в списке языков появится de.
А можно как-то просмотреть этот список?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 10 Январь, 2021 15:50 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Александр К писал(а):
Цитата:
то в списке языков появится de.
А можно как-то просмотреть этот список?


Начиная с версии 1.7 этот список можно посмотреть в диалоге настроек, которое открывается через меню Правка -> Установки пользователя..., в правом верхнем углу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 12 Январь, 2021 12:29 

Зарегистрирован: Воскресенье, 06 Август, 2017 19:33
Сообщения: 62
Нет, я имею в виду не язык каркаса, а прикладных программ. В частности меня интересует, можно ли добавлять новые языки в свои программы не пере компилируя их.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 12 Январь, 2021 13:45 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 486
Каркас и приложение - единое целое. Делая приложение, вы "продолжаете" и "развиваете" каркас.

Конкретно: делаете App/Rsrc/Fr/Strings.odc и помещаете туда ресурсы для французского языка. Затем переключаете ББ на французский - и вуаля, ваше приложение получает строки из этого документа.

Как оно их получает: через строки, начинающиеся с #App:. Например, в форме в метку вы пишете не "Hello", а "#App:Hello". Тогда каркас подгрузит из строкового документа текущего языка (App/Rsrc/Fr/Strings.odc) отображение и поместит его в метку. Если вы там напишете Hello<tab>Bonjour, то будет на вашей метке бонжур. То же касается и меню: в App/Rsrc/Menus можно использовать языкозависимые строки, см. примеры в System/Rsrc/Menus. Если вам нужно в тексте программы использовать языкозависимую строку, воспользуйтесь Dialog.MapString:
Код:
Dialog.MapString("#App:Cogito ergo sum", str); Log.String(str); (* в журнале: Я мыслю, следовательно, я существую - при включенном русском, или Je pense, donc je suis - при включенном французском *)
Для переключения языков такую программу перекомпилировать не нужно.

(Про то, что каркас и приложение - единое целое: все сервисы каркаса, где поддерживаются языкозависимые строки, опираются на Dialog.MapString; как и ваше будущее приложение ;))

П.С. А где-то у Ивана Андреевича имелось видео про эти языковые дела...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 12 Январь, 2021 19:10 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3111
Есть заметка в группе: https://vk.com/@componentpascal-lokalizaciya-prosto
Но, как я понимаю, Александр, это уже знает.

Программно вы можете вручную добавить любые языки через доступ к глобальной переменной HostDialog.prefs.language.
По аналогии с тем, как это сделано в HostDialog.InitLanguage.

Код:
   PROCEDURE InitLanguage;
      VAR loc: Files.Locator; li: Files.LocInfo; lang: Dialog.Language; n: INTEGER;
   BEGIN
      prefs.language.SetItem(0, defaultLanguage);
      n := 1;
      loc := Files.dir.This("System/Rsrc/");
      li := Files.dir.LocList(loc);
      WHILE li # NIL DO
         IF LEN(li.name$) = 2 THEN
            Unicode.ToLower(li.name, lang);
            prefs.language.SetItem(n, lang);
            INC(n);
         END;
         li := li.next;
      END;
      prefs.language.SetLen(n);
      prefs.language.item := Dialog.language$;
      IF prefs.language.item = '' THEN prefs.language.item := defaultLanguage END;
   END InitLanguage;


Или реализовать какой-то свой интерфейс и вызывать
Код:
Dialog.SetLanguage(langVar, Dialog.persistent);

где langVar - это наименование языка 'ru', 'en' и т.п.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2021, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB