Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 寻找一种语言相同的文化_C#_Culture - Fatal编程技术网

C# 寻找一种语言相同的文化

C# 寻找一种语言相同的文化,c#,culture,C#,Culture,我正在使用.resx资源文件进行全球化项目。我有一些后备逻辑,以防用户选择的语言没有resx文件。有没有办法找到与提供的区域性具有相同语言但不同区域的区域性?特定于某一语言但不特定于某一区域性的资源应位于其自己的文件中,例如,如果您有以下资源文件: Resources.resx Resources.en.resx Resources.fr.resx Resources.fr-FR.resx (Resources.resx中的语言不变字符串,Resources.fr.resx中的法语字符串,以及

我正在使用.resx资源文件进行全球化项目。我有一些后备逻辑,以防用户选择的语言没有resx文件。有没有办法找到与提供的区域性具有相同语言但不同区域的区域性?

特定于某一语言但不特定于某一区域性的资源应位于其自己的文件中,例如,如果您有以下资源文件:

Resources.resx
Resources.en.resx
Resources.fr.resx
Resources.fr-FR.resx
Resources.resx
中的语言不变字符串,
Resources.fr.resx
中的法语字符串,以及
Resources.fr-fr.resx
中特定于法语的字符串)

如果用户的区域性为
fr CA
(加拿大法语),则它将按以下顺序使用以下文件中的资源:

Resources.fr.resx
Resources.resx

这是默认的资源行为。

特定于一种语言而非特定文化的资源应位于其自己的文件中,例如,如果您有以下资源文件:

Resources.resx
Resources.en.resx
Resources.fr.resx
Resources.fr-FR.resx
Resources.resx
中的语言不变字符串,
Resources.fr.resx
中的法语字符串,以及
Resources.fr-fr.resx
中特定于法语的字符串)

如果用户的区域性为
fr CA
(加拿大法语),则它将按以下顺序使用以下文件中的资源:

Resources.fr.resx
Resources.resx

这是默认的资源行为。

如果我理解正确,那么您正在寻找具有相同语言的文化

var culture = new CultureInfo("fr");
var sameLanguageCultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures)
    .Where(x => x.ThreeLetterISOLanguageName == culture.ThreeLetterISOLanguageName && x.Name != culture.Name)
    .ToArray();

foreach (var c in sameLanguageCultures)
{
    Console.WriteLine(c.Name);
}
这将输出

fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC 法语 fr BE fr CA fr CH 吕神父 fr MC
如果我错了,请说明清楚。

如果我理解正确,那么你在寻找类似于使用相同语言的文化的东西

var culture = new CultureInfo("fr");
var sameLanguageCultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures)
    .Where(x => x.ThreeLetterISOLanguageName == culture.ThreeLetterISOLanguageName && x.Name != culture.Name)
    .ToArray();

foreach (var c in sameLanguageCultures)
{
    Console.WriteLine(c.Name);
}
这将输出

fr-FR fr-BE fr-CA fr-CH fr-LU fr-MC 法语 fr BE fr CA fr CH 吕神父 fr MC
如果我错了,请说明清楚。

问题(“不同地区”)中暗示的那样,是否真的会从
fr fr
fr CA
?谢谢!我必须重写一些代码,使其像这样工作。@O.R.Mapper不,不会。相反,您应该设置资源文件,使适用于这两个文件的文件都位于
fr
文件中。如果您的文化是
fr CA
@TimS,您不需要在
fr-fr
中查找任何内容。有趣-这意味着基本上,所有内容都应该首先直接进入
fr
并保持在那里,拥有尽可能多的备用容量。如问题(“不同地区”)所暗示的那样,是否真的会从
fr fr
fr CA
进行备用?谢谢!我必须重写一些代码,使其像这样工作。@O.R.Mapper不,不会。相反,您应该设置资源文件,使适用于这两个文件的文件都位于
fr
文件中。如果您的文化是
fr CA
@TimS,您不需要在
fr-fr
中查找任何内容。有趣-这意味着,基本上,所有内容都应该首先直接进入
fr
并保持在那里,以便尽可能多地提供后备容量。