码坊「記事タイトルURLエイリアス生成器」リリース

码坊「記事タイトルURLエイリアス生成器」リリース

码坊は、ウェブオンラインツール、クロスプラットフォームのデスクトップおよびモバイルアプリを提供するオープンソースプロジェクトです。運営者は、より効率的で便利な使い心地を提供することに全力を尽くしています。本日、「記事タイトルURLエイリアス生成器」をリリースし、記事タイトルのURLエイリアスを簡単に作成し、SEO効果とユーザーエクスペリエンスを向上させるお手伝いをします。ぜひ码坊で、さらに便利なツールを見つけてください!

最終更新 2024/01/07 0:12
沙漠尽头的狼
読了目安 4 分
カテゴリ
Blazor
タグ
.NET Blazor Avalonia UI オープンソースプロジェクト オープンソース

みなさん、こんにちは。砂漠の果ての狼です。今日は、非常に便利なツール「Code World Workshop(コードワールドワークショップ)」をご紹介します。

Code World Workshopは、サイト管理者が新しく開発したオープンソースプロジェクトで、Webオンラインツールを提供するとともに、クロスプラットフォームのデスクトップおよびモバイルApp版も提供しています。私たちの目標は、より効率的で便利なオンラインツール体験を提供することです。本日、大変光栄に思います「記事タイトルURLエイリアス生成ツール」をリリースします。このツールは、記事タイトルのURLエイリアスを簡単に作成し、SEO効果とユーザー体験を向上させるのに役立ちます。

これはどんなツール?

こんな問題に遭遇したことはありませんか?素晴らしい記事を書いたのに、タイトルが長すぎたり特殊文字が含まれていたりして、URLが美しくなく、SEO効果に悪影響を及ぼすことがあります。今、「記事タイトルURLエイリアス生成ツール」を使えば、これらの問題はすべて解決します。

このツールは3つの機能を提供します:

  1. 中日英翻訳:中国語タイトルを英語に翻訳、または英語タイトルを中国語に翻訳。
  2. 英語からURLエイリアスへの変換:英語タイトルをシンプルなURLエイリアスに変換し、Webサイトで使用しやすくします。
  3. 中国語からURLエイリアスへの変換:中国語タイトルをシンプルなURLエイリアスに変換し、Webサイトで使用しやすくします。

特に、記事の中国語タイトルが決まった後、サイト公開時の記事アクセスリンク生成に最適です。例えば、本記事のタイトル「码坊“文章标题URL别名生成器”上线」をツールで変換すると、code-world-workshop-article-title-url-alias-generator-launched となります。変換結果は以下の通りです:

タイトルエイリアス変換デモ

このツールをDotnet9サイトで公開すると、サイト上のアクセスURLは https://dotnet9.com/2024/01/code-world-workshop-article-title-url-alias-generator-launched になります。

中日英翻訳、エイリアス変換の実装

このツールの実装原理は非常にシンプルです。中日英翻訳には GTranslate パッケージの YandexTranslator クラスを使用しています。これはニューラルネットワーク機械翻訳技術(NMT)を採用しており、より高品質な翻訳結果を提供します。URLエイリアスの変換には Slugify.Core パッケージを使用しており、使い方も簡単で変換効果も良好です。

実装コードを見てみましょう。まず変換インターフェースを定義します:

namespace CodeWF.Core;

/// <summary>
/// 記事タイトル翻訳
/// </summary>
public interface ITranslationService
{
    /// <summary>
    /// 中国語→英語翻訳
    /// </summary>
    /// <param name="chineseText"></param>
    /// <returns></returns>
    public Task<string> ChineseToEnglishAsync(string? chineseText);

    /// <summary>
    /// 英語→中国語翻訳
    /// </summary>
    /// <param name="englishText"></param>
    /// <returns></returns>
    public Task<string> EnglishToChineseAsync(string? englishText);

    /// <summary>
    /// 英語をURLスラッグに変換
    /// </summary>
    /// <param name="englishText"></param>
    /// <returns></returns>
    public string EnglishToUrlSlug(string? englishText);
}

変換インターフェースの実装:

namespace CodeWF.Core;

