我有一个WinForms应用程序,可以通过附属文件的附属程序集进行本地化。用户可以在运行时切换应用程序语言。
所以我的问题是:有没有办法动态找出哪些文化作为本地化资源与我的客户一起发送?
答案 0 :(得分:5)
这是我使用的代码。它搜索程序子目录中的附属程序集
private static ReadOnlyCollection<CultureInfo> GetAvailableCultures()
{
List<CultureInfo> list = new List<CultureInfo>();
string startupDir = Application.StartupPath;
Assembly asm = Assembly.GetEntryAssembly();
CultureInfo neutralCulture = CultureInfo.InvariantCulture;
if (asm != null)
{
NeutralResourcesLanguageAttribute attr = Attribute.GetCustomAttribute(asm, typeof(NeutralResourcesLanguageAttribute)) as NeutralResourcesLanguageAttribute;
if (attr != null)
neutralCulture = CultureInfo.GetCultureInfo(attr.CultureName);
}
list.Add(neutralCulture);
if (asm != null)
{
string baseName = asm.GetName().Name;
foreach (string dir in Directory.GetDirectories(startupDir))
{
// Check that the directory name is a valid culture
DirectoryInfo dirinfo = new DirectoryInfo(dir);
CultureInfo tCulture = null;
try
{
tCulture = CultureInfo.GetCultureInfo(dirinfo.Name);
}
// Not a valid culture : skip that directory
catch (ArgumentException)
{
continue;
}
// Check that the directory contains satellite assemblies
if (dirinfo.GetFiles(baseName + ".resources.dll").Length > 0)
{
list.Add(tCulture);
}
}
}
return list.AsReadOnly();
}
答案 1 :(得分:0)
我们找到的最简单的方法是查看附属程序集文件,并从父目录名称中进行处理,这些名称使用标准的“en-US”样式名称。