Вот к чему пришел:
1. Избавляемся от ключей. Вместо ключа (типа MainPageHeaderText1) юзать сам текст (ака "My Cool Service"). Ключи -- лишняя сущность. Они допустимы только когда текста реально много.
2. Одного текста не достаточно -- нужна еще и
категория, иначе сложно переводить (не ясно к чему относится). Т.е. в итоге присвоение строке локализованного значения выглядит примерно так:
headerText = Translate(nameof(Page1), "My Cool Service");
При желании
вместо "My Cool Service" можно указать и ключ, если текст очень длинный.
3. Список на локализацию должен формироваться автоматически. Т.е. открыли страницу а перевода для фразы "My Cool Service" еще нет. По умолчанию отдается то что в коде и сразу же создается запись в таблице переводов (с пустым переводом, конечно). Т.е. чтобы собрать полный список на перевод -- вам всего лишь нужно пройтись по всем возможным формам приложения (а без этого и не протестите).
Т.е. вручную не нужно вносить "My Cool Service" в базу -- оно там само появится, как только выполнится Translate(nameof(Page1), "My Cool Service"). А далее можете отдавать переводчику все что есть в базе. Если там появилось не все -- значит тестеры открыли не все страницы и/или протестировали не все возможные ситуации.
Критика?