OberonCore https://forum.oberoncore.ru/ |
|
Поддержка нескольких языков при использовании STRINGS https://forum.oberoncore.ru/viewtopic.php?f=1&t=6712 |
Страница 1 из 1 |
Автор: | Александр К [ Суббота, 09 Январь, 2021 17:48 ] |
Заголовок сообщения: | Поддержка нескольких языков при использовании STRINGS |
Я пользуюсь файлом ресурсов STRINGS (ключ символ_табуляции текст_на_русском). Затем получаю текст_на_русском из процедуры Dialog.MapString ("#имя_проекта:ключ", str);. Как сделать поддержку ещё какого-нибудь языка, чтобы можно было на него переключиться во время работы программы? |
Автор: | Иван Денисов [ Суббота, 09 Январь, 2021 18:17 ] |
Заголовок сообщения: | Re: Поддержка нескольких языков при использовании STRINGS |
Блэкбокс смотрит доступные языки по директории System/Rsrc Если вы создадите: System/Rsrc/de/ то в списке языков появится de Установить язык возможно процедурой Dialog.SetLanguage |
Автор: | Александр К [ Воскресенье, 10 Январь, 2021 15:40 ] |
Заголовок сообщения: | Re: Поддержка нескольких языков при использовании STRINGS |
Цитата: то в списке языков появится de. А можно как-то просмотреть этот список?
|
Автор: | Иван Денисов [ Воскресенье, 10 Январь, 2021 15:50 ] |
Заголовок сообщения: | Re: Поддержка нескольких языков при использовании STRINGS |
Александр К писал(а): Цитата: то в списке языков появится de. А можно как-то просмотреть этот список?Начиная с версии 1.7 этот список можно посмотреть в диалоге настроек, которое открывается через меню Правка -> Установки пользователя..., в правом верхнем углу. |
Автор: | Александр К [ Вторник, 12 Январь, 2021 12:29 ] |
Заголовок сообщения: | Re: Поддержка нескольких языков при использовании STRINGS |
Нет, я имею в виду не язык каркаса, а прикладных программ. В частности меня интересует, можно ли добавлять новые языки в свои программы не пере компилируя их. |
Автор: | adimetrius [ Вторник, 12 Январь, 2021 13:45 ] |
Заголовок сообщения: | Re: Поддержка нескольких языков при использовании STRINGS |
Каркас и приложение - единое целое. Делая приложение, вы "продолжаете" и "развиваете" каркас. Конкретно: делаете 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 ] |
Заголовок сообщения: | Re: Поддержка нескольких языков при использовании STRINGS |
Есть заметка в группе: 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' и т.п. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |