PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » CodeLocalization


CodeLocalization

Сообщений 1 страница 11 из 11

1

CodeLocalization
Инструмент IDE для локализации программы

Скачать
ссылка на код на офсайте.

https://i.imgur.com/MTZpeNh.png

Ищет строки в кавычках используя родную SyntaxHighlighting.dll, а значит точно определяет строки, проверяет совпадают ли строки в верхнем и нижнем регистре чтобы определить что это буква, а не какой либо символ/знак, и кроме этого дополнительная функция настраиваемая под каждую страну (нет желания пока думать можно ли задавать диапазон внешне) для определения родного языка требующего перевод. Результаты выводятся в окно программы, скопировать в переводчик, перевести, вставить обратно, нажать "выполнить" и в буфер обмена получить готовый код.
Нужно ли делать два окна? Это было бы понятно естественным способом в отличии от одного окна и вопросом что делать дальше не читая справку.

Отредактировано AZJIO (28.02.2024 23:47:15)

0

2

Просто перевести фразы — недостаточно.
Учитывайте, что вместе с локализацией неприятным сюрпризом идут в нагрузку размеры окошек.
Например, текст на английском языке будет короче, чем на русском. Текст на русском может не влезть на кнопку. Всегда нужно предусматривать размеры кнопок, чтобы английский интерфейс не выглядел гигантским, и в русском интерфейсе всё не слеплялось в кашу.

0

3

Замабувараев
Да всё это известно. Уж сколько переводил и сам чужие программы и несколько десятков своих программ ещё на AutoIt3, и каждую версию с изменённым фейсом и функционалом. Из-за этого же и пытаюсь упростить. Выкладываешь на русскоязычном форуме, мало отзывов, а там дополнительные спасибы и предложения. Но при этом не хочется делать большие телодвижения. Ещё строка бывает прерывается на 2 части и кто-то использует строковую переменную %s чтобы подменить в локализации число, которое в разных языках имеет разную позицию и кусками перевод фразы не сделаешь.
Я тут надеялся мне под линукс адаптируют SyntaxHighlighting.so, но что-то пошло не так, пытаюсь собственный анализатор сделать.

0

4

Замабувараев написал(а):

Учитывайте, что вместе с локализацией неприятным сюрпризом идут в нагрузку размеры окошек.

Чтобы этого не было диалоги нужно использовать.

Код:
#Dialog = 0
#Xml = 0

XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
       "  <panel>" +
       "    <tab text='First tab'>" +
       "      <vbox expand='item:2'>" +
       "        <hbox>" +
       "          <button text='button 1'/>" +
       "          <checkbox text='checkbox 1'/>" +
       "          <button text='button 2'/>" +
       "        </hbox>" +
       "        <editor text='content' height='150'/>" +
       "      </vbox>" +
       "    </tab>" +
       "    <tab text='Second tab'>" +
       "    </tab>" +
       "  </panel>" +
       "</window>"

