资产文件的本地化

mis*_*kin 50 android localization

我在assets文件夹中有几个html文件.我该如何本地化它们?我唯一的选择是根据区域设置放一些硬编码来选择正确的文件?

And*_*ite 60

这不是直接支持,但这是我所做的...

按国家/地区代码将文件分成几组(就像您对普通资源文件所做的那样),然后在每个本地化的string.xml文件中创建一个本地化字符串,称为"prefix"(前缀为"en"表示英文)例如).

然后,当您构建资产文件名时,使用类似的东西getString("prefix") + "-" + "<name-of-asset->.

至少上面的一些变化应该适合你.

  • 谢谢!稍微提高你的想法,我可以使用Locale.getLanguage().substring(0,2).toLowerCase()来获取该前缀,所以我不需要将前缀var添加到string.xml (15认同)
  • 请注意,`getLanguage().substring(0,2)`不是android中的versitle方法,因为`zh-rTW`(taiwanese aka繁体中文.` zh`是简体中文)无法处理. (9认同)
  • 优秀的解决方 我正在使用它的变体来将东西置于assets/en/...,assets/es/...等之下.一件好事是,如果你在strings.xml中定义了前缀,你知道目录将存在于资产中(只要每次添加新的本地化版本的strings.xml时都创建目录).我用这个不仅可以本地化html,还可以本地化其他一些资产. (2认同)
  • 我使用 Locale.getDefault().getLanguage() 来获取前缀,因为 Locale.getLanguage() 不起作用。 (2认同)

Chr*_*rff 32

将您的文件放入具有本地后缀的assets文件夹中.为每个文件定义一个String资源'myLocalizedFileName',并通过R.string.myLocalizedFileName获取文件名.

例:

文件夹结构:

assets/
assets/help.html
assets/help_de.htlm
Run Code Online (Sandbox Code Playgroud)

res/values/strings.xml中每种语言的字符串资源:

<resource>
  <string name=helpFile>help.html</string>
</resource>
Run Code Online (Sandbox Code Playgroud)

WebView调用:

public class HelpActivity extends AppCompatActivity {
  protected void onCreate(Bundle savedInstanceState) {
    ...
    findViewById(R.id.helpWebView)
      .loadUrl("file:///android_asset/" 
         + getString(R.string.helpFile));
  }
}
Run Code Online (Sandbox Code Playgroud)


PJ_*_*gan 31

如果要本地化HTML文件,只需将其放在res/raw- <language> /filename.html(其中<language> = en,es,fr,it等)下,然后使用资源ID R.raw.filename.框架将根据区域设置选择正确的文件.