我已经基于this Microsoft document实现了本地化。
仅对于我明确为其添加资源文件的语言,它可以按预期运行。对于其他语言,我会收到“ filenotfound异常”。
此外,如果我仅添加默认资源文件,它将无法正常工作。
UPDATE1:
[ContentProperty("ContentPropertyName")]
public class TranslateExtension : IMarkupExtension
{
readonly CultureInfo currentCultureInfo;
private const string ResourceId = "App.Localization.Translations";
private static Lazy<ResourceManager> ResMgr
{
get
{
var assembly = typeof(TranslateExtension).GetTypeInfo().Assembly;
var resourceManager = new ResourceManager(ResourceId, assembly);
return new Lazy<ResourceManager>(() => resourceManager);
}
}
public string ContentPropertyName { get; set; }
public TranslateExtension()
{
if (Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Android)
{
currentCultureInfo = DependencyService.Get<ILocalize>().GetCurrentCultureInfo();
}
}
public object ProvideValue(IServiceProvider serviceProvider)
{
if (ContentPropertyName == null)
{
return string.Empty;
}
// Exception thrown here
var translation = ResMgr.Value.GetString(ContentPropertyName, currentCultureInfo);
if (translation == null)
{
translation = ContentPropertyName;
}
return translation;
}
}
UPDATE2: 该问题已暂时解决。今天早些时候,“默认”资源文件已损坏。我删除了损坏的资源文件,复制了en-GB版本,并将其重命名为默认值。显然这是VS不那么喜欢的。我删除了新的默认设置。创建一个新的空行,然后从en-GB版本的资源编辑器中选择所有行,复制它们,将它们粘贴到新的默认行中,然后保存,一切现在都可以正常使用。
UPDATE3: 问题再次出现,此技巧不再有用。
有什么建议吗?