您可能知道,Mozilla 旨在将 fennec 上的移动用户界面作为原生 Java/Android 用户界面。
这包括使用布局 XML 文件,默认情况下使用类似的东西
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/text_a"
/>
@string/text_a
在 strings.xml
文件中解析为 text_a
,执行 l10n。
我们想使用其他东西,我想知道我们是否/如何将其连接到 XML 文件中。
所以,我很想获得指向实际执行字符串查找的 android 源代码的指针。
关于如何连接一些自定义的东西,我有三个想法,这些想法没有经过事实核查,主要是因为我还没有设法找到执行这些操作的代码:
@moz-l10n/text_a
,使用 java 实现的服务返回该资源类型的值moz:l10n="text_a"
自定义属性将连接起来以对生成的小部件进行后处理- 子类化我们想要使用我们的方案本地化的小部件,添加 (2)
我希望这里有人有好主意,可以为我指出好的路径或击落一些路径。
PS:如果没有关于 android l10n 方案好不好的 bike-shed,我将不胜感激。
最佳答案
So, I'd love to get pointers to android source code that actually does the string lookup, for one.
android.content.res.Resources
委托(delegate)给 android.content.res.AssetManager
和 getResourceText()
方法。这反过来又深入到 native loadResourceValue()
方法。从那里你只能靠自己了……:-)
1) @moz-l10n/text_a, with a java-implemented service giving back values for that resource type
除非您打算使用自己的构建工具预处理您的人造资源文件,将有效的 Android 资源文件生成到 res/
目录中,否则您不能发明新的资源类型(例如,@moz-10n
).这将需要修改构建工具和固件。
2) moz:l10n="text_a" custom attribute that would get hooked up to post process the generated widgets
3) subclass the widgets we want to localize with our scheme, adding 2)
您的选项 #3 绝对可行,并且在创建自定义小部件时非常典型。可以想象它的技术(通常涉及一个 res/values/attrs.xml
文件和一个 declare-styleable
资源)可以以某种方式应用于标准的小部件类,但我从未见过这样做。当然,您始终可以按照完成选项 #1 的方式进行预处理。
关于android - 如何在 l10n-wise 中改变 Android 的布局 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7843452/