Вход на сайт
Резюме для программиста
89957 просмотров
Перейти к просмотру всей ветки
в ответ alex445 06.07.22 22:07
1. Все строки хранятся в одном файле .resx для каждой локали. В файле несколько тысяч записей.
Обычно все так и делают.
В файле несколько тысяч записей.
Это нормально.
2. Чтобы во всей этой мути разбираться, ключ для каждой записи представляет собой строку, составляемую из параметров с разделителем - типа такого
{area}_{context}_{name}.
Нотация ключа не имеет значения.
3. Для параметров area и context заведены специальные классы с возможными значениями - типа context бывает "menu", "exception", "dialog" и т.д. - до двух десятков. То же и для area.
Норм. У нас так сделано. Очень удобно:
public class ResourseIds { public class Menu { public class File { public const string Exit = "Menu_File_Exit"; } } }
4. Чтобы вытащить нужную переведённую строку, программист конструирует строку-монстрика из 3-5 параметров и использует её как ключ.
Если это необходимо, но почему бы и нет?
5. Формат ключа {area}_{context}_{name} не постоянный и не обязательный. Некоторые строки имеют ключ просто из одного параметра, некоторые из 2 или 4. Сами параметры могут быть тоже замудрённые - типа area может быть составной "name1.name2-name3".
Да ради бога. Это же просто строка :) Главное, чтобы идентификатор был уникальным :)
6. Чтобы парсить всё это безумие, заведён специальный класс с кучей перегруженных функций, отрабатывающих все эти форматы и варианты составных ключей. На всё про всё около 1000 строк кода. Плюс несколько сотен строк для хранения возможных вариантов параметров в виде текстовых констант. Плюс в разных проектах и классах ещё несколько перегруженных функций для вытаскивания локализованной строки из главного класса по вытаскиванию - до 4-5 вложенных вызовов.
Не понятно только, зачем все это парсить? :)
Итого до 2 тысяч строк кода, пяток классов, до пяти, если не больше, вложенных вызовов функций. И это только чтобы просто вытащить одну локализованную строку. А уж оттестировать всё это - ухх, юнит-тесты будешь месяц делать.
Если у тебя есть пистолет и колено, то вегда можно выстрелить себе в колено :)