这可能是一个非常简单的问题,所以我道歉。
我的问题是我想使用C#构建一个多语言WPF
应用程序,但我不知道如何使我的不同Page
元素继承使我的MainWindow相同的方法翻译成不同的语言。该应用已完成,我只是将其翻译为英语(我的母语是西班牙语)。
我正在使用Resource files
进行翻译。
语言翻译代码:
private void Languages_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//This is the combobox in which you select the language to display the app in
Set_Language();
}
//This is the method to invoke the Resource Manager and all the stuff from the resource file.
private void Set_Language()
{
if (!boolInit)
{
strLanguage = "LeitProjekteV2._0.Languages." + ((ComboBoxItem)LanguageSel.SelectedItem).Name.ToString();
ResourceManager LocRm = new ResourceManager(strLanguage, typeof(MainWindow).Assembly);
//Menu buttons
lblMenu.Content = LocRm.GetString("strMainMenu"); //The names inside the "" are the names of the resource in the Resource file which, depending on the language selected(Spanish, English and German)
//Change the text of whatever I choose; in this case, a Label named 'lblMenu'
MapButt.Content = LocRm.GetString("strMapButt");
BuscButt.Content = LocRm.GetString("strBusButt");
AgeButt.Content = LocRm.GetString("strAgeButt");
ComButt.Content = LocRm.GetString("strComButt");
InfButt.Content = LocRm.GetString("strInfButt");
LoginButt.Header = LocRm.GetString("strLoginButt");
RegisterButt.Header = LocRm.GetString("strRegisterButt");
ContacButt.Header = LocRm.GetString("strContacButt");
MasButt.Header = LocRm.GetString("strMoreButt");
//Here go the names of everything the Pages contain that I want to translate, just like above
//Have no idea how to inherit this method to all the pages
}
}
现在,我在同一个pages
中嵌入了多个MainWindow.xaml
,以便您点击button
"地图",Frame
更改它& #39; s内容为名为Map.xaml的Page
,依此类推其他按钮。
但是如何让那些Pages
也翻译?
由于Set_Language()方法采用Combobox
的字符串值来选择正确的Resource File
,因此我不想为每个Page
创建一个组合框我有,虽然这会消除我的问题。
有任何帮助吗?对于可怕的询问方式感到抱歉,我仍然在这里得到提示。
感谢。
答案 0 :(得分:0)
使用以下内容:
var wnd = Window.GetWindow(this); //get current window
将其投射到您的窗口类并将您的语言公开为公共属性
使用您的页面通过查找当前窗口获取属性
您可以创建一个执行上述操作的父页面类,并为您的所有页面继承它,这样您就不会重复代码
答案 1 :(得分:0)
我可以看到您遇到的困难是,您无法找到一种方法在主窗口和框架中托管的页面中共享组合框。
您可以设置可从整个应用程序访问的全局变量,在应用程序设置中是个好地方。然后,当您使用Combobox进行选择时,只需将所选值更新为该变量。
然后在将每个页面的Set_Language()
方法加载到Frame中时调用它们。在每个页面的Set_Language()
方法中,您可以查询已存储在应用程序设置中的变量的设置。
如果您想快速解决问题,创建一个静态类来保存所选语言也行。
static class UserSelections
{
public static string Language { get; set; }
}