1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lunarsf-Lunar-Markdown-Editor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
NameDictionaryHelper.cs 4.3 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
LunarSF Отправлено 9 лет назад ab5a981
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 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/lunarsf-Lunar-Markdown-Editor.git
git@gitlife.ru:oschina-mirror/lunarsf-Lunar-Markdown-Editor.git
oschina-mirror
lunarsf-Lunar-Markdown-Editor
lunarsf-Lunar-Markdown-Editor
v0.4-beta8