gpt4 book ai didi

.net - 使用多个 resx 文件进行本地化

转载 作者:行者123 更新时间:2023-12-01 06:42:13 32 4
gpt4 key购买 nike

我的 Web 应用程序正在使用 ResourceManager 通过放置在卫星程序集中的资源文件处理本地化。由于应用程序不断增长,我想将 resx 文件拆分为多个文件(针对每种语言),但在客户端,似乎我必须为每个要读取的文件创建一个 ResourceManager 实例。有什么办法可以将多个 resx 文件打包成一个文件吗?

谢谢

最佳答案

如果您正在使用网站(ASP.NET 网站项目模板),您可能需要这样做:HttpContext.GetGlobalResourceObject(classKey, resourceKey) 其中 classKey 是您的 .resx 文件的名称resourceKey 是资源中的本地化字符串。

如果您正在使用 WebApplications 并且您将资源作为一个单独的项目(C# 库),您可能需要查看以下代码:

public class SatelliteResourceManager
{
private const string Resources = "Resources";
private readonly string _assemblyName;

public SatelliteResourceManager(string assemblyName)
{
_assemblyName = assemblyName;
}

public Assembly Assembly { get { return Assembly.Load(_assemblyName); } }

protected IEnumerable<Type> ResourceTypes
{
get
{
return Assembly.GetTypes().Where(a => a.IsClass && a.Namespace == Resources);
}
}

public IEnumerable<ResourceManager> GetAllManagers()
{
foreach (var manager in ResourceTypes)
{
yield return (ResourceManager) manager.GetProperty("ResourceManager").GetValue(this, null);
}
}

public string GetGlobalResource(string classKey, string resourceKey, string fallback)
{
var manager = GetAllManagers().FirstOrDefault(m => m.BaseName.EndsWith(classKey, StringComparison.InvariantCultureIgnoreCase));
if (manager != null) return manager.GetString(resourceKey);
return fallback;
}
}

您需要通过传递带有您的资源项目程序集名称的参数来实例化该类,您可以从项目属性中获取此信息。我还添加了一个字段“Resources”,如果您决定覆盖每个 .resx 文件的默认命名空间,这应该很有用,请注意您可能希望扩展此类以允许 .resx 文件有多个“命名空间”(截图附后) )

Using Custom Namespaces

关于.net - 使用多个 resx 文件进行本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522585/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com