You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android XML本地化求助:values-uk资源文件不生效

解决Xamarin Android原生资源本地化失效的问题

看起来你遇到的问题是.NET的resx资源能正常切换语言,但Android原生的values-uk下的字符串资源始终不生效对吧?我帮你梳理几个关键排查点和解决方案:

1. 资源文件名错误(最可能的核心原因)

Android原生的字符串资源文件必须严格命名为**strings.xml**(注意是小写的s,且为复数形式),但你的values-uk文件夹里的文件是String.xml(大写S、单数)。Android系统只会识别标准命名的strings.xml,文件名不匹配的话,系统根本不会加载这个文件夹下的资源,自然只会返回默认values/strings.xml里的内容。

赶紧把文件名改成strings.xml,这大概率能解决大部分问题。

2. 确认资源文件的Build Action配置

在Visual Studio里右键点击values-uk/strings.xml,查看属性面板,确保Build Action设置为AndroidResource。如果设置成了其他值(比如Content),这个文件不会被编译到APK的资源包中,系统也无法读取到它。

3. Android原生资源依赖系统Locale,而非.NET的CultureInfo

你现在只设置了Localization.Resources.Language.Culture,这只会影响.NET的resx资源,但Android原生的Resources.GetText()是依赖系统配置(Configuration.Locale)来加载对应资源的。要让原生资源生效,你需要切换Android系统的Locale,而不是只修改.NET的CultureInfo。

可以试试这段代码切换Locale并重启Activity生效:

// 获取当前配置
var config = Resources.Configuration;
// 设置乌克兰语Locale
config.SetLocale(new Java.Util.Locale("uk"));
// 更新配置
Resources.UpdateConfiguration(config, Resources.DisplayMetrics);

// 重启当前Activity,让新的Locale生效
Finish();
StartActivity(Intent);

之后再调用Resources.GetText(Resource.String.test_string)应该就能获取到乌克兰语的内容了。

4. 清理并重建项目

有时候Visual Studio的资源缓存会导致新添加的资源文件不被识别。先执行Clean Solution,然后再Rebuild Solution,确保所有资源都被正确编译打包。

5. 验证Locale代码的正确性

虽然"uk"是乌克兰语的正确代码,但可以试试完整的区域代码"uk-UA",确保Android系统能正确匹配到对应的资源文件夹。

按照这些步骤排查,应该就能解决原生资源不生效的问题了。

内容的提问来源于stack exchange,提问作者MaxNTF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:41:53