スレン・コッタルのブログ記事は読んだことがあった。
そのブログ記事に、スレンはウェブサイトで中国語の訳が必要だ。
そのため、ウェブサイトURLはあまりいいSEOにならない。
だから、スレンはUmbracoのURL segment providerを使っているから、中国語の字からローマ字に変える。
Readable, simple Chinese URL segments in Umbraco with NPinyin
public class JapaneseUrlSegmentProvider : IUrlSegmentProvider
{
private readonly KawazuConverter _converter;
private readonly DefaultUrlSegmentProvider _defaultUrlSegmentProvider;
public JapaneseUrlSegmentProvider(DefaultUrlSegmentProvider defaultUrlSegmentProvider, KawazuConverter converter)
{
_defaultUrlSegmentProvider = defaultUrlSegmentProvider;
_converter = converter;
}
public string? GetUrlSegment(IContentBase content, string? culture = null)
{
var urlSegment = _defaultUrlSegmentProvider.GetUrlSegment(content, culture);
if (!Utilities.HasJapanese(urlSegment))
return urlSegment;
var romaji = _converter.Convert(urlSegment, To.Romaji, Mode.Spaced, system: RomajiSystem.Hepburn).GetAwaiter().GetResult();
var asciiRomaji = StripDiacritics(romaji);
asciiRomaji = Regex.Replace(asciiRomaji, @"[^a-z0-9]+", "-").Trim('-');
return asciiRomaji;
}
static string StripDiacritics(string input)
{
if (string.IsNullOrEmpty(input)) return input;
var normalized = input.Normalize(NormalizationForm.FormD);
var sb = new StringBuilder(normalized.Length);
foreach (var ch in normalized)
{
var uc = CharUnicodeInfo.GetUnicodeCategory(ch);
if (uc != UnicodeCategory.NonSpacingMark)
sb.Append(ch);
}
return sb.ToString().Normalize(NormalizationForm.FormC);
}
}public void Compose(IUmbracoBuilder builder)
{
builder.Services.AddSingleton(sp =>
{
return new KawazuConverter(AppContext.BaseDirectory);
});
builder.UrlSegmentProviders().Insert<JapaneseUrlSegmentProvider>();
}https://dev.to/skttl/readable-simple-chinese-url-segments-in-umbraco-with-npinyin-ajp

ヨハネス・ランツ
ウェブ開発者・経験8年