asp.net - 页面当前使用的.resx文件

标签 asp.net localization globalization resources resx

如何获取页面当前使用的 .resx 文件?例如,如果我在 Default.aspx 上将区域性设置为 fr-FR,它应该为我提供 Default.aspx.fr.resx 或 Default.aspx.fr-FR.resx 或 Default.aspx.resx 取决于哪一个存在。

他们在 ASP.NET 中有类似的东西还是我必须自己编写?

最佳答案

您可以使用GetResourceFileName() ResourceManager 类的方法来构造有效的资源区域性名称。通过反射器快速浏览一下方法实现,我们会发现该方法利用调用者传递的 CultureInfo 对象的 name 属性来构建资源文件名。

protected virtual string GetResourceFileName(CultureInfo culture)
{
    StringBuilder builder = new StringBuilder(0xff);
    builder.Append(this.BaseNameField);
    if (!culture.Equals(CultureInfo.InvariantCulture))
    {
        CultureInfo.VerifyCultureName(culture, true);
        builder.Append('.');
        builder.Append(culture.Name);
    }
    builder.Append(".resources");
    return builder.ToString();
}

GetResourceFileName() 方法调用内部静态方法VerifyCultureName() 以确保我们拥有有效的资源区域性名称。查看VerifyCultureName() 方法,我们会发现发生了一些简单的验证。

internal static bool VerifyCultureName(CultureInfo culture, bool throwException)
{
    if (culture.m_isInherited)
    {
        string name = culture.Name;
        for (int i = 0; i < name.Length; i++)
        {
            char c = name[i];
            if ((!char.IsLetterOrDigit(c) && (c != '-')) && (c != '_'))
            {
                if (throwException)
                {
                    throw new ArgumentException(Environment.GetResourceString("Argument_InvalidResourceCultureName", new object[] { name }));
                }
                return false;
            }
        }
    }
    return true;
}

要使用 GetResourceFileName() 方法,您必须从 ResourceManager 类型派生一个类并重写基类中的虚拟方法。 GetResourceFileName() 方法受到保护,因此我们必须将其包装在公共(public)方法中以将其公开给外界。

public class ResxResourceManager : ResourceManager
{  
    protected override string GetResourceFileName(System.Globalization.CultureInfo culture)
    {
        return base.GetResourceFileName(culture);       
    }

    public string GetResxFileName(System.Globalization.CultureInfo culture)
    {
        return GetResourceFileName(culture).Replace(".resources", ".resx");
    }
}

关于asp.net - 页面当前使用的.resx文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1101264/

相关文章:

sql-server-2005 - 在 SQL Reporting 2005 中更改货币符号

c# - <system.web> .net core 中的全局化

android - 在 android 中本地化日期

php - 在 PHP 应用程序中支持多语言的最佳和最快方法是什么

asp.net - ASP.NET 性能瓶颈之谜

javascript - 从 aspx 调用 Javascript 函数

windows - PL/SQL Developer 不显示 "ő"字符

C++ 游戏加载对象/全局对象

c# - 如何从数据库中获取谷歌地图用户的位置?

c# - 单例模式如何在网络上下文中工作?