Резюме для программиста
1. Все строки хранятся в одном файле .resx для каждой локали. В файле несколько тысяч записей.Обычно все так и делают.
А я думал, обычно хранят папку Resources и в ней повторяют структуру папок проекта, в которые кладут уже небольшие файлы типа Strings.en-US.resx, в которых составной ключ не требуется (т.к. небольшие). Или в папки проекта кладут папку Locals и в ней Strings.en-US.resx. Но не всё в одну кучу.
Всё в одну кучу и классы-монстры по парсингу этой кучи может и имело бы смысл, если бы на протяжении всего проекта придерживались этой идеологии - всё в одной куче. Но в парсящем классе заметил такие ветки - если не находим в общей куче глобальных ресурсов, то ищем в локальным кучках, не находим в локальных, ищем в ещё более локальных. Т.е. помимо общей кучи есть и маленькие кучки, в которых тоже надо порыться. В результате ни одного плюса ни одной парадигмы (всё в куче или всё локально) не получается, зато все минусы ото всех собраны.
Ну и многоформатный ключ, раздувающий парсинг на многие ветки if-else-switch. Причём какого-то хрена там на каждом шагу пишется лог. С учётом кучи вложенных вызовов и огромного дерева парсинга ключа, одно доставание одной локализованной строки может добавить до 10 записей в лог. Кто потом всю эту мешанину разбирает? Я тоже раньше думал, что чем подробнее залогируешь, тем лучше. Но потом попробовал читать свои логи - ну нафиг. Чтобы читать подробные логи, нужны спецтулзы по парсингу подробных логов - иначе
задолбаешься. Но проходит время, тулзы теряются-забываются-не обновляются, а гигабайтные логи остаются.