Форум » GUI » Интерфейс с украинским языком ? » Ответить

Интерфейс с украинским языком ?

Andrey: Объявился у меня старый заказчик из Киева, у него Win10 с тремя языками. Нужно ему сделать печать на украинском в ФастРепорте. Вопрос такой - как для имеющей сейчас программы МиниГуи добавить украинский режим сохранения ini-файлов ? И как переключать принудительно на украинский язык отдельное окно для настроек текстовых данных ? Типа банк, расчётный счёт и другие различные сообщения. Заранее СПАСИБО за ответ.

Ответов - 66, стр: 1 2 3 4 All

Dima: Andrey пишет: А что такое с BOM ? Гугл спроси а то Сергей у тебя как справочное бюро

Andrey: Dima пишет: Гугл спроси а то Сергей у тебя как справочное бюро Блин, уже пробовал... https://yandex.ru/search/?text=%D1%87%D1%82%D0%BE+%D1%82%D0%B0%D0%BA%D0%BE%D0%B5+%D0%92%D0%9E%D0%9C&lr=2&clid=2186621 Текстовые файлы, включая ini надо делать в Utf-8, желательно с BOM А в Far'е это можно делать ? Или нужен другой редактор и какой ?

Haz: Andrey пишет: Блин, уже пробовал... https://www.google.com/search?q=utf8+bom&oq=utf8+bom&aqs=chrome..69i57j0i512l4.6480j0j4&client=ms-android-xiaomi&sourceid=chrome-mobile&ie=UTF-8


Andrey: Спасибо ! А то и не знаешь что читать. Пока до правильной статьи доберёшься, глаза в кучку соберутся...

SergKis: Andrey, чаще читай hmg исходники. Создание файла с BOM в hmg HMG_CreateFile_UTF16LE_BOM( cFile ) или hb hb_MemoWrit( cFile, hb_utf8Chr( 0xFEFF ) ) потом дописывай в файл cFile, делая hb_StrToUtf8( cValue ) А в Far'е это можно делать ? Ставь кодовую страницу редактору Shift+F8 Utf-8 (при сохранении BOM не будет) или бери в редактор файл с BOM (созданный выше) или исп. редактор hbedit.exe ставь кодовую страницу редактору Shift+F8 Utf-8 и при Save as ... ставь галочку с BOM

Andrey: Спасибо БОЛЬШОЕ !

Dima: SergKis пишет: Ставь кодовую страницу редактору Shift+F8 Utf-8 (при сохранении BOM не будет) Не совсем так

SergKis: Dima пишет Не совсем так Я и забыл про Shift+F2, жмукаю сразу F2, т.к. файлы уже с BOM в работе для Far

Andrey: Искал белорусский язык в МиниГуи. Не нашёл ... Может не там искал. Смотрел i_lang.ch Так же почему то не нашёл как поставить латвийский язык. Просто для проверки. SergKis пишет: 3. в программе hmg ставим LVWIN (1257), где у тебя RUSSIAN Вообще не компилируется: [pre2] #include "hblang.ch" #include "hbextcdp.ch" ...... SET CODEPAGE TO LVWIN // (1257) SET LANGUAGE TO LVWIN // (1257) Harbour 3.2.0dev (r2104281802) Copyright (c) 1999-2021, https://harbour.github.io/ SetsEnv_misc.prg(25) Error E0030 Syntax error "syntax error at 'CODEPAGE'" SetsEnv_misc.prg(26) Error E0030 Syntax error "syntax error at 'LANGUAGE'" 2 errors No code generated.[/pre2]

SergKis: Andrey пишет Вообще не компилируется: Не трать время, говорил, ранее. НЕ работает и не нужен однобайтовый вариант от слова, совсем HB_CDPSELECT( "LVWIN" ) HB_LANGSELECT( "LVWIN" ) Работает только в unicode версии hmg вариант oCol:bDecode := {|cv| hb_StrToUtf8(cv, "LVWIN" ) } oCol:bEncode := {|cv| hb_Utf8ToStr(cv, "LVWIN" ) } oCol:cHeading += CRLF + "LVWIN" или все в Utf8

Andrey: SergKis пишет: Не трать время, говорил, ранее. НЕ работает Пропустил это. А как ты тогда собираешь свою версию МиниГуи, кроме unicode ? Просто интересно.

SergKis: Andrey пишет А как ты тогда собираешь свою версию МиниГуи, кроме unicode ? Тоже много раз писал в темах. Сборка hb 3.2 unicode с LV866 (EN,RU,LV языки) Сборка hmg 2.07 unicode от 2012 года с работающим MDI интерфейсом с совместной работой MODAL окон Тсб версии 7.0 + изменения от тсб версии 9.0 (тек. версии) и кое что свое по минимуму VO 2.7 переделанная в unicode (работа с pdf, почтой, печать) до сих пор на ней Win32 C++ модуль с HtmLayout.dll (от 2003-2009 года), на нем была работа (css, html) таблиц (как тсб, но с расцветкой слов в ячейках) до появления версии hb 2.0 unicode, сейчас не модифицируется, т.к. продвижение (behaviors) dll ушло из C++ в js подобный язык, а потом совсем прекратилось

