Как локализовать App_GlobalResources в ASP.NET? - PullRequest
4 голосов
/ 09 февраля 2012

У меня есть веб-сайт ASP.NET с некоторыми "глобальными" ресурсами:

\App_GlobalResources
    ContosoFrobberResource.resx

Это дополнение к "локальным" ресурсам, связанным с каждым файлом "aspx":

\App_LocalResources
    Materials.aspx.resx
    Notes.aspx.resx
    OrderHistory.aspx.resx

Теперь я хочу локализовать сайт в другой локали (например, en). я создаю resx файл для каждого "локального" ресурса:

\App_LocalResources
    Materials.aspx.en.resx
    Materials.aspx.en-us.resx
    Materials.aspx.en-uk.resx
    Materials.aspx.en-sg.resx
    Notes.aspx.en.resx
    Notes.aspx.en-us.resx
    Notes.aspx.en-uk.resx
    Notes.aspx.en-sg.resx
    OrderHistory.aspx.en.resx
    OrderHistory.aspx.en-us.resx
    OrderHistory.aspx.en-uk.resx
    OrderHistory.aspx.en-sg.resx

И все это прекрасно работает; на сайте отображаются адаптированные версии английского языка для

  • США (en-US)
  • Великобритания (en-UK)
  • Сингапур (en-SG)

, а также запасной вариант для универсального

  • английский (en)

Проблема возникает, когда я пытаюсь локализовать ресурсы в App_GlobalResources:

\App_GlobalResources
    ContosoFrobberResource.resx
    ContosoFrobberResource.en-us.resx

Сайт вылетает с ошибкой:

CS0101: Пространство имен «Ресурсы» уже содержит определение для «ContosoFrobberResource»

Как локализовать App_GlobalResources на веб-сайте ASP.NET?

Бонусная болтовня

ContosoFrobberResource.resx

 <?xml version="1.0" encoding="utf-8"?>
 <root>
    <data name="ProjectDueDate" xml:space="preserve">
       <value>Proposal Due Date</value>
    </data>
 </root>

ContosoFrobberResource.qps.resx

 <?xml version="1.0" encoding="utf-8"?>
 <root>
    <data name="ProjectDueDate" xml:space="preserve">
       <value>Prȍposẳl Duɇ Dãtē</value>
    </data>
 </root>

1 Ответ

4 голосов
/ 09 февраля 2012

Найден ответ.

ASP.NET неправильно откатывается на родительский язык.Если он не может распознать файл как «запасной» языковой стандарт, он не может его проанализировать и выдает ошибочную ошибку.

например,

ContosoGrobber.resx
ContosoGrobber.en-us.resx

работает нормально.Но:

ContosoGrobber.resx
ContosoGrobber.en.resx

завершается ошибкой, когда часть "en" строки локали не распознается.Исправление - изменить его на полное имя локали и избежать ошибочного кода возврата.Например:

ContosoGrobber.qps.resx

должно стать:

ContosoGrobber.qps-ploc.resx

Другими словами: если браузер запрашивает локаль qps-ploc, в идеале , вы можете использовать

ContosoGrobber.qps.resx

и местный qps-ploc откатится до qps.Но из-за ошибки в ASP.NET это не откат правильно.Это означает, что вы не можете позволить отступить;вы должны обработать все возможные локали:

ContosoGrobber.qps-ploc.resx
ContosoGrobber.qps-plocm.resx
ContosoGrobber.qps-ploca.resx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...