为UWP应用程序加载不同语言的不同文本文件的最佳方法是什么?

本文关键字:最佳 方法 是什么 文件 语言 UWP 应用程序 加载 文本 | 更新日期: 2023-09-27 18:05:10

我有一个UWP应用程序,它有一组文本文件,一个用于我们支持的每种语言。我想根据系统设置的语言读取一个文本文件的内容。例如,假设文本文件名为MyTextFile.txt,我支持的两种语言是英语和法语,那么我的包中就会有以下两个文件:

fr-fr'MyTextFile.txt

en-us'MyTextFile.txt

如果系统设置为法语,我想加载并读取法语文本文件并显示其内容。我目前的解决方案只在我的开发机器上工作,当我将我的应用程序部署到另一台机器时,它只在操作系统是英语的情况下工作。如果我将操作系统设置为法语并安装我的应用程序,它不会加载文本文件。这就是我正在做的:

1)我的文本文件存储在[appname]' files [language]'MyTextFile.txt下2)我有一个加载文件的props文件,它包含如下内容:

<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文件中的字符串

感谢乔治

为UWP应用程序加载不同语言的不同文本文件的最佳方法是什么?

您不需要手动指定语言,只需正常读取文件。

// 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);

也许有一个更好的方法来加载这个文本文件在不同的语言?

建议使用应用程序资源将可本地化的内容与应用程序代码分开。资源使应用程序能够本地化为多种语言,针对各种设备dpi和形式因素进行定制,并针对特定类型的用户进行定制。

关于localization的更多信息,你可以参考全球化和本地化,这里是一个官方的应用程序资源和本地化的例子,在这个例子中,你可以看到,它被鼓励分离你的资源,如字符串和文件,从你的应用程序代码,所以你可以维护和修改你的资源独立