为 UWP 应用加载不同语言的不同文本文件的最佳方式是啥?
Posted
技术标签:
【中文标题】为 UWP 应用加载不同语言的不同文本文件的最佳方式是啥?【英文标题】:What is the best way to load a different text file in a different languages for a UWP app?为 UWP 应用加载不同语言的不同文本文件的最佳方式是什么? 【发布时间】:2017-01-09 23:59:27 【问题描述】:我有一个 UWP 应用,其中包含一组文本文件,每个文件对应我们支持的每种语言。我想根据系统设置的语言读取一个文本文件的内容。例如,假设文本文件名为 MyTextFile.txt,我支持的 2 种语言是英语和法语,我的包中有以下 2 个文件:
fr-fr\MyTextFile.txt
en-us\MyTextFile.txt
如果系统设置为法语,我想加载和读取法语文本文件并显示其内容。我当前的解决方案仅适用于我的开发机器,当我将我的应用程序部署到另一台机器时,它仅适用于操作系统是英文的。如果我将操作系统设置为法语并安装我的应用程序,它不会加载文本文件。这就是我正在做的事情:
1) 我的文本文件存储在 [appname]\Files[language]\MyTextFile.txt 2)我有一个加载文件的道具文件,它包含:
<PropertyGroup>
<FileDir>$(SolutionDir)App\[appname]\Files\</EulaDir>
</PropertyGroup>
<ItemGroup>
<Content Include="$(FileDir)\en-us\MyTextFile.txt">
<Link>en-us\MyTextFile.txt</Link>
</Content>
<Content Include="$(FileDir)\fr-fr\MyTextFile.txt">
<Link>fr-fr\MyTextFile.txt</Link>
</Content>
</ItemGroup>
</Project>
3) 我的代码(英文版)加载文件如下:
var rc = ResourceManager.Current.MainResourceMap.GetSubtree("Files").GetValue("MyTextFile.txt", ResourceContext.GetForCurrentView());
var lang = rc.Qualifiers.FirstOrDefault(q => q.QualifierName == "Language").QualifierValue;
// Get the file
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///" + lang + "/" + "MyTextFile.txt"));
// Read the contents of the file
UI.Text = await FileIO.ReadTextAsync(file, UnicodeEncoding.Utf8);
也许有更好的方法来加载这个不同语言的文本文件?它必须是文本文件,因为它包含一些合法文本,并且不能是 resw 文件中的字符串
谢谢
乔治
【问题讨论】:
【参考方案1】:您无需手动指定语言,只需照常读取文件即可。
// Get the file
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///MyTextFile.txt"));
// Read the contents of the file
UI.Text = await FileIO.ReadTextAsync(file, UnicodeEncoding.Utf8);
【讨论】:
【参考方案2】:也许有更好的方法来以不同的语言加载此文本文件?
建议使用应用程序资源将可本地化的内容与应用程序代码分开。资源使应用能够本地化为多种语言,针对各种设备 DPI 和外形尺寸进行定制,并针对特定类型的用户进行定制。
关于你的应用程序的localization
的更多信息,你可以参考Globalization and localization,这里是官方的Application resources and localization sample,在这个示例中你可以看到鼓励将你的资源分开,例如字符串和文件,来自您的应用代码,因此您可以独立维护和更改您的资源。
【讨论】:
就我而言,我需要一个单独的文件,由我们的法律团队单独进行本地化。它们不像其他字符串那样被本地化。上面的解决方案效果很好以上是关于为 UWP 应用加载不同语言的不同文本文件的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Windows 10 UWP 应用程序由于调用了为不同线程编组的接口而崩溃?
如何检测 xamarin UWP 应用程序中标签元素的文本值更改?