/// <summary>
/// 中日英翻訳にはYandex Translationを使用。Yandexはニューラルネットワーク機械翻訳技術(NMT)を採用し、
/// より高品質な翻訳結果を提供します。Yandex Translationは多くの言語ペアをサポートし、一部の
/// 珍しい言語も含み、特にヨーロッパ言語間の翻訳に優れています。
/// </summary>
public class TranslationService : ITranslationService
{
    private readonly YandexTranslator _translator = new();
    private readonly SlugHelper _slugHelper = new();

    /// <summary>
    /// 中国語→英語翻訳
    /// </summary>
    /// <param name="chineseText"></param>
    /// <returns></returns>
    public async Task<string> ChineseToEnglishAsync(string? chineseText)
    {
        return string.IsNullOrWhiteSpace(chineseText)
            ? string.Empty
            : (await _translator.TranslateAsync(chineseText, "en")).Translation;
    }

    /// <summary>
    /// 英語→中国語翻訳
    /// </summary>
    /// <param name="englishText"></param>
    /// <returns></returns>
    public async Task<string> EnglishToChineseAsync(string? englishText)
    {
        return string.IsNullOrWhiteSpace(englishText)
            ? string.Empty
            : (await _translator.TranslateAsync(englishText, "zh-CN")).Translation;
    }

    /// <summary>
    /// 英語をURLスラッグに変換
    /// </summary>
    /// <param name="englishText"></param>
    /// <returns></returns>
    public string EnglishToUrlSlug(string? englishText)
    {
        return string.IsNullOrWhiteSpace(englishText) ? string.Empty : _slugHelper.GenerateSlug(englishText);
    }
}

ユニットテストで検証:

namespace CodeWF.Core.Test;

[TestClass]
public class TranslationServiceUnitTest
{
    private readonly ITranslationService _translationService = new TranslationService();

    [TestMethod]
    public async Task Test_ChineseToEnglishAsync_SUCCESS()
    {
        const string chineseText = "码坊";

        var englishText = await _translationService.ChineseToEnglishAsync(chineseText);

        Assert.AreEqual(englishText, "Code World Workshop");
    }

    [TestMethod]
    public async Task Test_EnglishToChineseAsync_SUCCESS()
    {
        const string englishText = "Code World Workshop";

        var chineseText = await _translationService.EnglishToChineseAsync(englishText);

        Assert.AreEqual(chineseText, "代码世界工作坊");
    }

    [TestMethod]
    public void Test_EnglishToSlug_SUCCESS()
    {
        const string englishText = "Code World Workshop";

        var urlSlug = _translationService.EnglishToUrlSlug(englishText);

        Assert.AreEqual(urlSlug, "code-world-workshop");
    }

    [TestMethod]
    public async Task Test_ChineseToSlugAsync_SUCCESS()
    {
        const string chineseText = "码坊";

        var englishText = await _translationService.ChineseToEnglishAsync(chineseText);

        var urlSlug = _translationService.EnglishToUrlSlug(englishText);

        Assert.AreEqual(urlSlug, "code-world-workshop");
    }
}

最後に

文中のスクリーンショットはクロスプラットフォームデスクトップ版で、Avalonia UIとコントロールライブラリNeumorphism.Avaloniaを使用して開発されています。機能がある程度完成したら、サイト管理者はツールフレームワークの構築について紹介する予定です。以下はツールの効果画像です:

ツール効果画像

ツール効果画像

このツールに興味があれば、Code World Workshopの公式サイト https://codewf.com にアクセスして、さらに便利なツールをご覧ください。Code World WorkshopのソースコードもGitHubで公開していますので、ぜひフォローしてコントリビュートをお願いします。

皆様のご支援に感謝します。皆様の応援と励ましが私の原動力です。ご質問やご提案があれば、いつでもお気軽にご連絡ください。一緒に素晴らしいCode World Workshopを作りましょう!

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2024/02/29

Winformでもこんなデータ表示ができる

winform開発の過程で、データ表示機能が必要になることがよくあります。これまではgridcontrolコントロールを使用していましたが、今日は例を通して、winform blazor hybridでant design blazorのtableコンポーネントを使ってデータ表示を行う方法を紹介します。

続きを読む
同じカテゴリ / 同じタグ 2024/02/29

Winformの画面も綺麗にできる?

先日、winformでblazor hybridを使用することを紹介しました。また、blazorのUIを組み合わせることでwinformプログラムのデザインをより美しくできると言いました。今回はwinform blazor hybridで描画する例を挙げて説明します。参考になれば幸いです。

続きを読む