Я хочу локализовать программу, которую я уже написал. Она довольно большая (почти 50 тысяч строк), и в идеале мне нужна система, которая позволяет мне (программисту) выполнять наименьший объем работы и без серьезных изменений в программе - если можно вообще никак.
Я посмотрел на gettext(), и он мне очень понравился, но мне непонятно, как он будет переводить такие строки:
const char *Colors[] = {
{ "Red" },
{ "Blue" },
{ "Yellow" },
....
};
которые ОЧЕНЬ часто встречаются в моей программе. Здесь замена "Red" на gettext("Red") явно не сработает.
Поэтому я подумал, что сделаю что-то вроде OutputFunction(gettext(Colors[Id])), но тогда как я могу получить список строк для локализации? Я сомневаюсь, что какая-либо программа достаточно умна, чтобы иметь возможность статически получить «Красный», «Синий», «Желтый» из этого списка локализации.
Поскольку это в основном сервер, нет необходимости в возможности изменять язык без перекомпиляции (я могу скомпилировать его для любого поддерживаемого языка без каких-либо серьезных проблем или раздражения), я подумал о constexpr C++0x, который был бы идеальным! Это будет работать в массивах и т. Д., И я легко получу список строк для локализации во время компиляции. Жаль, что ни один компилятор еще не реализовал это.
Изменение всех строк на идентификатор не вариант, поскольку это потребовало бы огромного количества работы с моей стороны, и особенно создание нового идентификатора для каждой новой строки было бы чертовски раздражающим. То же самое относится к преобразованию всех массивов, подобных приведенному выше, во что-то еще.
Итак, есть идеи? :/
constexpr
был доступен, я сомневаюсь, что это помогло бы вам.constexpr
работает только в том случае, если сама функция может быть оценена во время компиляции, поэтому, если ваша измененнаяgettext
основана на открытии и чтении файлов локализации, вы все равно не сможете сделать ееconstexpr
(поскольку открытие и чтение файлов не может быть выполнено в время компиляции). Учитывая, что большинство таких систем основано на этом, я сомневаюсь, чтоconstexpr
действительно будет настолько полезным. - person GRB   schedule 14.09.2009