Мне нужно обновить приложение, чтобы оно было доступно на французском языке, используя предварительно переведенные слова, сохраненные в файле .resx, одним нажатием кнопки. - PullRequest
1 голос
/ 03 июня 2019

Мне даны два файла .resx, которые содержат все слова, которые мне понадобятся в английском и французском языках.В данный момент приложение доступно только на английском языке, и мне нужно создать кнопку, которая изменит содержимое меток, чтобы они указывали на французский .resx вместо английского и наоборот.Кнопка будет отображать английский, если французский язык является текущим, и Francais, если английский является текущим.

При том, как программа написана в настоящее время, язык жестко закодирован, так что метки смотрят только на английский .resx, ине текучие в зависимости от выбранного языка.Я новичок в этом виде программирования, и я в замешательстве.

<Label Margin="12,2.222,0,0" Content="{Resx ResxName=LegalServicesTimesheets.Labels, Key=ApplicationTitleDASH}"/>

''Both .resx files have words associated with the key ApplicationTitleDash
''The French .resx file is called Labels.fr-CA.resx

Как видите, настройки английского языка в настоящее время жестко запрограммированы, и мне нужно сделать так, чтобы файл .resx зависел от того, какойязык в настоящее время используется.

1 Ответ

0 голосов
/ 03 июня 2019

{Resx ...} - расширение разметки.Похоже, вы используете ResxExtension от Гранта Фрискена:

<TextBlock Text="{Resx ResxName=MyApp.TestWindow, Key=MyText}"/>

У вас нет ничего, что можно изменить в разметке XAML.Если вы хотите, вы можете указать атрибут Language и связать, скажем, какое-то свойство UICulture (объект CultureInfo) в вашей ViewModel:

<Window ResxExtension.DefaultResxName="WpfApp.MainWindow" Language="{UICulture}"> 

Но в противном случае способ .resx работает,он извлекает данные из любого файла ресурсов, который лучше всего соответствует Culture объекта ресурса, т. е. в вашем случае:

LegalServicesTimesheets.Culture = CultureInfo.GetCultureInfo("fr-CA")

Если вы установите для культуры ту культуру, у которой нет файла .resx, онадолжен вернуться к «нейтральному» содержимому .resx.Поскольку у вас do есть файл .fr-CA.resx, все ресурсы, извлеченные из LegalServicesTimeSheets, теперь будут извлечены из файла .fr-CA.resx.

В коде позади вы можете получить строки ресурсовad-hoc через ResourceManager, указав аргумент CultureInfo для метода GeteString:

foo = LegalServicesTimesheets.ResourceManager.GetString("Labels", CultureInfo.CurrentUICulture)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...