リストを言語別に並べ替え
五十音順やアルファベット順は、文字コードの順番とは一致しません。このツールは指定したロケールの規則で文字列を並べ替え、元の表記を一切変更せず、実際に使われたロケールとオプションも返します。
無料で実行
文字コード順では読者に自然な順番になりません
単純な比較は、文字を内部の番号として扱います。そのため、大文字だけが先に集まったり、アクセント付きの語が基本文字から離れたり、項目12が項目2より前に来たりします。処理としては一定でも、名簿、商品一覧、索引では不自然です。ロケール対応の照合は、指定されたBCP-47タグの言語規則を使います。返す文字列は入力時のままです。翻訳、ローマ字化、アクセント除去、表記修正は行わず、リスト内の位置だけを変更します。
区別する要素をオプションで選べます
文字列の配列と、ja、ja-JP、es、deなどのロケールを指定します。sensitivityでは、大文字小文字やアクセントの違いを比較に含める範囲を選べます。baseではcafe、café、CAFEが同順位になる場合がありますが、variantでは各差分を比較します。numericを有効にすると、数字の並びを数値として扱うため、章2が章12より前になります。句読点を無視する設定も可能です。応答にはrequested_locale、resolved_locale、実際の照合オプションが含まれ、暗黙のフォールバックを確認できます。
同順位の項目は入力順を保ちます
アクセント、大文字小文字、句読点を無視すると、異なる文字列でも比較結果が同じになることがあります。この能力は並べ替え前に各項目の元のインデックスを記録し、比較が同順位になった場合の最後の基準として使います。降順を選んだ場合でも、同順位の相対順序は変わりません。出力には並べ替え後のitemsとoriginal_indexesが含まれます。そのため、関連する列や識別子も同じ順番へ安全に移動でき、各結果がどの位置から来たかを後から確認できます。
ブラウザ内の処理と自動化に対応します
ブラウザ版はローカルで動作し、無料で、アカウント、外部通信、人工知能を必要としません。APIでも同じ純粋な照合規則を使えるため、名簿、商品フィルター、用語集、定期エクスポートへ組み込めます。成功したリクエストには公開済みの基本料金が適用され、単位は千行ごとに処理量を記録します。項目数と総文字数には上限があり、メモリ使用量と実行時間が予測可能になるようにしています。読者が自然だと感じる順番を、再現可能な形で作成できます。
活用例
顧客名簿と会員一覧
表記、アクセント、重複を保ったまま、閲覧者のロケールに合う順番で名前を表示します。
商品カテゴリと型番
商品2と商品12のように数字を含む名称も、期待どおりの順番に並べます。
多言語用語集
元の文字体系をローマ字へ変換せず、言語ごとに独立した索引を作成します。
再現可能な書き出し
元のインデックスを関連列へ適用し、同順位の項目が持つ既存の順序も維持します。
よくある質問
アクセントや異体字を含むリストはどう並べ替えますか?
対象言語のロケールと必要なsensitivityを指定します。文字コードではなく、そのロケールの照合規則が適用されます。
入力した文字列は変更されますか?
変更されません。各文字列は入力時と同じ形で返され、リスト内の位置だけが変わります。
resolved_localeは何を示しますか?
実行環境が実際に使用したロケールです。有効なBCP-47タグを環境が認識しない場合は、ブラウザの既定値ではなく明示的に英語へフォールバックするため、resolved_localeはenになります。
文字列内の数字は数値順になりますか?
初期設定では数値順です。そのため項目2は項目12より前になります。numericを無効にすることもできます。
リストの並べ替えは無料ですか?
ブラウザ版は無料でローカル処理です。APIは前払い残高から公開基本料金$0.002を使い、失敗した処理は課金されません。
比較結果が同じ項目はどうなりますか?
入力時の相対順序を維持します。original_indexesで各結果の元の位置も確認できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/locale/sort \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["Ángel","angel","ñandú","nandu","item 12","item 2"]}'const res = await fetch("https://api.kit.forhosting.com/locale/sort", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"Ángel",
"angel",
"ñandú",
"nandu",
"item 12",
"item 2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/locale/sort",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"Ángel",
"angel",
"ñandú",
"nandu",
"item 12",
"item 2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/locale/sort", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["Ángel","angel","ñandú","nandu","item 12","item 2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["Ángel","angel","ñandú","nandu","item 12","item 2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/locale/sort", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"items": [
"Ángel",
"angel",
"ñandú",
"nandu",
"item 12",
"item 2"
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "locale.sort",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 10000 |
max_chars | 500000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |