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

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

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

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

Dima: Andrey пишет: Вопрос такой - как для имеющей сейчас программы МиниГуи добавить украинский режим сохранения ini-файлов Я так думаю что менять ни чего не нужно если мы о форме ввода а вот вывод на печать да придется переделать на мову. Ну и тебе временно надо поставить укр.раскладку что бы формы вывода перебить. Andrey пишет: И как переключать принудительно на украинский язык отдельное окно для настроек текстовых данных ? Где то был такой вопрос и решение тут , с ходу не найду. У тебя базы кстати в какой кодировке ?

Andrey: Dima пишет: У тебя базы кстати в какой кодировке ? RU866

Dima: Andrey пишет: RU866 Возможно придется открывать с кодировкой UA1125 или UA866 , чекать надо


Andrey: Dima пишет: Возможно придется открывать с кодировкой UA1125 или UA866 , чекать надо Список базы не буду менять, там идёт только сумма оплаты, долг и адрес на русском языке. У заказчика в 1С всё на русском, я перетащил к себе тоже на русском. Нужно сообщения в квитанции на украинском делать. Вот где их сохранить потом не знаю. Наверное лучше открыть базу с кодировкой UA1125 и там сохранять сообщения для печати на украинском. В ФастРепорте есть ресурсный файл для украинского, т.е. сообщения легко будут показываться на украинском. Волнует как сделать окно чисто под украинский язык, т.е. принудительно создавать окно под кодировку UA1125 и переключаться на укр.язык а после закрытия окна - переключаться обратно на RU1251 (у меня формы в этой кодировке). Как это сделать ?

Dima: Andrey Может тут http://clipper.borda.ru/?1-4-0-00000260-000-10001-0-1258111453

Andrey: Вроде сделал и работает ! Т.е. 3 языка в программе на РАЗНЫХ окнах: RU-UK-EN В коде начала программы поставил REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 REQUEST HB_CODEPAGE_UA1125, HB_CODEPAGE_UA866 При старте программы ставлю: SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN Автоматом идет кодировка RU1251 ! Для перевода старых программ можно установить старую кодировку на формы (это кто не знает): hb_cdpSelect("RU866") У себя в отдельном модуле делаю: FUNCTION WinUK() ... cdp := hb_cdpSelect("UA1125") ... FORMA_UK() // вызов формы и запись в базу на украинском языке ... hb_cdpSelect( cdp ) Всё работает отлично, НО ПРИ ОШИБКЕ в проге лог-файл не создаётся, выдаёт ошибку: Наверное из-за того что в пути стоит РУССКАЯ кодировка, а в проге переключились на украинскую. Поставил в пути EN - ошибка пропала. Можно ли поправить исходники МиниГуи от этой ошибки ?

Andrey: И ещё одна проблема вылазит при переключении кодировки на украинский. Не пишет в лог-файл, если в пути стоят русские буквы. _SetGetLogFile( GetStartUpFolder() + "\_Msg.log" ) Можно ли это тоже поправить ?

SergKis: Andrey пишет Можно ли это тоже поправить ? Можно, надо Перевести hmg в уникод или Использовать только EN названия каталогов и файлов в своей программе

Andrey: SergKis пишет: или Использовать только EN названия каталогов и файлов в своей программе А почему нельзя запомнить кодировку для ErrorLog.htm и файла-отладки при запуске своей проги ? При ошибке менять кодировку пути и записывать ErrorLog.htm При первом обращении к файлу-отладки _SetGetLogFile() запоминать кодировку и писать потом со сменой кодировке.

SergKis: Andrey пишет _SetGetLogFile() запоминать кодировку и писать потом со сменой кодировке. Так это твоя проблема в какой кодировке выводить, работать, открывать конкретные файлы, а не hmg и аналогичных файловых ф-ий много и hb (hmg) также должен быть unicode

Pasha: GetStartUpFolder работает через ExeName()/hb_progname(), которые возвращают строку в кодировке oem Соответственно для функций, которым нужна строка в ansi, требуется конвертация Для unicode этого не требуется

Andrey: SergKis пишет: Так это твоя проблема в какой кодировке выводить, работать, открывать конкретные файлы, а не hmg и аналогичных файловых ф-ий много и hb (hmg) также должен быть unicode А как тогда делать ? Вот простой пример. На компе Win8.1 установлена только русская и анг. язык. Старт программы из папки с русскими именами. У себя в отдельном модуле делаю:[pre2] FUNCTION MAIN() .... _SetGetLogFile( GetStartUpFolder() + "\_Msg.log" ) fErase( _SetGetLogFile() ) .... FUNCTION WinUK() ... ? "Проверка UkForm ! " + ProcNL(), hb_cdpSelect() ? GetStartUpFolder() cdp := hb_cdpSelect("UA1125") ? "Переключили на - " + hb_cdpSelect() , ProcNL() ? GetStartUpFolder() ? " -- End test !!! Вывод в кодировке UA1125"[/pre2] файл отладки _Msg.log: [pre2]Проверка UkForm ! Вызов из: PRN_UKFORM(16) --> test_uk.prg RU1251 W:\HB_Project\Abon4prj\Тест4_RU-UK-EN Проверка ! Вызов из: PRN_UKFORM(37) --> test_uk.prg RU1251 [/pre2] И ВСЁ ! Дальше не выводит отладку от слова СОВСЕМ ! Куда идёт отладка после переключения ?

Andrey: Если поставить англ. каталог, то всё нормально, вся отладка появляется ! [pre2]Проверка ! Вызов из: MAIN(29) --> 21main.prg Проверка UkForm ! Вызов из: PRN_UKFORM(16) --> test_uk.prg RU1251 W:\HB_Project\Abon4prj\TEST4_RU-UK-EN Переключили на - UA1125 Вызов из: PRN_UKFORM(19) --> test_uk.prg W:\HB_Project\Abon4prj\TEST4_RU-UK-EN -- End test !!! Вывод в кодировке UA1125 [/pre2]

Andrey: Добавляем в пример:[pre2] FUNCTION WinUK() ... cFileDbf := GetStartUpFolder() + "\test_base.dbf" ? "Проверка UkForm ! " + ProcNL(), hb_cdpSelect() ? GetStartUpFolder() cdp := hb_cdpSelect("UA1125") ? "Переключили на - " + hb_cdpSelect() , ProcNL() ? GetStartUpFolder() ? " -- End test !!! Вывод в кодировке UA1125" ? cFileDbf aStruct := {} AADD( aStruct, {"TITLEWIN" , "C", 80, 0} ) AADD( aStruct, {"FIRMA" , "C", 60, 0} ) DbCreate( cFileDbf, aStruct, "DBFCDX", .T., "TEST", , "UA1125" )[/pre2] Получаем ошибку: Ну и как исправить код программы для правильного создания БД для RU1251 ? Почему лог-файл ошибки не пишется ?

PSP: Путь к файлу с русскими буквами должен быть в кодировке 866, а не 1251

Andrey: PSP пишет: Путь к файлу с русскими буквами должен быть в кодировке 866, а не 1251 А как сделать вывод в лог-ошибки, как переназначить путь на русскую кодировку ? Доступа же нет к этому пути. Почему лог-файл ошибки не пишется ?

PSP: Andrey пишет: Почему лог-файл ошибки не пишется ? Думаю, по той же причине. У тебя в примере _SetGetLogFile( GetStartUpFolder() + "\_Msg.log" ) и лог-файл не создается. Попробуй обернуть вот так hb_ANSItoOEM( GetStartUpFolder() )

Andrey: Мне очень интересно как можно реализовать русский/украинский языковой модуль через dbf-файл. Имея RU1251 кодировку базы можно же сделать для 2х языков ? Или нужно всё таки под украинский язык базу открывать как UA1251 ?

Pasha: Андрей, а можно как-то прояснить, какие используются кодировки ? Кодировки семейства 866: RU866, UA866, UA1125 Кодировки семейства 1251: RU1251, UA1251 Какие предполагается использовать для программы, какие для dbf, и из каких соображений ?

SergKis: Andrey Попробуй один дбф с укр. и рус. полями (не указывая CP не будет перекодировки) 1. окно RU SET CODEPAGE RUSSIAN USE Test ALIAS RU NEW SHARED тут tsb на русские поля или контролы USE 2. окно UA SET CODEPAGE UA1251 // глянь как правильно ставить USE Test ALIAS UA NEW SHARED тут tsb на украинские поля или контролы USE Не знаю, скажутся ли установки в Region на все это Для 1251 и 1257 в VO надо было уст. Region для каждого варианта 1, 2

