Резюме для программиста
Как относитесь к такой организации хранения локализованных строк?
1. Все строки хранятся в одном файле .resx для каждой локали. В файле несколько тысяч записей.
2. Чтобы во всей этой мути разбираться, ключ для каждой записи представляет собой строку, составляемую из параметров с разделителем - типа такого
{area}_{context}_{name}.
3. Для параметров area и context заведены специальные классы с возможными значениями - типа context бывает "menu", "exception", "dialog" и т.д. - до двух десятков. То же и для area.
4. Чтобы вытащить нужную переведённую строку, программист конструирует строку-монстрика из 3-5 параметров и использует её как ключ.
5. Формат ключа {area}_{context}_{name} не постоянный и не обязательный. Некоторые строки имеют ключ просто из одного параметра, некоторые из 2 или 4. Сами параметры могут быть тоже замудрённые - типа area может быть составной "name1.name2-name3".
6. Чтобы парсить всё это безумие, заведён специальный класс с кучей перегруженных функций, отрабатывающих все эти форматы и варианты составных ключей. На всё про всё около 1000 строк кода. Плюс несколько сотен строк для хранения возможных вариантов параметров в виде текстовых констант. Плюс в разных проектах и классах ещё несколько перегруженных функций для вытаскивания локализованной строки из главного класса по вытаскиванию - до 4-5 вложенных вызовов. Типа такого:
GetTranslationExtension1(string area, ...) { GetTranslationExtension2(string area, ...) { GetTranslationExtension3(string area, ...) { GetTranslation(string area, ...) { ... return translation; } } } }
Итого до 2 тысяч строк кода, пяток классов, до пяти, если не больше, вложенных вызовов функций. И это только чтобы просто вытащить одну локализованную строку. А уж оттестировать всё это - ухх, юнит-тесты будешь месяц делать.