PageSourceSearch

https://qknow.ai/scripts/i18n/ja-translations.js

js qknow.ai collected 2026-10-05 12:29:01 UTC 12,232 bytes, 256 lines download raw bytes

1import { JA_BLOG_TEXT_TRANSLATIONS } from './ja-blog-translations.js';
2import { JA_HOME_COMMON_TEXT_TRANSLATIONS } from './ja-home-common-translations.js';
3import { JA_SOLUTION_CASE_TEXT_TRANSLATIONS } from './ja-solution-case-translations.js';
4
5const JA_CORE_TEXT_TRANSLATIONS = {
6    首页: 'ホーム',
7    解决方案: 'ソリューション',
8    客户案例: '導入事例',
9    动态: 'ニュース',
10    关于: '会社情報',
11    '关于 qKnow': 'qKnowについて',
12    关于qKnow: 'qKnowについて',
13    价格: '料金',
14    简体中文: '簡体字中国語',
15    English: '英語',
16    Japanese: '日本語',
17    日本語: '日本語',
18    免费试用: '無料トライアル',
19    免费使用: '無料トライアル',
20    立即咨询: '今すぐ相談',
21    联系我们: 'お問い合わせ',
22    商务合作: '事業提携',
23    获取资料: '資料を入手',
24    查看详情: '詳細を見る',
25    '查看更多  â†’': 'もっと見る  â†’',
26    '案例详情 →': '事例の詳細 →',
27    '阅读原文 →': '原文を読む →',
28    返回顶部: 'ページ上部へ戻る',
29    主导航: 'メインナビゲーション',
30    移动导航: 'モバイルナビゲーション',
31    语言切换: '言語切り替え',
32    打开移动端菜单: 'モバイルメニューを開く',
33    关闭菜单: 'メニューを閉じる',
34    动态分类: 'ニュースカテゴリ',
35    搜索动态内容: 'ニュースを検索',
36    分页导航: 'ページナビゲーション',
37    最新动态与洞察: '最新ニュースとインサイト',
38    '汇聚核心产品发布与深度技术解析,与您共同探索企业数据治理与资产化的演进之路。':
39        '主要な製品リリースと詳しい技術解説を通じて、企業のナレッジ活用とAI導入の進化をともに探ります。',
40    全部动态: 'すべてのニュース',
41    产品公告: '製品のお知らせ',
42    技术博客: '技術ブログ',
43    社区动态: 'コミュニティニュース',
44    行业洞察: '業界インサイト',
45    热门推荐: 'おすすめ記事',
46    '新闻动态 | qKnow 智能体构建平台':
47        'ニュース|qKnow エージェント構築プラットフォーム',
48    'qKnow动态,qKnow新闻,智能体平台动态,知识图谱资讯,知识库RAG资讯,企业AI资讯,AI智能体行业洞察,大模型应用资讯,开源智能体项目,千桐科技动态':
49        'qKnowニュース,qKnow最新情報,エージェントプラットフォーム,ナレッジグラフ,RAGナレッジベース,企業AI,AIエージェント業界インサイト,大規模言語モデル活用,オープンソース・エージェント,千桐テクノロジー',
50    '了解 qKnow 智能体构建平台的产品发布、版本更新、技术博客、行业洞察与开源社区动态,持续获取知识图谱、知识库RAG、AI智能体与企业级大模型应用的最新实践。':
51        'qKnow エージェント構築プラットフォームの製品リリース、バージョン更新、技術ブログ、業界インサイト、オープンソースコミュニティの最新情報をご覧いただけます。ナレッジグラフ、RAGナレッジベース、AIエージェント、企業向け大規模言語モデル活用の最新事例を継続的に発信します。',
52    首页轮播: 'ホームカルーセル',
53    资讯动态: 'ニュースとお知らせ',
54    常见问题: 'よくあるご質問',
55    '常见问题(FAQ)': 'よくあるご質問(FAQ)',
56    产品生态: '製品エコシステム',
57    核心能力: '主要機能',
58    核心能力体系: '主要機能体系',
59    产品展示: '製品紹介',
60    方案特色: 'ソリューションの特長',
61    方案架构图: 'ソリューション構成図',
62    业务痛点: '業務課題',
63    核心收益: '主な効果',
64    荣誉资质: '認証・受賞歴',
65    权威认证与资质背书: '認証・資格',
66    千桐科技: '千桐テクノロジー',
67    千桐科技官网: '千桐テクノロジー公式サイト',
68    qKnow智能体构建平台: 'qKnow エージェント構築プラットフォーム',
69    'qKnow 智能体构建平台': 'qKnow エージェント構築プラットフォーム',
70    qData数据中台: 'qData データ基盤',
71    'qData 数据中台': 'qData データ基盤',
72    qAuth统一身份认证平台: 'qAuth 統合ID認証プラットフォーム',
73    qModel算法模型平台: 'qModel アルゴリズムモデルプラットフォーム',
74    'Copyright ©2018-2026 qknow.tech All Rights Reserved qKnow版权所有':
75        'Copyright ©2018-2026 qknow.tech All Rights Reserved',
76    'Copyright ©2018-2026 qKnow.tech All Rights Reserved qKnow版权所有':
77        'Copyright ©2018-2026 qKnow.tech All Rights Reserved'
78};
79
80const JA_TEXT_TRANSLATIONS = {
81    ...JA_CORE_TEXT_TRANSLATIONS,
82    ...JA_HOME_COMMON_TEXT_TRANSLATIONS,
83    ...JA_SOLUTION_CASE_TEXT_TRANSLATIONS,
84    ...JA_BLOG_TEXT_TRANSLATIONS,
85    // Keep the compact standalone edition label used by the pricing cards.
86    '专业版': JA_HOME_COMMON_TEXT_TRANSLATIONS['专业版']
87};
88
89const JA_TERM_REPLACEMENTS = [
90    ['qKnow智能体构建平台专业版', 'qKnow エージェント構築プラットフォーム プロフェッショナル版'],
91    ['qKnow智能体构建平台开源版', 'qKnow エージェント構築プラットフォーム オープンソース版'],
92    ['qKnow智能体构建平台', 'qKnow エージェント構築プラットフォーム'],
93    ['qKnow 智能体构建平台', 'qKnow エージェント構築プラットフォーム'],
94    ['企业级智能体构建平台', '企業向けエージェント構築プラットフォーム'],
95    ['智能体构建平台', 'エージェント構築プラットフォーム'],
96    ['泵站故障诊断与预测性运维', 'ポンプ場の故障診断・予知保全'],
97    ['泵站故障诊断与预测运维', 'ポンプ場の故障診断・予知保全'],
98    ['泵站智能运维与故障诊断', 'ポンプ場のスマート保守・故障診断'],
99    ['知识库RAG', 'RAGナレッジベース'],
100    ['知识库 RAG', 'RAGナレッジベース'],
101    ['知识图谱', 'ナレッジグラフ'],
102    ['向量知识库', 'ベクトルナレッジベース'],
103    ['智能体应用', 'エージェントアプリケーション'],
104    ['智能体', 'エージェント'],
105    ['大模型应用', '大規模言語モデル活用'],
106    ['大模型', '大規模言語モデル'],
107    ['企业级', 'エンタープライズ'],
108    ['专业版', 'プロフェッショナル版'],
109    ['开源版', 'オープンソース版'],
110    ['商业版', '商用版'],
111    ['海外版', '海外版'],
112    ['私有化部署', 'プライベート導入'],
113    ['本地化部署', 'オンプレミス導入'],
114    ['源码授权', 'ソースコードライセンス'],
115    ['源码交付', 'ソースコード提供'],
116    ['白盒化开发', 'ホワイトボックス開発'],
117    ['可视化编排', 'ビジュアル編成'],
118    ['低代码', 'ローコード'],
119    ['零代码', 'ノーコード'],
120    ['工作流', 'ワークフロー'],
121    ['插件中心', 'プラグインセンター'],
122    ['插件化', 'プラグイン型'],
123    ['知识中台', 'ナレッジ基盤'],
124    ['知识平台', 'ナレッジプラットフォーム'],
125    ['知识库', 'ナレッジベース'],
126    ['知识融合', 'ナレッジ統合'],
127    ['知识抽取', 'ナレッジ抽出'],
128    ['知识推理', 'ナレッジ推論'],
129    ['知识问答', 'ナレッジQ&A'],
130    ['知识检索', 'ナレッジ検索'],
131    ['知识治理', 'ナレッジガバナンス'],
132    ['知识管理', 'ナレッジ管理'],
133    ['知识服务', 'ナレッジサービス'],
134    ['知识资产', 'ナレッジ資産'],
135    ['知识体系', 'ナレッジ体系'],
136    ['知识运营', 'ナレッジ運用'],
137    ['语义检索', 'セマンティック検索'],
138    ['图谱可视化', 'グラフ可視化'],
139    ['结构化抽取', '構造化抽出'],
140    ['非结构化抽取', '非構造化抽出'],
141    ['非结构化数据', '非構造化データ'],
142    ['多模态', 'マルチモーダル'],
143    ['数据可视化', 'データ可視化'],
144    ['数据治理', 'データガバナンス'],
145    ['数据资产', 'データ資産'],
146    ['数据中台', 'データ基盤'],
147    ['数据接入', 'データ接続'],
148    ['数据清洗', 'データクレンジング'],
149    ['数据建模', 'データモデリング'],
150    ['多源数据', '複数ソースのデータ'],
151    ['业务场景', '業務シーン'],
152    ['应用场景', 'ユースケース'],
153    ['行业场景', '業界シーン'],
154    ['行业解决方案', '業界ソリューション'],
155    ['解决方案', 'ソリューション'],
156    ['行业洞察', '業界インサイト'],
157    ['行业', '業界'],
158    ['业务', '業務'],
159    ['产品能力', '製品機能'],
160    ['平台能力', 'プラットフォーム機能'],
161    ['核心能力', '主要機能'],
162    ['功能介绍', '機能紹介'],
163    ['功能讲解', '機能解説'],
164    ['功能预告', '新機能予告'],
165    ['版本发布', 'バージョンリリース'],
166    ['版本升级', 'バージョンアップ'],
167    ['正式发布', '正式リリース'],
168    ['开源项目', 'オープンソースプロジェクト'],
169    ['开源社区', 'オープンソースコミュニティ'],
170    ['免费试用', '無料トライアル'],
171    ['客户案例', '導入事例'],
172    ['产品公告', '製品のお知らせ'],
173    ['技术博客', '技術ブログ'],
174    ['社区动态', 'コミュニティニュース'],
175    ['热门推荐', 'おすすめ記事'],
176    ['全部动态', 'すべてのニュース'],
177    ['联系我们', 'お問い合わせ'],
178    ['商务合作', '事業提携'],
179    ['查看详情', '詳細を見る'],
180    ['立即咨询', '今すぐ相談'],
181    ['获取资料', '資料を入手'],
182    ['首页', 'ホーム']
183].sort(([left], [right]) => right.length - left.length);
184
185const TRANSLATION_ENTRIES = Object.entries(JA_TEXT_TRANSLATIONS).sort(
186    ([left], [right]) => right.length - left.length
187);
188
189const DATE_PATTERN = /(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日(?:\s*(\d{1,2}):(\d{2}))?/g;
190
191const replaceAllLiteral = (value, search, replacement) => value.split(search).join(replacement);
192
193const formatJapaneseDate = (_match, year, month, day, hour, minute) => {
194    const date = `${year}年${Number(month)}月${Number(day)}日`;
195    return hour ? `${date} ${hour}:${minute}` : date;
196};
197
198export const isJapaneseLocale = () => {
199    if (typeof document === 'undefined') {
200        return false;
201    }
202
203    return (document.documentElement.lang || '').toLowerCase().startsWith('ja');
204};
205
206export const translateToJapanese = (value) => {
207    if (typeof value !== 'string') {
208        return value;
209    }
210
211    const leading = value.match(/^\s*/)?.[0] || '';
212    const trailing = value.match(/\s*$/)?.[0] || '';
213    const normalized = value.replace(/\s+/g, ' ').trim();
214
215    if (!normalized) {
216        return value;
217    }
218
219    if (JA_TEXT_TRANSLATIONS[normalized]) {
220        return `${leading}${JA_TEXT_TRANSLATIONS[normalized]}${trailing}`;
221    }
222
223    let translated = normalized.replace(DATE_PATTERN, formatJapaneseDate);
224
225    for (const [source, target] of TRANSLATION_ENTRIES) {
226        if (translated.includes(source)) {
227            translated = replaceAllLiteral(translated, source, target);
228        }
229    }
230
231    for (const [source, target] of JA_TERM_REPLACEMENTS) {
232        if (translated.includes(source)) {
233            translated = replaceAllLiteral(translated, source, target);
234        }
235    }
236
237    return `${leading}${translated}${trailing}`;
238};
239
240export const translateObjectToJapanese = (value) => {
241    if (typeof value === 'string') {
242        return translateToJapanese(value);
243    }
244
245    if (Array.isArray(value)) {
246        return value.map(translateObjectToJapanese);
247    }
248
249    if (value && typeof value === 'object') {
250        return Object.fromEntries(
251            Object.entries(value).map(([key, item]) => [key, translateObjectToJapanese(item)])
252        );
253    }
254
255    return value;
256};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.