为 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 应用程序由于调用了为不同线程编组的接口而崩溃?

如何从excel创建本地化资源文件?在 UWP 中

UWP 切换语言

如何检测 xamarin UWP 应用程序中标签元素的文本值更改?

如何为具有不同图形和媒体资产的不同发送方应用程序实现相同的自定义接收方应用程序?

白标 UWP 应用程序