【问题标题】: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 文件中的字符串

谢谢

乔治

【问题讨论】:

    标签: c# resources uwp intl


    【解决方案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,在这个示例中你可以看到鼓励将你的资源分开,例如字符串和文件,来自您的应用代码,因此您可以独立维护和更改您的资源。

      【讨论】:

      • 就我而言,我需要一个单独的文件,由我们的法律团队单独进行本地化。它们不像其他字符串那样被本地化。上面的解决方案效果很好
      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 2016-04-05
      • 2012-06-30
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 2011-11-19
      相关资源
      最近更新 更多