ホームページ
Invalid Date

JapaneseUrlSegmentProvider

スレン・コッタルのブログ記事は読んだことがあった。

そのブログ記事に、スレンはウェブサイトで中国語の訳が必要だ。

そのため、ウェブサイト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

https://github.com/Cutano/Kawazu

ヨハネス・ランツ

ヨハネス・ランツ

ウェブ開発者・経験8年

採用可能
JapaneseUrlSegmentProvider | ブログ | ヨハネス・ランツ