Comments 6
Мне кажется, статье не хватает пары вещей:
Первое и самое главное: примеры использования. На простых примерах возможности вашей системы станут гораздо понятнее, чем просто описание "можно вот это, а еще вот это". К тому же примеры подразумевают проход по всему процессу: от написания текста программы и файла описания строк к ней и до сборки и запуска тестового бинаря. Серия постепенно усложняющихся примеров отлично бы проиллюстрировала не только возможности, но и предполагаемый сценарий использования системы.
Ну и второе. Это, конечно, косметика, но хотелось бы более подробное сравнение с современными системами управления строковыми ресурсами. Чем ваша система лучше того же GNU gettext? А то сейчас статья выглядит так: "посмотрел, как реализовано в visual studio, впал в шок, написал своё. С тех пор на другие системы не смотрел".
Насчет примеров использования, да - я должен был это включить, но не включил. Исправляюсь:
//
// c++. Строка, идентифицируемая мнемоникой
//
PPLoadString(PPMSG_ERROR, PPERR_NMATCHBILLAMT, fmt_buf);
//
// c++. Строка, идентифицируемая символом
//
PPLoadString("appellation", temp_buf);
//
// Java (Android). Строка, идентифицируемая мнемоникой.
// Для Java мнемоники автоматически генерируются так же как и для C/C++.
//
String err_msg = app_ctx.GetString(ppstr2.PPSTR_ERROR, ppstr2.PPERR_STQ_POSTDOCUMENTFAULT);
//
// Java (Android). Строка, идентифицируемая символом
//
title_text = app_ctx.GetString("unmatchedmarks");
По поводу GNU gettext. Я долго смотрел на него и примерялся. Его популярность восхищает. Однако ж, его основное назначение - организация перевода на другие языки, а не управление текстовыми ресурсами. И еще - идентификация по тексту, примененному в исходно коде очень уж зыбкая.
Исправляюсь:
Ну не совсем. Хотелось бы увидеть полный пример работы с системой, а не только невнятную строку загрузки текста в некий буфер (что это за буфер, кстати? std::string? std::vector<char>? char[MAX_STRING_BUF]?).
Как составлять файл описаний, как его транслировать в бинарное представление, как он связывается с основной программой, как он в основной программе подгружается (если вообще подгружается), и т.п. Хотя бы для С++.
Однако ж, его основное назначение - организация перевода на другие языки, а не управление текстовыми ресурсами.
А как у вас организован перевод на другие языки? Об этом в статье нет никакой конкретики.
И кстати, а для чего вообще нужно "управление текстовыми ресурсами", если не для локализации?
И еще - идентификация по тексту, примененному в исходно коде очень уж зыбкая.
С одной стороны - да. С другой - если в исходном коде поменяли какой-то текст, то и в переводах его тоже, скорее всего, нужно менять.
Сначала хотел плавно написать несколько аргументов, но сегодня первый рабочий день и всё такое ...
Поэтому зайдём с козырей (и, да прости меня автор): я, конечно, понимаю, что Windows до сих пор занимает на десктопе +-67%. Но делать утилиту-компилятор нацеленную только на Windows! - по-моему, это какой-то "привет из нулевых". Не А[А[А]]-игра, а утилита! И сама эта утилита в виде .exe-файла прямо выложена в репозитории: типа пользуйтесь! Что, реально?
Даже при наличии исходников (может они и есть, но поискал по диагонали - не нашёл) вопрос использования не всегда однозначен. А так ...
И да, прошу прощения за эмоции.
С другой стороны, может лучше написать статью про пользование самим продуктом? Он хотя и виндозний, но это законченная штука - так что может и нормально будет.
Я, вероятно, не смог четко донести смысл текста. Дело не в Windows и не в самой утилитке. Я попытался предложить концепцию управления ресурсами строк (методы идентификации, подходы к переводу и т.д.).
Ссылка на репозиторий дана только в качестве пруфа.
Сам исходник не большой. Вот ссылка на него: https://github.com/papyrussolution/OpenPapyrus/blob/master/Src/PPLib/STRSTORE.CPP
Строковые ресурсы для больших систем