Andrey: Pasha пишет: Кодировки семейства 1251: RU1251, UA1251 Да это скорее всего. База у меня сейчас в RU866 переделаю на RU1251. Приходят реестры в xlsx файлах - для программы перекодирую в dbf-RU1251, вроде нормально укр.буквы сохраняются. Вот и подумал, может быть вообще оставить только одну кодировку RU1251 ? И сделать простой переключатель у себя в программе Рус./Укр. Или так не пойдёт, из-за каких то особенностей укр.языка ? А тексты перевода хотелось бы иметь в текстовых файлах. Переводить проще. На окно в программе повесить процедуру замены русского языка на украинский. Только как реализовать, пока не знаю. Dima пишет: Ну и тебе временно надо поставить укр.раскладку что бы формы вывода перебить. А без этого нельзя ? В гугле-переводчике вроде текст нормально переводиться на украинский.

Pasha: Andrey пишет: Вот и подумал, может быть вообще оставить только одну кодировку RU1251 ? cp1251 - единая кодовая страница что для русского, что для украинского языка. RU1251 и UA1251 содержат каждая свое подмножество символов из этих языков. Их совместно использовать можно и нужно. Это подход здорового человека. Мена резанул как раз вопрос совместного использования RU1251 и UA1125 - это совсем разные кодовые страницы, и их совместное использование - подход курильщика.

Andrey: Спасибо Pasha ! Хоть понятней стало мне. Буду переделывать тогда базу и справочники на RU1251. Нужно тогда мне будет сделать сопровождение клиентов со старой базой в RU866 и новой RU1251. Как сделать, пока не знаю. Всех клиентов переводить, это утомительное занятие. Какой то переключатель в настройках делать нужно наверное.

Pasha: Так можно и наоборот. RU866 и UA1125 обе на основе cp866, можно делать такую комбинацию

Andrey: Pasha пишет: RU1251 и UA1251 содержат каждая свое подмножество символов из этих языков. Их совместно использовать можно и нужно. А в чём их разница, по простому объяснить можешь ? Можно ли просто оставить одну кодировку RU1251 в программе, раз можно там записывать укр. язык ?

Pasha: Изучаем матчасть. По хорошему это первое, что надо было сделать, прежде чем использовать эти кодовые страницы Есть cp866, в котором отсутствует украинская i, а остальные украинские и белорусские допсимволы присутствуют. Отсутствует украинская г с хвостиком, так как на момент создания cp866 ее в украинском алфавите еще не было. Страница 1125 из укрстандарта совпадает с cp866 кроме допимволов, а именно: там нет белорусских допсимволов, есть украинская i и г с хвостиком. И коды украинских допсимволов не совпадают с кодами из cp866 Ну а cp1251 она и в африке 1251 - там все допсимволы уже есть

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

Andrey: Подскажите пожалуйста как сделать запись в текстовое поле БД, чтобы после сортировки эта запись стояла в конце базы ? С учётом украинского языка. Кодировка базы у меня 1251. Я раньше писал код CHR(250)+" итого", подойдет так или нет ?

Dima: Andrey пишет: Я раньше писал код CHR(250)+" итого", подойдет так или нет ? Попробуй и узнаешь , ну ты как маленький , такие детские вопросы задавать

Andrey: Dima пишет: Попробуй и узнаешь , ну ты как маленький , такие детские вопросы задавать Попробовал. В печати знак "ъ" выдаёт.

Haz: Andrey пишет: Попробовал. В печати знак "ъ" выдаёт. И правильно выдаёт. https://wm-school.ru/html/html_win-1251.html Можно сделать техническое поле из одного символа и использовать составную сортировку

Andrey: Haz пишет: Можно сделать техническое поле из одного символа и использовать составную сортировку Спасибо БОЛЬШОЕ ! Об этом и не подумал. Хороший трюк !

Andrey: Пытаюсь прочитать объекты на форме через: [pre2] aVal := HMG_GetFormControls(cForm, "LABEL") - выдаёт список aVal := HMG_GetFormControls(cForm, "GETBOX") - выдаёт список aVal := HMG_GetFormControls(cForm, "BUTTONEX") - выдаёт пусто = {} [/pre2]А есть у кого готовый список: объект - внутреннее название объекта ? P.S. BUTTONEX - это OBUTTON, нашёл методом тыка.