Andrey: Понял. Спасибо !

Andrey: Что то не получается правильно переключать языки в МиниГуи. Открываю 4 окна (одна функция) со своим языком. Вот кусок из примера: [pre2] SET CODEPAGE TO ENGLISH SET LANGUAGE TO ENGLISH ? Hb_LangSelect() ---> в лог-файле будет en.EN myViewer("NOWAIT", "(1) CodePage: ENGLISH ! ") // открыть базу для белорусского языка SET LANGUAGE TO BYELORUSSIAN myViewer("NOWAIT", "(2) CodePage: RU1251 ! ") // открыть базу для украинского языка SET CODEPAGE TO UKRAINIAN // hb_SetCodepage( "UA1251" ) SET LANGUAGE TO UKRAINIAN // hb_CdpSelect( "UA1251" ) ? Hb_LangSelect() ---> в лог-файле будет uk.UA1251 myViewer("NOWAIT", "(3) CodePage: UA1251 ! ") // открыть базу для русского языка SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN ? Hb_LangSelect() ---> в лог-файле будет ru.RU1251 myViewer("NOWAIT", "(4) CodePage: RU1251 ! ") ... Function myViewer(cWait, cTitle) ... cSetCP := hb_SetCodepage() cSelCdp := hb_CdpSelect() cLngSel := Hb_LangSelect() ... DEFINE WINDOW &cForm ...TITLE cTitle ... ; WINDOWTYPE STANDARD TOPMOST NOMAXIMIZE NOSIZE ; ON GOTFOCUS myLangRecover(cSetCP,cSelCdp,cLngSel) ; // возврат фокуса на форму .... CENTER WINDOW &cForm ACTIVATE WINDOW &cForm NOWAIT RETURN NIL FUNCTION myLangRecover(cSetCP,cSelCdp,cLngSel) DO EVENTS hb_SetCodepage(cSetCP) hb_CdpSelect(cSelCdp) hb_LangSelect(cLngSel) myGetLang(cTitle) // Какой язык в окне ? DO EVENTS RETURN NIL FUNCTION myGetLang(cTitle) // Какой язык в окне ? LOCAL cMsg cMsg := "hb_SetCodepage()= " + hb_SetCodepage() + ";" cMsg += "hb_CdpSelect() = " + hb_CdpSelect() + ";" cMsg += "hb_LangSelect() = " + hb_LangSelect() + ";" cMsg += "hb_langName() = " + hb_langName() + ";" cMsg += "hb_langMessage()= " + hb_langMessage() + ";" AlertInfo( cMsg, cTitle, , , {RED} ) RETURN NIL[/pre2] И в результате если переключаюсь на окно (1) имею вот такой результат: [pre2] hb_SetCodepage()= EN hb_CdpSelect() = EN hb_LangSelect() = en.EN.EN hb_langName() = Harbour Language: en.EN.EN English (English) hb_langMessage()= en.EN.EN hb_langErrMsg(1)= Argument error [/pre2] Или на окно (4) [pre2]hb_SetCodepage()= RU1251 hb_CdpSelect() = RU1251 hb_LangSelect() = ru.RU1251.RU1251 hb_langName() = Harbour Language: ru.RU1251.RU1251 Russian () hb_langMessage()= ru.RU1251.RU1251 hb_langErrMsg(1)= [/pre2] Почему задвоение языка идёт ? ru.RU1251.RU1251 вместо ru.RU1251 ? Или нужно по другому переключать язык ? И почему в МиниГуи 2 команды всего для смены языка, а приходиться задействовать у себя 3 ?

Andrey: А как можно узнать, какие языки подключены в ехе-нике программы ?

SergKis: Andrey пишет А как можно узнать, какие языки подключены в ехе-нике программы ? Ты сам делаешь список request подключений языков, можешь составить список (ИИ тут не причем ) [pre2] REQUEST HB_CODEPAGE_UA1251, HB_CODEPAGE_UA866 // украинский язык REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 // русский язык REQUEST HB_LANG_BEWIN // белорусский язык [/pre2]

Andrey: SergKis пишет: Ты сам делаешь список request подключений языков, можешь составить список (ИИ тут не причем ) Нужен ОБЯЗАТЕЛЬНО ИИ в своей проге. Список открытых баз делаем же: hb_waEval( {|| AADD(aAlias, Alias()) } ) hb_waEval( {|| AADD(aSelect, Select()) } ) hb_waEval( {|| AADD(aRdd, RddName()) } ) Список используемых фонтов в программе тоже делаем. Почему нельзя определить в программе список доступных CODEPAGE и LANGUAGE ?

