Слияние кода завершено, страница обновится автоматически
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Media;
using System.Windows.Markup;
namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{
/// <summary>
/// 此类源自网络。
/// 是用于主界面生成字体列表。
/// </summary>
internal static class NameDictionaryHelper
{
public static string GetDisplayName(LanguageSpecificStringDictionary nameDictionary)
{
// Look up the display name based on the UI culture, which is the same culture
// used for resource loading.
XmlLanguage userLanguage = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag);
// Look for an exact match.
string name;
if (nameDictionary.TryGetValue(userLanguage, out name))
{
return name;
}
// No exact match; return the name for the most closely related language.
int bestRelatedness = -1;
string bestName = string.Empty;
foreach (KeyValuePair<XmlLanguage, string> pair in nameDictionary)
{
int relatedness = GetRelatedness(pair.Key, userLanguage);
if (relatedness > bestRelatedness)
{
bestRelatedness = relatedness;
bestName = pair.Value;
}
}
return bestName;
}
public static string GetDisplayName(IDictionary<CultureInfo, string> nameDictionary)
{
// Look for an exact match.
string name;
if (nameDictionary.TryGetValue(CultureInfo.CurrentUICulture, out name))
{
return name;
}
// No exact match; return the name for the most closely related language.
int bestRelatedness = -1;
string bestName = string.Empty;
XmlLanguage userLanguage = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag);
foreach (KeyValuePair<CultureInfo, string> pair in nameDictionary)
{
int relatedness = GetRelatedness(XmlLanguage.GetLanguage(pair.Key.IetfLanguageTag), userLanguage);
if (relatedness > bestRelatedness)
{
bestRelatedness = relatedness;
bestName = pair.Value;
}
}
return bestName;
}
private static int GetRelatedness(XmlLanguage keyLang, XmlLanguage userLang)
{
try
{
// Get equivalent cultures.
CultureInfo keyCulture = CultureInfo.GetCultureInfoByIetfLanguageTag(keyLang.IetfLanguageTag);
CultureInfo userCulture = CultureInfo.GetCultureInfoByIetfLanguageTag(userLang.IetfLanguageTag);
if (!userCulture.IsNeutralCulture)
{
userCulture = userCulture.Parent;
}
// If the key is a prefix or parent of the user language it's a good match.
if (IsPrefixOf(keyLang.IetfLanguageTag, userLang.IetfLanguageTag) || userCulture.Equals(keyCulture))
{
return 2;
}
// If the key and user language share a common prefix or parent neutral culture, it's a reasonable match.
if (IsPrefixOf(TrimSuffix(userLang.IetfLanguageTag), keyLang.IetfLanguageTag) || userCulture.Equals(keyCulture.Parent))
{
return 1;
}
}
catch (ArgumentException)
{
// Language tag with no corresponding CultureInfo.
}
// They're unrelated languages.
return 0;
}
private static string TrimSuffix(string tag)
{
int i = tag.LastIndexOf('-');
if (i > 0)
{
return tag.Substring(0, i);
}
else
{
return tag;
}
}
private static bool IsPrefixOf(string prefix, string tag)
{
return prefix.Length < tag.Length &&
tag[prefix.Length] == '-' &&
string.CompareOrdinal(prefix, 0, tag, 0, prefix.Length) == 0;
}
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )