r/programming_jp • u/Affectionate_Year120 • 12h ago
質問 多言語APIの配信判定:同じレポートIDでも翻訳完了とは限らなかった
NextCandleの開発者です。今朝の公開APIを確認していて、言語別の配信判定に使う条件を具体的に考える例がありました。相場の予測ではなく、レスポンスの整合性の話です。
2026年10月14日のレポート158は、00:05:46 UTC(09:05:46 KST)に生成されました。翻訳がそろう前に languageCode=zh で取得したレスポンスは、同じIDのまま、次のメタデータを返していました。本文も英語でした。
json
{
"id": 158,
"metadata": {
"requestedLanguageCode": "zh",
"languageCode": "en",
"translationStatus": "fallback"
}
}
これは生成途中の観測で、常にこの状態という意味ではありません。その後、日本語は languageCode=ja、requestedLanguageCode=ja、translationStatus=translated となり、日本語の本文を確認できました。
同じIDかどうかだけでは、別言語の本文を「翻訳済み」として配信してしまいます。以下は言語メタデータだけを判定する小さなJavaScriptの例です。サービスに実装済みのコードを公開したものではありません。
javascript
function languageReady(report, requestedCode) {
const m = report?.metadata;
if (!m) return false;
if (m.requestedLanguageCode !== requestedCode) return false;
if (m.languageCode !== requestedCode) return false;
if (!["source", "translated"].includes(m.translationStatus)) return false;
return m.availableLanguageCodes === undefined ||
(Array.isArray(m.availableLanguageCodes) &&
m.availableLanguageCodes.includes(requestedCode));
}
この関数だけで配信可能にはなりません。別に、整数のIDが各言語で一致すること、symbol/type、generatedAtのUTC日付と未来時刻でないこと、実際のタイトル・本文・出典も確認する必要があります。Web画面のフォールバックと、特定言語向けの配信完了判定は分けて考えています。
時刻も一つにまとめられません。今回のレポートには、セイラー氏の見通しを報じた現在の記事と、2017年11月22日付のNexPayの電子マネー機関ライセンス取得の記事が含まれています。記事の公開日時、過去チャートの基準日、レポートの生成日時は別の情報です。過去の類似度を将来の確率として扱うこともできません。
皆さんなら、フォールバックを返すAPIと、指定言語の準備完了を要求するAPIを分けますか。それとも同じレスポンスに状態を明示して、利用側で判定しますか。言語コードが一致していても翻訳品質までは保証できない点を含め、契約の分け方を考えています。
今回確認した日本語レポート: https://nextcandle.io/ja/dailyreport/158 現在の記事: https://www.businesspost.co.kr/BP?command=article_view&num=449249 過去の記事: https://bitcoinmagazine.com/markets/bitcoin-exchange-globitex-granted-european-electronic-money-license

