Xamarin Forms本地化不会退回到默认资源文件

时间:2019-06-03 11:21:01

标签: xamarin.forms localization

我已经基于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: 问题再次出现,此技巧不再有用。

有什么建议吗?

0 个答案:

没有答案