首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较Xamarin.Android CPL定位技术(.xml .po .mo .resx .xlf)

比较Xamarin.Android CPL定位技术(.xml .po .mo .resx .xlf)
EN

Stack Overflow用户
提问于 2017-07-24 18:46:15
回答 2查看 318关注 0票数 0

我继承了一个Xamarin跨平台项目(仅限于Android),该项目有一个“strings.xml”文件,其中包含一些按钮名。

需要找到一种方法来轻松地添加更多的语言,并将代码-字符串转换为可翻译的 to (>300+),而不仅仅是组件-文本。

到目前为止,我已经尝试过许多,但是没有任何事情像预期的那样起作用:*

(大多数示例和帮助只适用于Xamarin.Forms。)

1.)安装了ResX管理器

  • 它没有识别我的XML文件。
  • 手动创建.resx文件,但这些文件与现有xml-转换无关。
  • 无法从我在管理器窗口插入的C#代码中取回这些文本

2.)创建了第二个strings.xml >>放在值中-hu文件夹,>>复制了XML内容,>>翻译在XML中。

  • 它只适用于放置在活动中的IDE中的按钮。
  • 不能使用GetText获取文本(.,.)从我的C#代码中,因为它需要一个(int)...I不知道如何生成和与我自己的常量配对
  • Resources.Strings...也不会弹出我自己的任何字符串
  • 每当我试图在IDE中添加一个新元素时,我必须逐个搜索并将新行复制到每个XML中。
  • 他们没有像ResX那样的“翻译窗口”
  • 不能将字符串分组在XML文件中。

3.)安装了多语言App 4.0

  • 似乎只是与.resx不同的文件格式,但同样的问题。
  • 抱怨没有连接到Azure
  • 提供给我一个“新英语”的翻译,从我原来的英语XML。
  • 无法添加新行等。

4.)已安装的Nuget>GetText + POEdit

  • 乍一看,这似乎是一个完美的解决方案,但是
  • PoEdit在我的.cs文件中只找到了4个字符串 (首选项的I/O字符串使用GetText()方法从config.xml中读取)
  • 无法导入string.xml文件翻译为3.lang。
  • 不理解.po > .mo转换概念
  • 安装了nuGet GetText >,但是VS内部没有出现新的子菜单。

5.)升级到VS2017

6.)在一个地方论坛上被问到,但没有人回答。

7.)搜索了大约100个主题在这里>> ..。它们大多是关于.但这对机器人来说似乎是无效的。

*根据expected,我想象过有一个简单的向导,在这里我可以:

  • 遍历我的*.cs文件中的每个字符串,其中我可以给出一个常量的名称,并将“真正退出”>转换为:_tr(Res.Main.really_exit)
  • 或标记以跳过
  • 应该有一个易于翻译的管理器(如ResX),或者添加新的行!
  • 组件文本和代码字符串都包含在一个(/语言?)文件
  • 可能按活动/逻辑对字符串进行分组。(这样译者就可以看到什么是什么) ..。但是,似乎没有任何东西能够轻松地处理文件和.cs文件字符串。

所以..。现在我完全糊涂了。我花了整整一周的时间在混乱中看到某种“秩序”,但却找不到一篇恰当的文章来解释,人们应该用什么方法轻松地完成的机器人翻译,为什么呢?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-07-27 09:20:08

我同意您的第二种方法,因为它使用了Android内置的本地化系统。使用它的一个好处是,如果找不到一种语言或一种语言的键,那么它已经包含了一个后备解决方案。

您可以在布局文件中使用它:

代码语言:javascript
复制
<Button
    android:text="@string/LogOn_Login"

或内部代码:

代码语言:javascript
复制
var progressDialog = new ProgressDialog(this);
progressDialog.Indeterminate = true;
progressDialog.SetCancelable(false);

progressDialog.SetMessage(GetString(Resource.String.LogOn_ProgressMessage));

但是你需要知道一个活动和一个片段之间的区别。在一个活动中,只需调用GetString()即可。这需要一个从Resource.String.YOUR_KEY获得的int。但是在一个片段中,你必须给出上下文。调用更改为Activity.GetString()。

新语言或字符串可以很容易地添加。我通常先在值-文件夹中向strings.xml添加新的字符串。这样我就能确定我已经准备好撤退了。新字符串具有以下语义:

代码语言:javascript
复制
<string name="KEY">VALUE</string>

充满了真实数据:

代码语言:javascript
复制
<string name="LogOn_ProgressMessage">Authenticating...</string>

保存strings.xml文件后,重新构建项目以确保Resource.designer.cs被更新是很好的。有时,我会看到新添加的键在Resource.Strings无法访问的情况下的行为。

在编辑strings.xml时,我和您一样认为没有“翻译器窗口”,您必须将每个新键复制到所有受支持的语言中。为了克服这个问题,我们构建了一个工具来创建所有这些文件,以便在每次构建时使用。通过这种方式,我们支持一个拥有超过21种语言的大型应用程序。

票数 0
EN

Stack Overflow用户

发布于 2017-07-25 07:46:56

有了Xamarin,我就沿着.Resx文件路线走下去。string.xml文件是安卓的解决方案,不能很好地适应.NET世界。

这里很好地解释了如何本地化您的代码:

https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/

使用Reshaper,您可以从代码中提取所有字符串:https://www.jetbrains.com/resharper/features/internationalization.html

是的,您必须转换XML文件。它们的格式是什么?您可能可以使用此工具:

http://converter.webtranslateit.com/

要在库中使用.NET资源文件,您必须先将资源添加到项目中,然后按照以下方式配置它们:

现在您可以使用它们了,例如:

代码语言:javascript
复制
BillManagement.ResourceManager.GetString("TaxSetupWrong")

代码语言:javascript
复制
LibraryName.Resources.BillManagement.TaxSetupWrong
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45287888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档