Вот что я делаю (не обязательно лучший способ, но пока он хорошо работает) для добавления программных строк в дополнение к использованию чувствительных к языку строк непосредственно в формах:
Помимо добавления смешного количества папок в проект для группировки по форме, я не смог найти чистого решения, кроме как хранить файлы .resx в их собственной папке ресурсов. Обычно у меня будет что-то вроде:
Ресурсы \ Язык
Ресурсы \ Xml
Ресурсы \ Images
и т.д.
Я обнаружил, что использование одного файла .resx для каждой формы - это лучший способ, потому что вы никогда не знаете, когда вам понадобится добавить еще одну строку. Я также создаю Common.resx для таких строк, как «Сохранить», «Загрузить» и т. Д., Которые применимы ко всему приложению и будут использоваться в нескольких местах. С моделью «один .resx-per-form» вы должны строго соблюдать только использование строк в этой форме, что, вероятно, будет означать повторение нескольких строк по мере роста вашего приложения. Но это гораздо проще поддерживать, чем иметь паутину ссылок между формами и файлами .resx.
Для пользовательских элементов управления я помещаю файлы .resx вместе с исходными файлами, поскольку они обычно имеют свою собственную папку, и в любом случае строки не будут использоваться вне этого пользовательского элемента управления. (Примечание: это также означает, что пользовательские элементы управления НЕ должны использовать строки вне своего собственного файла .resx.) Это также позволит вам при необходимости легко извлечь целый пользовательский элемент управления в отдельную сборку.
Для пользовательских элементов управления, как правило, они относятся к конкретному приложению, так что не так уж плохо привязывать к ним общеязыковой материал, но, конечно, я буду использовать отдельный .resx для строк, специфичных для пользовательского элемента управления, и буду следовать тем же структура папок как с пользовательскими элементами управления.