Локализация (перевод) программ на Qt

qt_logo_2016-svg

Локализация — это адаптация программы к культуре какой-либо страны, в частности перевод пользовательского интерфейса.

В Qt есть инструменты для создания мультиязычной программы. Qt позволяет автоматически отобразить интерфейс программы на языке операционной системы, либо сделать так, чтобы пользователь мог выбрать язык интерфейса.

Далее представлена пошаговая инструкция локализации программы. С помощью инструкции достигается максимальная автоматизированность сборки и простота развертывания программы.

Читать далее Локализация (перевод) программ на Qt

MDK-ARM: замена десятичного разделителя

Чтобы локализовать представление чисел при программировании в среде MDK-ARM требуется выполнить несколько простых шагов:

  1. Скачать ассемблерный файл и добавить в свой проект.
  2. В настройках проекта на вкладке Asm в поле Include Paths указать каталог, в котором расположен файл rt_locale.s. По умолчанию этот файл расположен в «C:\Keil\ARM\ARMCC\include».

При этом в программе не требуется производить никаких настроек локали, например вызывать функцию setlocale, локаль будет жестко задана.

После этого функции (например printf) преобразующие число в строку и наоборот будут воспринимать запятую в качестве разделителя дробной и целой части.

Подробнее о реализации ассемблерного файла можно почитать в официальной документации на MDK-ARM. Стоит учесть, что в коде, приведенном в документации, есть недочет: отсутствует строчка экспортирующая функцию _get_lc_CATEGORY, в представленном здесь ассемблерном файле эта строчка: «EXPORT _get_lc_numeric». Без неё локализация не заработает.

Привожу код из ассемблерного файла.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Определение русского десятичного разделителя.
;
; Файл предназначен для программирования в среде Keil MDK-ARM.
;
; В настройках проекта на вкладке Asm в поле Include Paths
; требуется указать каталог, в котором расположен файл rt_locale.s.
; По умолчанию этот файл расположен в "C:\Keil\ARM\ARMCC\include".
;
; В программе не требуется вызывать функцию setlocale().

    GET rt_locale.s ; Подключить файл с макросами

    AREA locales, DATA, READONLY
    LC_NUMERIC_begin russian_numeric_locale, "russian"
    LC_NUMERIC_point ","     ; Десятичный разделитель
    LC_NUMERIC_thousands "." ; Разделитель групп цифр
    LC_NUMERIC_grouping "\3" ; Количество цифр в группе
    LC_NUMERIC_end
    AREA locale_func, CODE, READONLY
    EXPORT _get_lc_numeric
_get_lc_numeric FUNCTION
    LDR r0, =russian_numeric_locale_start
    BX lr
    ENDFUNC

    END ; Конец ассемблерного файла