tajik api fix
This commit is contained in:
parent
23cb549953
commit
a6e7d4f4e6
@ -149,7 +149,17 @@ namespace RMuseum.Services.Implementation
|
||||
var nextPoem = await _context.TajikPoems.AsNoTracking().Where(p => p.Id == page.Poem.Next.Id).SingleOrDefaultAsync();
|
||||
if(nextPoem != null)
|
||||
{
|
||||
// real Tajik translation exists for the neighbouring poem - use it
|
||||
page.Poem.Next.Title = nextPoem.TajikTitle;
|
||||
page.Poem.Next.Excerpt = ExtractExcerpt(nextPoem.TajikPlainText);
|
||||
}
|
||||
else
|
||||
{
|
||||
// no Tajik translation for this poem yet - fall back to a simple
|
||||
// best-effort letter transliteration rather than showing raw
|
||||
// Perso-Arabic script (see LanguageUtils.TransliteratePersianToTajik)
|
||||
page.Poem.Next.Title = LanguageUtils.TransliteratePersianToTajik(page.Poem.Next.Title);
|
||||
page.Poem.Next.Excerpt = LanguageUtils.TransliteratePersianToTajik(page.Poem.Next.Excerpt);
|
||||
}
|
||||
}
|
||||
if (page.Poem.Previous != null)
|
||||
@ -158,6 +168,12 @@ namespace RMuseum.Services.Implementation
|
||||
if (prePoem != null)
|
||||
{
|
||||
page.Poem.Previous.Title = prePoem.TajikTitle;
|
||||
page.Poem.Previous.Excerpt = ExtractExcerpt(prePoem.TajikPlainText);
|
||||
}
|
||||
else
|
||||
{
|
||||
page.Poem.Previous.Title = LanguageUtils.TransliteratePersianToTajik(page.Poem.Previous.Title);
|
||||
page.Poem.Previous.Excerpt = LanguageUtils.TransliteratePersianToTajik(page.Poem.Previous.Excerpt);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -169,6 +185,16 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// short plain-text excerpt (first non-empty line) for a Tajik poem's next/previous nav link
|
||||
/// </summary>
|
||||
private static string ExtractExcerpt(string plainText)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(plainText)) return "";
|
||||
var firstLine = plainText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault() ?? "";
|
||||
return firstLine.Length > 80 ? firstLine.Substring(0, 80) + "…" : firstLine;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -92,6 +92,85 @@ namespace RMuseum.Services.Implementation
|
||||
;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// simple, best-effort Perso-Arabic -> Tajik Cyrillic letter substitution.
|
||||
/// NOT a linguistically correct transliteration: Perso-Arabic script does not
|
||||
/// write short vowels, so a letter-by-letter map cannot recover them (that's
|
||||
/// why a dedicated tool like persian-tajik.ir exists, and why the bulk of
|
||||
/// TajikGanjoor's content comes from real TajikPoems/TajikCats/TajikPoets rows
|
||||
/// rather than on-the-fly conversion). This exists only as a fallback for
|
||||
/// spots - like a neighbouring poem's excerpt on the next/previous nav - that
|
||||
/// don't have a proper Tajik translation in the database yet, so at least
|
||||
/// something in Cyrillic is shown instead of raw Perso-Arabic script.
|
||||
/// </summary>
|
||||
private static readonly Dictionary<char, string> _persianToTajikMap = new Dictionary<char, string>()
|
||||
{
|
||||
['آ'] = "о",
|
||||
['ا'] = "о",
|
||||
['ب'] = "б",
|
||||
['پ'] = "п",
|
||||
['ت'] = "т",
|
||||
['ث'] = "с",
|
||||
['ج'] = "ҷ",
|
||||
['چ'] = "ч",
|
||||
['ح'] = "ҳ",
|
||||
['خ'] = "х",
|
||||
['د'] = "д",
|
||||
['ذ'] = "з",
|
||||
['ر'] = "р",
|
||||
['ز'] = "з",
|
||||
['ژ'] = "ж",
|
||||
['س'] = "с",
|
||||
['ش'] = "ш",
|
||||
['ص'] = "с",
|
||||
['ض'] = "з",
|
||||
['ط'] = "т",
|
||||
['ظ'] = "з",
|
||||
['ع'] = "ъ",
|
||||
['غ'] = "ғ",
|
||||
['ف'] = "ф",
|
||||
['ق'] = "қ",
|
||||
['ک'] = "к",
|
||||
['ك'] = "к",
|
||||
['گ'] = "г",
|
||||
['ل'] = "л",
|
||||
['م'] = "м",
|
||||
['ن'] = "н",
|
||||
['و'] = "в",
|
||||
['ه'] = "ҳ",
|
||||
['ی'] = "ӣ",
|
||||
['ي'] = "ӣ",
|
||||
['ئ'] = "ъ",
|
||||
['ؤ'] = "в",
|
||||
['ء'] = "ъ",
|
||||
['ة'] = "ат",
|
||||
['؟'] = "?",
|
||||
['،'] = ",",
|
||||
['؛'] = ";",
|
||||
['۰'] = "0",
|
||||
['۱'] = "1",
|
||||
['۲'] = "2",
|
||||
['۳'] = "3",
|
||||
['۴'] = "4",
|
||||
['۵'] = "5",
|
||||
['۶'] = "6",
|
||||
['۷'] = "7",
|
||||
['۸'] = "8",
|
||||
['۹'] = "9",
|
||||
};
|
||||
|
||||
public static string TransliteratePersianToTajik(string text)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text)) return text;
|
||||
text = CleanTextForTransileration(text);
|
||||
var sb = new System.Text.StringBuilder(text.Length);
|
||||
foreach (char c in text)
|
||||
{
|
||||
sb.Append(_persianToTajikMap.TryGetValue(c, out string mapped) ? mapped : c.ToString());
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
public static string SameSoundLetters(string text)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user