我正在本地化Xamarin Forms项目。
我正在使用C#' Resx
文件来实现它。
在我下载的Sample项目以及我创建的Demo项目中,一切正常。但是在我的实际项目中,AppResources.xyzKey
和resourceManager.GetString(xyzKey, anyCulturePassed)
都会返回英文Resx
文件中的值。
我甚至尝试将硬编码的西班牙文化发送到resourceManager.GetString()
函数。
const string ResourceId = "projectName.Resources.Resx.AppResources";
public static string Localize(string key, string comment)
{
//var netLanguage = Locale ();
// Platform-specific
ResourceManager temp = new ResourceManager(ResourceId, typeof(L10n).GetTypeInfo().Assembly);
Debug.WriteLine("Localize " + key);
string result = "";
try
{
//Dynamically detecting culture is commented for testing.
//CultureInfo ci = DependencyService.Get<ILocale>().GetCurrentCultureInfo();
CultureInfo ci = new CultureInfo("es");
result = temp.GetString(key, ci);
if (result == null)
{
result = key; // HACK: return the key, which GETS displayed to the user
}
return result;
}
catch (Exception e)
{
if (e != null)
{
}
}
return result;
}
尽管如此,总是从英文Resx
文件中选择值。
这些是我的资源文件:
我确保通过打印来加载相应的资源文件;
var assembly = typeof(AppResources).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
{
System.Diagnostics.Debug.WriteLine("found resource: " + res);
}
这是输出:
令人惊讶的是,在同一平台上,它在Sample和Demo项目中都能正常工作。
答案 0 :(得分:1)
原来只有英文Resx
文件被设置为Embedded Resource
。
因此,即使在打印GetManifestResourceNames()
时,它也会打印Resx
文件的名称,但它仅适用于该文件的英文版本。
要解决此问题,当您为新语言创建新XML
个文件Resx
时,
右键单击该文件 - &gt;构建行动 - &gt;设置为嵌入式资源。
答案 1 :(得分:0)
资源文件受执行线程文化的影响。您是否尝试更改正在运行的线程,例如;
newCulture = CultureInfo.CreateSpecificCulture("tr-TR");
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;