В проекте C #, над которым я сейчас работаю, мы написали вспомогательную функцию, которая работает следующим образом:
section.AddParagraph(I18n.Translate("Premise: {0}", currentReport.Tenant.Code));
section.AddParagraph(I18n.Translate("That's all");
Во время сборки скрипт просматривает все вызовы I18n.Translate, а также все элементы управления пользовательского интерфейса.и заполняет таблицу всеми английскими фразами.Это переводится.
Во время выполнения текст на английском языке ищется в словаре и заменяется переведенным текстом.Нечто подобное происходит с нашими ресурсами Winforms Dialog: они составлены на английском языке, а затем переведены с использованием того же словаря.
Самая большая сила этой схемы, также самая большая слабость: если вы используете одну и ту же строку в двух местах, она переводится одинаково.Это сокращает файл, который вы отправляете переводчику, что помогает снизить стоимость.Если вам когда-либо понадобится заставить другой перевод одного и того же английского слова, вам нужно обойти это.Пока у нас есть система (4 года или около того), у нас никогда не было необходимости в ней.Есть также преимущества: вы читаете текст пользовательского интерфейса на английском языке, встроенный в источник (поэтому не прячется за идентификатором, который вам нужно назвать), и если вы удаляете код, он автоматически удаляется и из переведенных ресурсов.