If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
  
  If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow 
    
  Else  
    Debug "Dialog error: " + DialogError(#Dialog)
  EndIf
Else
  Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf

Размер окна и содержимого подстраивается под текст.

Код:
#Dialog = 0
#Xml = 0

XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
       "  <panel>" +
       "    <tab text='First tab'>" +
       "      <vbox expand='item:2'>" +
       "        <hbox>" +
       "          <button text='Кнопка с текстом на русском'/>" +
       "          <checkbox text='checkbox 1'/>" +
       "          <button text='button 2'/>" +
       "        </hbox>" +
       "        <editor text='content' height='150'/>" +
       "      </vbox>" +
       "    </tab>" +
       "    <tab text='Second tab'>" +
       "    </tab>" +
       "  </panel>" +
       "</window>"

If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
  
  If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow 
    
  Else  
    Debug "Dialog error: " + DialogError(#Dialog)
  EndIf
Else
  Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf

0

5

в GTK3 такое поведение по умолчанию, из-за этого мне не нравится, кнопки приходится делать заранее огромными, чтобы фейс в обоих системах смотрелся нормально. При этом они почему то думают что над и под шрифтом должны быть отступы чуть ли не на высоту шрифта, ну и справа слева, то есть даже пространство расходуется не рационально. Для тех у кого большой шрифт или другая причина невмещения есть вариант поддержка процентного изменения размера элементов окна, просто растягивай до тех пор пока всё вместится.
Например шрифт высотой 12 пиксел и я рассчитываю на что над шрифтом линия кнопки проходит на 2-3 пикселя выше заглавной буквы и снизу на 2-3 пиксела, по итогу получаю сверху 12 пикселов и снизу 12 пикселов. Там высота кнопок минимальная 30, в то время как в Windows помню в AutoIt3 лейблы делал 20, кнопки 20 - слишком плотно если надо где-то приткнуть, в среднем 22-25 и главную кнопку 28. В Linux 30-35 (при одинаковом размере шрифта 11-12). В самом шрифте тоже где-то прописывается белое пространство, вот если сделать Arial и Segoe в проводнике, то при одинаковом визуальном размере шрифта у Segoe будет более разрежённый пункты в проводнике из-за чего я меняю на шрифт Arial, чтобы пункты были плотнее.

0

6

Обновление
Добавлено 2 окна для более интуитивного восприятия программы (смотрите скриншот выше).
Добавлена кнопка "Переоткрыть файл" и флажок в настройках "Родной язык".
Если в окна редактирования кидать txt-файл, то это воспринимается ранее заготовленный перевод, иначе (pb и прочие) открывает как исходник для анализа и перевода.

И ещё несколько мелочей:
1. убрал сообщение при запуске без параметров
2. если не найдены строки то путь остаётся, не очищается, так как флаг "Родной язык" мог выдать нулевой результат и файл ранее был уже потерян. Теперь жмём "переоткрыть файл" и анализ с новыми параметрами.
3. Карта очищается при переоткрытии файла. Ранее при установки галки "Родной язык" так как карта не очищена, то те же англ. строки попадали в результат, теперь нет, так как карта очищается.

Возможный план
Наверно убрать кнопку-галку "Перечитать список", это должно быть само собой разумеющееся.
Возможно сохранять в ini-файл размеры окна, позицию сплитера, состояние галок в настройках.

Ещё обновление
Добавлен универсальный вариант с поддержкой указания диапазона и/или перечисления символов для захватываемых строк (файлы с приставкой Uni).
Добавлена папка "Templates" содержащая примеры разных способов встраивания языков перевода, в том числе кроссплатформенные и с внешними файлами.

Отредактировано AZJIO (29.02.2024 06:09:59)

0

7

Размер окна и содержимого подстраивается под текст.

В итоге будем иметь кнопки OK и Cancel разных размеров?

0

8

Замабувараев написал(а):

В итоге будем иметь кнопки OK и Cancel разных размеров?

Зависит от настроек.
В таком варианте да

Код:
XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
       "  <hbox>" +
       "    <button text='OK'/>" +
       "    <button text='Cancel'/>" +
       "  </hbox>" +
       "</window>"

В таком, нет. Размер кнопок одинаковый.

Код:
XML$ = "<window id='#PB_Any' name='test' text='test' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
       "  <hbox expand='equal'>" +
       "    <button text='OK'/>" +
       "    <button text='Cancel'/>" +
       "  </hbox>" +
       "</window>"

expand    = yes           - Увеличивать элементы, до заполнения пространства (по умолчанию).
                no            - Не расширять, до заполнения пространства.
                equal         - Принудительно уровнять размеры всех элементов.
                item:<number> - Расширить только один элемент при наличии свободного места.

0

9

Обновил.
Путь к dll теперь просматривается в двух каталогах и рядом с исполняемым и предлагается открыть, если не найдено, причём с поиском функции, чтобы битность совпала и не оказалась левой либой.

0

10

Я добавил два исходника с собственным анализатором строк, смотреть в архиве с суффиксом "Enum". Поддерживаются строки, начинающиеся с тильды (~).
Можно попробовать в Linux, поскольку не требуется dll, но я ещё не пробовал, хотя всё подготовил к этому (иконки).

Дался не легко. Когда казалось уже всё готово раз 10 исправлял. Во первых в любом из Case надо кешировать символ иначе он не попадает в результат, во вторых экранирование кавычек может быть так \\" т.е. в данном случае кавычка не экранируется, а экранируется сам же слеш, получается четные и нечётные число слешев меняют поведение. И я сначала не хотел включать кавычки в результат, так как переводить легче, но потом понял что как я буду разруливать с тильдой. Потом пустые строки "" давали сбой пришлось ввести подсчёт символов (переменная len2). Сделал несколько сложных примеров с тильдами, экранированиями,  символ комментария в строке, вроде стало идеально, выдаёт тоже что и с использованием "SyntaxHighlighting.dll".

Отредактировано AZJIO (07.03.2024 10:34:49)

0

11

Обновил.
Добавлено сохранение последовательности взятия строк
Добавлен код локализации Linux

Остальные улучшения в основном связаны с кодом:
Карту сделал локальной, так как она только для удаления дубликатов.
Массив пересоздаю заново в функции, без этого ловил разные ошибки: при отсутствии строк размер 0 и удвоение не приводило к увеличению массива и ошибка индекса. Также были странные ошибки при перезаписи старого массива, поэтому решил сбрасывать его.

0

Похожие темы


Вы здесь » PureBasic - форум » PureBasic для Windows » CodeLocalization