我的应用程序必须是多语言的,所以我创建了一些资源文件,其中包含文本,例如:
texts.resx
texts.en.resx
texts.fr.resx
到目前为止一切正常。
但是有些文本是使用外部工具生成的。我最终得到一个普通的文本文件(* .txt),它保存着这样的字符串:
key|language1|language2|language3
所以我需要做的是在开始时读取该文件并生成相应的资源文件。
到目前为止我做了什么:
使用StreamReader
阅读文件并使用键和语言填充列表
line = reader.ReadLine();
char[] delimiterChars = { '|' };
string[] parts = line.Split(delimiterChars);
keyList.Add(parts[0]);
language1List.Add(parts[1]);
language2List.Add(parts[2]);
生成资源文件:
using (ResXResourceWriter resx = new ResXResourceWriter("test.resx"))
{
for (int i = 0; i < keyList.Count; i++)
{
resx.AddResource(keyList[i], language1List[i]);
}
}
using (ResXResourceWriter resx = new ResXResourceWriter("test.en.resx"))
{
for (int i = 0; i < keyList.Count; i++)
{
resx.AddResource(keyList[i], language2List[i]);
}
}
从资源文件中获取字符串:
using (ResXResourceSet resxSet = new ResXResourceSet("test.resx"))
{
Text = resxSet.GetString(keyList[0]);
}
一切正常。
问题
("text.en.resx")
时,它显然有效。答案 0 :(得分:0)
我认为你并不了解本地化的过程......
答案1: 当您在控制面板中更改计算机上的语言时,程序将尝试在您的bin中查找具有所选语言名称的文件夹(&#34; en&#34;为英语),该文件夹应包含.satellite.dll文件(这些文件是选择正确的语言时将加载的文件)。它们是使用英语资源字符串生成的。
答案2:
public class LocalizedStrings
{
private static MyProjResources resource = new MyProjResources();
public MyProjResources Resources
{
get
{
return resource;
}
}
}
你可以像访问
一样访问它<UserControl.Resources>
<localization:LocalizedStrings x:Key="LocalizedStrings" />
</UserControl.Resources>
<Button Content="{Binding Path=Resources.MyProj_EXPORT_PDF, Source={StaticResource LocalizedStrings}}" Height="Auto" Width="200" "></Button>
你应该考虑在这个问题上多读一点。
答案 1 :(得分:0)
我想我得到了一个解决方案: 生成资源文件:
IResourceWriter writer = new ResourceWriter("test.resx");
for (int i = 0; i < keyList.Count; i++)
{
writer.AddResource(keyList[i], language1List[i]);
}
IResourceWriter writer = new ResourceWriter("test.en.resx");
for (int i = 0; i < keyList.Count; i++)
{
writer.AddResource(keyList[i], language2List[i]);
}
这会创建*.resources
而不是*.resx
个文件。他们可以这样读:
ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("test", location, null);
Text = rm.GetString("foo");
取决于设置的文化,ResourceManager
读取正确的文件并获取正确的文本。