SergKis: Andrey пишет Почему нельзя определить в программе список доступных CODEPAGE и LANGUAGE ? Потому что не сделав REQUEST\EXTERNAL, не будет подключения модуля языка к exe. посмотри hbedit.exe сборку, там есть ch файлы для подкл. ф-ий, в том числе и по языку и сборка hbp с параметром full и без него. Список используемых фонтов в программе тоже делаем. Это большого смысла не имеет, т.к. однобайтная сборка завязана на Region, т.е. в exe можешь подключить "все языки мира", но для работы уст. только связаный с Region. prg файл будет в каком языке ? Текстовые константы, которые используешь в Label, не из dbf, будут на каком языке ? Т.е. нет большого смысла в однобайтной сборке пихать языки в один exe, проще для каждого языка делать свою сборку exe.

Andrey: SergKis пишет: т.е. в exe можешь подключить "все языки мира" Да не хочу я подключать все языки мира. Речь идёт о программе, которую пишет любой программист. Он и использует свой язык - один. А у меня в проге уже используется 3 языка (анг.,русский и украинский), причём ещё разные кодировки. Вот русские жадные аж 4 кодировки для себя придумали. Это был юмор, если кто не понял. Теперь борются с ними... SergKis пишет: Т.е. нет большого смысла в однобайтной сборке пихать языки в один exe, проще для каждого языка делать свою сборку exe. Ну Григорий же как то выкручивается для разных языков. [pre2] CASE cLang == "EL" ///////////////////////////////////////////////////////////// // GREEK - ΕΛΛΗΝΙΚΑ ///////////////////////////////////////////////////////////// aMessages[ 1 ] := "Ελαττώστε κάτι από τα παρακάτω (ή όλα):" // 1 aMessages[ 2 ] := "- τον αριθμό Στηλών" // 2 aMessages[ 3 ] := "- το αριστερό περιθώριο" // 3 aMessages[ 4 ] := "ή επιλέξτε LANDSCAPE προσανατολισμό σελίδας." // 4 aMessages[ 5 ] := "Πρόβλημα: Η γραμμή ξεπερνάει το πλάτος σελίδας!" // 5 aMessages[ 6 ] := "Μέγεθος Σελίδας:" // 6 aMessages[ 7 ] := "Μέγεθος γραμμ/σειράς = " // 7 aMessages[ 8 ] := "Μέγιστος αριθμός γραμμών =" // 8 aMessages[ 9 ] := "Αριθμός γραμμών που ζητήθηκαν =" // 9 aMessages[ 10 ] := "Μέγιστος αριθμός Στηλών =" // 10 aMessages[ 11 ] := "Αριθμός Στηλών που ζητήθηκαν =" // 11[/pre2] Вот и я хотел бы просто определить какие языки подключены в свой ехе-ник через REQUEST\EXTERNAL SergKis пишет: Текстовые константы, которые используешь в Label, не из dbf, будут на каком языке ? Ну на том языке, какой установили на окно. DEFINE WINDOW ... ON GOTFOCUS myLangRecover(cSetCP,cSelCdp,cLngSel) ; // возврат фокуса на форму

SergKis: Григорий же как то выкручивается для разных языков Это просто данные, переведенные и полученные на том языке ("EL" в данном случае), например ставим нужный язык в редакторе и переводим EN аналоги текста и переносим в prg не меняя, т.е. будем видеть кракозяблики, но установив соответствующий язык, в prg и обратившись к этим константам, получишь правильный текст. Если prg у меня в проекте будут в utf-8 (RUSSIAN тексты или др. язык), а использовать их я буду в однобайтной сборке, то перекодировав utf-8 => RU1251 (или др. язык) в работе exe будут правильные тексты и сообщения по языкам, что и делал ранее для редактора Akelpad, даже для clipper проектов, т.к. у M$, hb нет кодировки LV866 Вот и я хотел бы просто определить какие языки подключены в свой ехе-ник через REQUEST\EXTERNAL Если сам делал REQUEST\EXTERNAL, то и сделай массив, или в BEGIN SEQUNCE ... делай перебор, ОПЯТЬ ЖЕ ПО СПИСКУ (массив откуда взять ?) ЯЗЫКОВ и составляй массив, не попавших в RECOVER Ну на том языке, какой установили на окно. DEFINE WINDOW ... ON GOTFOCUS myLangRecover(cSetCP,cSelCdp,cLngSel) ; // возврат фокуса на форму Всегда получишь ерунду, если язык не соответствует установке Region



полная версия страницы