Петр: Andrey пишет: нашёл методом тыка И тему также выбрал..

Andrey: Andrey пишет: Пытаюсь прочитать объекты на форме через: Это для перевода на украинский язык. Всё что на форме считываю и перевожу на украинский язык.

Andrey: Сделал пример для нескольких языков в проекте. Кому интересно смотреть здесь - https://cloud.mail.ru/public/jXWN/CCoGsRBmD Там смотреть файл readme.txt Подход простой: один файл с языками *.lng и перевод формы при показе. Для этого в окно в процедуру ставлю везде так - ON INIT Form2Lang()

Andrey: А как можно получить список окон своей программы ? Если окно открыто, то это понятно что можно выбрать список окон МиниГуи в памяти. А если программу свою открыл, то как узнать какие есть окна в своей программе ?

Andrey: Кодировки RU1251 хватает для русского, белорусского и украинского языков. А как сделать файл для прибалтийских языков ? Какая кодировка должна быть ? Это просто для себя понять как можно делать. А как интересно работают с казахским языком ? Или с языками Средней Азии ? Можно в МиниГуи работать с ними ?

SergKis: Andrey пишет А как сделать файл для прибалтийских языков ? Какая кодировка должна быть ? Для однобайтной версии 1. В Region ставим все для Латвии 2. Языки аналогично 3. в программе hmg ставим LVWIN (1257), где у тебя RUSSIAN но в целом фигово выходит, т.к. у многих Region Русский и вся hmg с лат. яз. разваливается надо исп. версию Unicode, пример работы с разными языками уже давал. Текстовые файлы, включая ini надо делать в Utf-8, желательно с BOM тогда все нормально и пофиг, что в Region

Andrey: SergKis пишет: Текстовые файлы, включая ini надо делать в Utf-8, желательно с BOM Текстовые файлы в Utf-8 знаю как делать. А что такое с BOM ?

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

Andrey: Если основной текст программы в RU1251, то языковой модуль для этой программы (отдельный prg) делаем его в кодировке utf-8: [pre2] IF cLang == "RU1251" xRet := { "Удалить последний фильтр столбца",; "Удалить ВСЕ фильтры по столбцам" } ELSEIF cLang == "UA1251" xRet := { "Видалити останній фільтр стовпця",; "Видалити ВСІ фільтри по стовпцях" } ELSEIF cLang == "KZWIN" xRet := {"Соңғы баған сүзгісін жою" ,; "БАРЛЫҚ сүзгілерді бағандар бойынша жою"} .... For i :=1 To Len(xRet) xRet := hb_Utf8ToStr(xRet , "RU1251") Next .... Return xRet[/pre2] И в основной программе размещаем эти текстовые константы. Так будет верно ?

SergKis: Andrey пишет Так будет верно ? Попробуй, это же не долго, у тебя все под рукой Возможно команды из текста prg utf8 убери в осн. модуль и правильно напиши[pre2] For i :=1 To Len(xRet) xRet := hb_Utf8ToStr(xRet , "RU1251") Next [/pre2] PS что за cdp будет стоять ?

Andrey: SergKis пишет: что за cdp будет стоять ? Да это сайт глюкнул. Писал так xRet [ nJ ] := hb_Utf8ToStr( xRet [ nJ ] , "RU1251")

SergKis: Andrey SergKis пишет:что за cdp будет стоять ? Ты переводишь все в RU1251, а какая cdp будет уставлена для работы в момент работы с текстом ?

Andrey: SergKis пишет: Ты переводишь все в RU1251, а какая cdp будет уставлена для работы в момент работы с текстом ? Так теrст проги установлен в 1251, значит все значения на форме будут в 1251. Это я под себя перевожу под 1251. А для других надо бы тогда по другому: [pre2]FUNCTION myLangeRes(..,cPrgCP) LOCAL xRet, cLang := hb_CdpSelect() ... xRet [ nJ ] := hb_Utf8ToStr( xRet [ nJ ] , cPrgCP) [/pre2]

Andrey: [pre2]REQUEST HB_CODEPAGE_UA1251, HB_CODEPAGE_UA866 // украинский язык REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 // русский язык REQUEST HB_LANG_BEWIN // белорусский язык[/pre2] А как работать в МиниГуи с кодовой страницей LANG_BEWIN ? В Харборе есть кодовая страница LANG_BEWIN ?



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