From 1dcb790f4423d26d88fb148c71b1dbef162b9171 Mon Sep 17 00:00:00 2001 From: miteruzo Date: Sun, 18 Oct 2026 12:57:09 +0900 Subject: [PATCH] #428 --- frontend/index.html | 2 +- frontend/scripts/generate-sitemap.js | 3 +- frontend/src/App.tsx | 2 + frontend/src/components/ErrorScreen.tsx | 10 +- frontend/src/components/common/PageHead.tsx | 34 ++++ frontend/src/config.sample.ts | 4 +- frontend/src/lib/useUITranslation.ts | 3 +- frontend/src/locales/ain-Kana/gekanator.json | 3 +- frontend/src/locales/ain-Kana/shared.json | 1 + frontend/src/locales/ja/gekanator.json | 1 + frontend/src/locales/ja/shared.json | 3 + frontend/src/pages/GekanatorPage.tsx | 9 +- .../src/pages/GekanatorUnavailablePage.tsx | 8 +- frontend/src/pages/MorePage.tsx | 8 +- frontend/src/pages/TOSPage/ain-Kana.mdx | 145 +++++++++++++++--- frontend/src/pages/TOSPage/index.tsx | 21 ++- frontend/src/pages/TOSPage/ja.mdx | 6 - .../deerjikists/DeerjikistDetailPage.tsx | 4 +- frontend/src/pages/help/HelpChangesPage.tsx | 7 +- frontend/src/pages/help/HelpDetailPage.tsx | 9 +- frontend/src/pages/help/HelpDiffPage.tsx | 7 +- frontend/src/pages/help/HelpListPage.tsx | 7 +- .../pages/materials/MaterialDetailPage.tsx | 9 +- .../pages/materials/MaterialHistoryPage.tsx | 9 +- .../src/pages/materials/MaterialListPage.tsx | 8 +- .../src/pages/materials/MaterialNewPage.tsx | 7 +- .../MaterialSyncSuppressionsPage.tsx | 7 +- frontend/src/pages/posts/PostDetailPage.tsx | 10 +- frontend/src/pages/posts/PostHistoryPage.tsx | 9 +- .../src/pages/posts/PostImportReviewPage.tsx | 7 +- .../src/pages/posts/PostImportSourcePage.tsx | 7 +- frontend/src/pages/posts/PostListPage.tsx | 17 +- frontend/src/pages/posts/PostSearchPage.tsx | 7 +- frontend/src/pages/tags/NicoTagListPage.tsx | 61 ++++---- frontend/src/pages/tags/TagDetailPage.tsx | 2 + frontend/src/pages/tags/TagHistoryPage.tsx | 9 +- frontend/src/pages/tags/TagListPage.tsx | 7 +- .../src/pages/theatres/TheatreDetailPage.tsx | 8 +- frontend/src/pages/users/SettingPage.tsx | 8 +- frontend/src/pages/wiki/WikiDetailPage.tsx | 12 +- frontend/src/pages/wiki/WikiDiffPage.tsx | 7 +- frontend/src/pages/wiki/WikiEditPage.tsx | 7 +- frontend/src/pages/wiki/WikiHistoryPage.tsx | 7 +- frontend/src/pages/wiki/WikiNewPage.tsx | 7 +- frontend/src/pages/wiki/WikiSearchPage.tsx | 9 +- 45 files changed, 302 insertions(+), 236 deletions(-) create mode 100644 frontend/src/components/common/PageHead.tsx diff --git a/frontend/index.html b/frontend/index.html index e134ffd..fee5bd3 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - + ぼざクリ タグ広場 〜 ぼざろクリーチャーシリーズ綜合リンク集 diff --git a/frontend/scripts/generate-sitemap.js b/frontend/scripts/generate-sitemap.js index 774f415..0abb77e 100644 --- a/frontend/scripts/generate-sitemap.js +++ b/frontend/scripts/generate-sitemap.js @@ -11,7 +11,8 @@ const formatDate = (date = new Date) => { return `${ year }-${ month }-${ day }` } -const SITE_TITLE = 'ぼざクリ タグ広場' +const SITE_TITLE = JSON.parse (fs.readFileSync ( + new URL ('../src/locales/ja/shared.json', import.meta.url), 'utf8')).labels.brand const DOMAIN = 'https://hub.nizika.monster' const API_BASE_URL = 'https://hub.nizika.monster/api' diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ebca5ea..60692a8 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -14,6 +14,7 @@ import DevModeWatermark from '@/components/DevModeWatermark' import RouteBlockerOverlay from '@/components/RouteBlockerOverlay' import TopNav from '@/components/TopNav' import DialogueProvider from '@/components/dialogues/DialogueProvider' +import PageHead from '@/components/common/PageHead' import { Toaster } from '@/components/ui/toaster' import { apiPost, isApiError } from '@/lib/api' import { fetchLocales, isLocaleCode, legacyLocalePath, switchLocalePath } from '@/lib/locales' @@ -253,6 +254,7 @@ const RoutedApp = ({ locales }: { locales: AvailableLocale[] }) => { return ( + = ({ status }) => { return ( - + - {title} | {SITE_TITLE} - +
+ {children} + ) +} + + +export default PageHead diff --git a/frontend/src/config.sample.ts b/frontend/src/config.sample.ts index dc9e1eb..06495fe 100644 --- a/frontend/src/config.sample.ts +++ b/frontend/src/config.sample.ts @@ -2,8 +2,6 @@ const ENV: string = 'development' const config = { - API_BASE_URL: ENV === 'production' ? 'https://hub.nizika.monster/api' : 'http://localhost:3002', - SITE_TITLE: 'ぼざクリ タグ広場'} + API_BASE_URL: ENV === 'production' ? 'https://hub.nizika.monster/api' : 'http://localhost:3002' } export const API_BASE_URL = config.API_BASE_URL -export const SITE_TITLE = config.SITE_TITLE diff --git a/frontend/src/lib/useUITranslation.ts b/frontend/src/lib/useUITranslation.ts index 6751652..b37a06a 100644 --- a/frontend/src/lib/useUITranslation.ts +++ b/frontend/src/lib/useUITranslation.ts @@ -20,5 +20,6 @@ export const useUITranslation = (namespace = 'common') => { language: result.language, children: result.text }) }, [message]) - return { message, label } + const siteTitle = message ('shared:labels.brand') + return { message, label, siteTitle } } diff --git a/frontend/src/locales/ain-Kana/gekanator.json b/frontend/src/locales/ain-Kana/gekanator.json index 6afd3eb..711d6a8 100644 --- a/frontend/src/locales/ain-Kana/gekanator.json +++ b/frontend/src/locales/ain-Kana/gekanator.json @@ -1,4 +1,5 @@ -{ "unavailable": { +{ "title": "$t(navigation:gekanator)", + "unavailable": { "title": "Gekanator タネ シサㇺ イタㇰ アニ パテㇰ エシノッ エアㇱカイ!", "back": "ホㇱキ ソㇱ ウン ホㇱピ", "switchToJapanese": "シサㇺ イタㇰ ウン シンナ", diff --git a/frontend/src/locales/ain-Kana/shared.json b/frontend/src/locales/ain-Kana/shared.json index 67fae6a..29456f4 100644 --- a/frontend/src/locales/ain-Kana/shared.json +++ b/frontend/src/locales/ain-Kana/shared.json @@ -1,4 +1,5 @@ { + "head": { "description": "$t(posts:list.tagline)" }, "dialogue": { "confirm": "エヌカㇻ ワ ピㇼカ", "close": "$t(settings:actions.close)" diff --git a/frontend/src/locales/ja/gekanator.json b/frontend/src/locales/ja/gekanator.json index b211394..078a91c 100644 --- a/frontend/src/locales/ja/gekanator.json +++ b/frontend/src/locales/ja/gekanator.json @@ -1,4 +1,5 @@ { + "title": "グカネータ", "unavailable": { "title": "グカネータは現在日本語のみでプレー可能です!", "back": "前の画面に戻る", diff --git a/frontend/src/locales/ja/shared.json b/frontend/src/locales/ja/shared.json index 38f9aae..8e99097 100644 --- a/frontend/src/locales/ja/shared.json +++ b/frontend/src/locales/ja/shared.json @@ -1,4 +1,7 @@ { + "head": { + "description": "ぼざクリ ぼざろクリーチャーシリーズ 伊地知ニジカ リンク集 Wiki ニコニコ" + }, "dialogue": { "confirm": "確定", "close": "閉ぢる" }, "sidebarWidth": "サイドバー幅", "url": "URL", diff --git a/frontend/src/pages/GekanatorPage.tsx b/frontend/src/pages/GekanatorPage.tsx index d6d7009..f99ac4d 100644 --- a/frontend/src/pages/GekanatorPage.tsx +++ b/frontend/src/pages/GekanatorPage.tsx @@ -1,12 +1,12 @@ import { animate, motion, useMotionTemplate, useMotionValue } from 'framer-motion' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import { Helmet } from 'react-helmet-async' import { useLocale } from '@/lib/useLocale' import PrefetchLink from '@/components/PrefetchLink' import MainArea from '@/components/layout/MainArea' -import { SITE_TITLE } from '@/config' +import PageHead from '@/components/common/PageHead' +import { useUITranslation } from '@/lib/useUITranslation' import { expectedAnswerForQuestion, fetchGekanatorExtraQuestions, fetchGekanatorQuestions, @@ -3679,6 +3679,7 @@ const expectedAnswerFor = ( const GekanatorPage: FC<{ user: User | null }> = ({ user }) => { + const { message } = useUITranslation ('gekanator') const locale = useLocale () const behaviourSettings = useClientBehaviourSettings () const animationMode = behaviourSettings.animation ?? 'normal' @@ -4914,9 +4915,7 @@ const GekanatorPage: FC<{ user: User | null }> = ({ user }) => { return ( - - {`グカネータ | ${ SITE_TITLE }`} - + { return ( - - {title.text} | {SITE_TITLE} + - +

{ return ( - - {message ('labels.menu').text} | {SITE_TITLE} - + {[...Array (Math.ceil (menu.length / 4)).keys ()].map (i => (
diff --git a/frontend/src/pages/TOSPage/ain-Kana.mdx b/frontend/src/pages/TOSPage/ain-Kana.mdx index f675dc6..1dc3dab 100644 --- a/frontend/src/pages/TOSPage/ain-Kana.mdx +++ b/frontend/src/pages/TOSPage/ain-Kana.mdx @@ -1,22 +1,127 @@ -export const translationStatus = 'untranslated-draft' +import MainArea from '@/components/layout/MainArea' +import { localisedDateString } from '@/lib/utils' -export const reviewRequired = [ - '前文:利用による同意と適用範囲', - '第1条:サービスの位置づけ・仕様変更', - '第2条:公開方針・利用者区分・権限', - '第3条:認証情報・引継ぎコード・責任', - '第4条:編輯義務・承認・可撤回の権限', - '第5条:各禁止行為と権利侵害の範囲', - '第6条:利用者の責任・非独占的利用許諾・権利帰属', - '第7条:外部サービスの条件・保証の否定', - '第8条:履歴保持・差戻・削除・完全消去の例外', - '第9条:利用制限・資格取消・BAN・開示義務', - '第10条:未成年の安全と表示制限', - '第11条:聯絡方法・回答義務と保証の否定', - '第12条:免責・保証の否定・サービス停止', - '第13条:規約変更・発効時点・継続利用による同意', - '第14条:日本法・専属的合意管轄・法令上の例外', - '附則:適用日'] +export const lastUpdatedAt = localisedDateString ('2026-04-12', 'ain-Kana', 'hour') -{/* No Ainu translation has been supplied or approved. Do not publish this - draft or substitute a phonetic transcription of the Japanese source. */} + +
+ # アエイワンケ イタㇰ + + イオッタ アシㇼ アヌイェ ト: {lastUpdatedAt} + + タン アエイワンケ イタㇰ(タプ ワ 「タン イタㇰ」 セコㇿ アニェ) アナㇰネ、ポチ チャ ロㇰ シクヌㇷ゚ イキㇼ チセ(タプ ワ 「タン チヘコテㇷ゚」 セコㇿ アニェ) アエイワンケ ヒ オㇿ アヌイェ イタㇰ ネ。 タン チヘコテㇷ゚ エイワンケ クㇽ アナㇰネ、エイワンケ ヒ タ タン イタㇰ エセ ルウェ ネ セコㇿ インカルㇱクㇽ ラム。 + + ## 1 タン チヘコテㇷ゚ ネ ペ + + 1. タン チヘコテㇷ゚ アナㇰネ、タグ、Wiki、ソイ ウコテㇷ゚ アウウェカㇻパ ワ、アエラムアン ペ ウココㇿ クス アエイワンケ シㇱテㇺ ネ。 + 2. タン チヘコテㇷ゚ オㇿ アナㇰネ、アカㇻペ シンナ サンケ ヒ アナㇰ ソモ シノ ポロ アタイ ネ。 タグ クス アカㇻペ アウウェカㇻパ、アフナラ、スイ アヌカㇻ、ネワ ネワ イタㇰ アウコオㇷ゚テ ヒ アナㇰ シノ ポロ アタイ ネ。 + 3. インカルㇱクㇽ アナㇰネ、タン チヘコテㇷ゚ ネプキ クス コンルスイ ヤㇰネ、ネプキ カトゥ、アヌカレ ウㇱケ、レヘ、URL、アヌカレ ペ ネワ オヤ イアヌ シンナ カㇻ エアㇱカイ。 + + ## 2 アヌカレ カトゥ ネワ イエイワンケクㇽ ウタㇻ + + 1. タン チヘコテㇷ゚ ホシキノ オピッタ クㇽ オルン アサンケ ヒ タ、**ネン ネ ヤッカ ヌカㇻ エアㇱカイ。 コㇿカ、アシンノ アサンケ ネワ シンナ カㇻ ヒ クス アコサウヌ クㇽ パテㇰ エアㇱカイ。** + 2. ホシキノ オピッタ クㇽ オルン アサンケ ヒ タ、`農奴` セコㇿ アン クㇽ アナㇰネ ヌカㇻ パテㇰ エアㇱカイ。 + 3. アサンケペ、タグ、Wiki ネワ オヤ ペ シンナ カㇻ ヒ アナㇰネ、インカルㇱクㇽ アコサウヌ クㇽ、`耕作員` セコㇿ アン クㇽ パテㇰ エアㇱカイ。 + 4. `独裁者` セコㇿ アン クㇽ アナㇰネ、`耕作員` エアㇱカイ ネプキ カ エアㇱカイ。 ソレ パㇰノ ソモ ネ、アヌイェペ ホシピレ、イサㇺカ、クㇽ イキ ヒ カㇱマ、オヤ カンリ ネプキ カ カㇻ エアㇱカイ。 + 5. インカルㇱクㇽ アナㇰネ、シンナ カㇻ ヒ フㇱコ アンペ アウカオ、ホシピレ、BAN、アヌカㇻ ワ アオㇿセ クス アン ル ネワ オヤ カンリ ネプキ ピㇼカノ アカㇻ ルウェ アン セコㇿ ラム ヤㇰネ、`農奴` オルン シンナ カㇻ エアㇱカイ ペ アヌンコレ エアㇱカイ。 + 6. クㇽ ネ カトゥ、ネプキ エアㇱカイ ペ、アコサウヌ クス アコイタㇰ カトゥ、アコサウヌ クス アヌカㇻ ペ、アコサウヌ オカケ カトゥ アナㇰネ、インカルㇱクㇽ コンルスイ コㇿ アヌイェ ワ シンナ カㇻ エアㇱカイ。 + + ## 3 エイワンケ ヘアㇱ ヒ ネワ ヒキツギコード + + 1. タン チヘコテㇷ゚ オㇿ アナㇰネ、Id. ネワ パスワード パテㇰ アエイワンケ ソモ ネ。 インカルㇱクㇽ アヌㇺケ 認証情報 ネワ ヒキツギコード アエイワンケ エアㇱカイ。 + 2. イエイワンケクㇽ アナㇰネ、ヤイ オルン アウンコレ ヒキツギコード、認証情報、ネワ ヤイ 端末 オッタ アウカオ ペ ヤイ ネプキ ネ ワ ピㇼカノ コㇿ クニ ネ。 + 3. イエイワンケクㇽ アナㇰネ、ヤイ ヒキツギコード ネワ 認証情報 オヤ クㇽ オルン コレ、アエソセ、ウココㇿ、アエラムヌ カ イテキ。 + 4. ヒキツギコード アエラムヌ、オヤ クㇽ エイワンケ、アサㇰ、アウㇰ ネワ オヤ イㇰネ クス、イエイワンケクㇽ ネワ オヤ クㇽ エウタサ ウェン ペ アン ヤㇰカ、インカルㇱクㇽ アナㇰネ ネア ウェン ペ ヤイ ネプキ ネ ソモ コㇿ。 + 5. インカルㇱクㇽ アナㇰネ、ネン ネ ヒ アフナラ、ウェン イキ アエモㇱマ、アヌカㇻ ワ アオㇿセ、ネワ シㇱテㇺ アコセレ クス、エイワンケ アスルソㇱ ネワ アクセス アスルソㇱ アウコテ ワ エイワンケ エアㇱカイ。 + + ## 4 アコサウヌ シンナ カㇻ ヒ オㇿ アン イタㇰ + + 1. `耕作員` アナㇰネ、タグ アウウェカㇻパ シㇱテㇺ ピㇼカ カトゥ アウカオ ヒ イオッタ エトコ オマレ クニ ネ。 ヤイ コㇿ ペ セコㇿ ソモ ラム、アフナラ エアㇱカイ ヒ、スイ エイワンケ エアㇱカイ ヒ、アヌカㇻ エアㇱカイ ヒ、ウコシネ カトゥ ピㇼカ ヒ エトコ オマレ クニ ネ。 + 2. `耕作員` アナㇰネ、ヤイ エラムㇷ゚キㇻ ヒ、ヤイ ウタㇻ ウコイタㇰ、イコㇿヌ イキ、イウタサ イタㇰ ネワ ウウェン イキ クス、タグ ネワ Wiki シンナ カㇻ カ イテキ。 + 3. `耕作員` アナㇰネ、アエラㇺペテㇰ ペ アオウペカレ、タグ ウコアタㇺ、ウコテㇷ゚ アコセレ、ネワ アスルソㇱ アコオㇷ゚テ クス シンナ カㇻ クニ ネ。 + 4. インカルㇱクㇽ アナㇰネ、アコイタㇰ ペ、フㇱコ イキ カトゥ、シンナ カㇻ ペ ピㇼカ ヒ、イコイタㇰ エアㇱカイ ヒ、ネワ ネプキ エアㇱカイ ヒ アヌカㇻ ワ、アコサウヌ、アカオ、アエテㇰ、ネワ アウㇰ エアㇱカイ。 + 5. `耕作員` ネ ヒ アナㇰネ、オウペカノ ネ ペ ソモ ネ。 インカルㇱクㇽ タン チヘコテㇷ゚ アコセレ クス ウンコレ ペ ネ ワ、ホシㇷ゚ アウㇰ エアㇱカイ ペ ネ。 + + ## 5 イテキ アキ クニ ペ + + イエイワンケクㇽ アナㇰネ、タプ アン イキ カトゥ イテキ キ。 + + 1. イレンカ ネワ オピッタ クㇽ アコㇿ ピㇼカ カトゥ ウコㇻ ヒ アトゥイェ ペ。 + 2. ウェン イキ アエカスイ、ネワ ウェン イキ オルン ウコテ ペ。 + 3. アヌイェクㇽ オウペカノ、著作者人格権、商標権、肖像権、パブリシティ権、プライバシー権 ネワ オヤ クㇽ コㇿ オウペカノ アエアㇱカイ ペ アエトゥイェ ペ。 + 4. オヤ クㇽ アヌイェ ペ エセ イサㇺ ノ アサンケ、イレンカ ソモ エセ アップロード、アコピ、海賊版、ウンコレ ソモ アン ウㇱケ オルン クㇽ アソンココレ、ネワ ネア イキ アオウペカレ、アサンケ、アエカスイ ペ。 + 5. ソンノ アン クㇽ オルン ウェン イタㇰ、イコヤイシㇻカ、ウタㇻ アシㇰヌカㇻ、イウェンテ、イウヌ イキ、イコペウㇰ、イレンカ ソモ エセ イキ、ネワ オヤ クㇽ イウェンテ ペ。 + 6. オヤ クㇽ コㇿ プライベート アスルソㇱ、アサンケ ソモ アン アスルソㇱ、エシナ クニ ペ アナㇰネ、ネア クㇽ エセ ソモ キ コㇿ アサンケ、アソンココレ、ウココㇿ、ネワ ネン ネ ヤッカ エラムアン エアㇱカイ カトゥ アヌカレ ペ。 + 7. ソモ ソンノ ネ アスルソㇱ、クㇽ エラムㇱカリ ネ アスルソㇱ、アスルソㇱ モトホ アオスラ ペ、アヌンコレ ソモ アン タグ、ソモ ウコテ タグ ポロンノ アオマレ、アウウェカㇻパ シㇱテㇺ アウェンテ、アフナラ アウェンテ ネワ オヤ ウェン イキ。 + 8. マルウェア、フィッシング、詐欺、誘導広告、ウェン リダイレクト、キケン ソイ ウコテㇷ゚ ネワ イエイワンケクㇽ ネ ヤッカ インカルㇱクㇽ オルン ウェン ペ アカㇻ ペ。 + 9. タン チヘコテㇷ゚ コㇿ イレンカ エアㇱカイ ソモ ネ 政治 イウヌ イタㇰ、宗教 オルン イコタㇺ、モン クス 宣伝、ウコヤヤㇻ イタㇰ、スパム、シネ イタㇰ スイ スイ アサンケ ペ。 + 10. ポン クㇽ イカㇱヌ ヒ アウェンテ、児童性的搾取、イレンカ ソモ エセ 性的表現、ルイ ソモ ピㇼカ 性的表現 ネワ 残虐表現 クス、オピッタ クㇽ ヌカㇻ ウㇱケ オルン ヤイトゥパレ イサㇺ ノ アサンケ ペ。 + 11. インカルㇱクㇽ、オヤ イエイワンケクㇽ、ソイ チヘコテㇷ゚ ネワ オヤ クㇽ オルン ポロ ネプキ、ウェン ペ、ウウェン カトゥ アカㇻ ペ。 + 12. エトコ タ アヌイェ イキ カトゥ アキ クス アモㇱマ、オヤ クㇽ オルン アキレ、ネワ ネア イキ エアㇱカイ クニ アカㇻ ペ。 + 13. オヤ イキ ネ ヤッカ、タン チヘコテㇷ゚ コㇿ イレンカ ネワ アプンノ アコセレ ヒ クス インカルㇱクㇽ ウェン セコㇿ ラム ペ。 + + ## 6 アサンケペ、タグ、Wiki ネワ オヤ ペ + + 1. イエイワンケクㇽ アナㇰネ、ヤイ アサンケ、シンナ カㇻ、アヌイェ、アソンココレ ネワ アキル アスルソㇱ クス、ネア ペ エイワンケ エアㇱカイ オウペカノ ネワ イレンカ エセ ヒ アン クニ ネ。 + 2. イエイワンケクㇽ アナㇰネ、ヤイ アサンケペ、タグ アオマレ ヒ、Wiki アシンナ カㇻ ヒ、ウエペケレ イタㇰ、コメント、ネワ ウコテ ヒ オピッタ クス ヤイ ネプキ ネ ワ アコㇿ クニ ネ。 + 3. イエイワンケクㇽ アナㇰネ、インカルㇱクㇽ オルン、タン チヘコテㇷ゚ アコセレ、アヌカレ、アコピ、アウカオ、アソンココレ、アウウェカㇻパ、引用、フㇱコ アン ペ アヌカレ、ホシピレ、バックアップ、シㇱテㇺ ウェン ヒ アコセレ、ネワ 弘報 クス コンルスイ パㇰノ、ヤイ アカㇻ アスルソㇱ モン アウㇰ ソモ キ ノ、オヤ クㇽ カ エイワンケ エアㇱカイ 非独占 オウペカノ ウンコレ。 + 4. エトコ アン ウンコレ ヒ アナㇰネ、タン チヘコテㇷ゚ アコセレ クス コンルスイ パㇰノ パテㇰ ネ。 ヤイ アカㇻ ペ コㇿ オウペカノ インカルㇱクㇽ オルン アウンコレ ルウェ ソモ ネ。 + 5. インカルㇱクㇽ アナㇰネ、タグ ウコシネ ヒ、アヌイェ カトゥ ウコシネ ヒ、エラㇺペテㇰ ペ アオウペカレ ヒ、レヘ ウコテ ヒ、ホシピレ ヒ ネワ オヤ クス、アサンケペ、タグ、Wiki ネワ オヤ ペ シンナ カㇻ、ヌカㇻ ソモ エアㇱカイ カトゥ カㇻ、イサㇺカ、ウコアタㇺ、シンナ アㇻキㇻ、ネワ フリーズ エアㇱカイ。 + + ## 7 ソイ ウコテㇷ゚ ネワ アオマレ ペ + + 1. タン チヘコテㇷ゚ オㇿ アナㇰネ、ソイ サイト オルン ウコテㇷ゚、ソイ ペ アオマレ ペ、ネワ ネア ペ コㇿ メタデータ アヌカレ エアㇱカイ。 + 2. ソイ ウコテㇷ゚ オㇿ アン オウペカノ、アエイワンケ イタㇰ、アヌカレ ウㇱケ、イサㇺカ カトゥ、広告、追跡、Cookie ネワ オヤ カトゥ アナㇰネ、ネア ソイ チヘコテㇷ゚ コㇿ イタㇰ アヌ クニ ネ。 + 3. インカルㇱクㇽ アナㇰネ、ソイ ウコテㇷ゚ イレンカ エセ ヒ、アプン ヒ、ネイ パㇰノ アン ヒ、ソンノ ネ ヒ、ピㇼカ ヒ、エイワンケ エアㇱカイ ヒ、ネワ アスルソㇱ オピッタ アン ヒ ソンノ ネ セコㇿ ソモ イタㇰ。 + 4. ソイ オウペカノ コㇿ クㇽ アコイタㇰ、インカルㇱクㇽ ラム、イレンカ アヌ、ネワ アプンノ アコセレ クス、インカルㇱクㇽ ソイ ウコテㇷ゚、アオマレ ペ、サムネイル、ウエペケレ イタㇰ ネワ オヤ アヌカレ ペ エアㇱカイ ヒ アヌㇺケ、シンナ カㇻ、アエシナ カㇻ、ネワ イサㇺカ エアㇱカイ。 + + ## 8 フㇱコ アン ペ、ホシピレ、イサㇺカ + + 1. タン チヘコテㇷ゚ オㇿ アナㇰネ、アコセレ、アヌカㇻ ワ アオㇿセ、ウェン イキ アエモㇱマ、ネワ イコイタㇰ エアㇱカイ クス、アサンケペ、タグ、Wiki ネワ オヤ シンナ カㇻ フㇱコ アンペ アウカオ、アヌカレ、ネワ インカルㇱクㇽ パテㇰ ヌカㇻ エアㇱカイ。 + 2. イエイワンケクㇽ アナㇰネ、シネ スイ シンナ カㇻ ペ オカケ タ ホシピレ、アシンナ カㇻ、アエシナ カㇻ、ネワ イサㇺカ エアㇱカイ ヒ エトコ タ エラムアン クニ ネ。 + 3. イエイワンケクㇽ イサㇺカ クス コンルスイ ヤㇰカ、イレンカ、アコセレ、アヌカㇻ ワ アオㇿセ、ウエン カトゥ アオウペカレ、ネワ バックアップ クス コンルスイ ヤㇰネ、ナニ オピッタ イサㇺカ エアイカㇷ゚ カ アン。 + 4. インカルㇱクㇽ アナㇰネ、タン チヘコテㇷ゚ オピッタ ピㇼカノ アコセレ クス、エトコ タ ウエペケレ ヤㇰカ ウエペケレ ソモ キ ヤㇰカ、フㇱコ アンペ アヌカレ ウㇱケ、アウカオ パキ、ホシピレ イレンカ、ネワ イサㇺカ イレンカ アヌイェ ワ シンナ カㇻ エアㇱカイ。 + + ## 9 エイワンケ アヌㇺケ、`耕作員` アウㇰ、BAN + + 1. インカルㇱクㇽ アナㇰネ、イエイワンケクㇽ タプ アン シネ ペ ネ ヤッカ イキ セコㇿ ラム ヤㇰネ、エトコ タ ソンコ コレ ソモ キ ワ、ネワ ソンコ コレ オカケ タ、アサンケ ネワ シンナ カㇻ ヒ アヌㇺケ、`耕作員` ネ ヒ アウㇰ、アサンケペ アエシナ カㇻ ネワ イサㇺカ、ヒキツギコード エイワンケ エアイカㇷ゚ カㇻ、ユーザー BAN、IP BAN ネワ オヤ コンルスイ ペ アカㇻ エアㇱカイ。 + - タン イタㇰ ソモ アヌ ヒ。 + - タン チヘコテㇷ゚ コㇿ イレンカ ソモ エセ ワ、ネプキ アウェンテ、アㇻシ、ピㇼカ カトゥ アウェンテ ヒ。 + - インカルㇱクㇽ アヌカㇻ、アシンナ カㇻ クニ イタㇰ、オケレ クニ イタㇰ オルン、ピㇼカ モト イサㇺ ノ ソモ イタサ ヒ。 + - アヌイェ アスルソㇱ、アコイタㇰ ペ、ネワ ウエペケレ イタㇰ ソモ ソンノ ネ ヒ。 + - アプンノ アン ヒ、イレンカ アヌ ヒ、ネワ タン チヘコテㇷ゚ アコセレ クス コンルスイ ヒ。 + 2. インカルㇱクㇽ アナㇰネ、ネア イキ コㇿ モト、イレンカ、アヌカㇻ ペ ネワ ヤイ ラム カトゥ オピッタ アヌカレ クニ ネ ソモ アン。 + 3. エイワンケ アヌㇺケ オカケ タ、ネワ `耕作員` ネ ヒ アウㇰ オカケ タ ヤッカ、インカルㇱクㇽ コンルスイ ヤㇰネ、フㇱコ アンペ、ログ、アコイタㇰ カンピ、通報 カンピ ネワ オヤ アスルソㇱ アウカオ エアㇱカイ。 + + ## 10 ポン クㇽ エイワンケ ヒ + + 1. インカルㇱクㇽ アナㇰネ、ポン クㇽ アプンノ アン クス、パㇰ ネ カトゥ アヌカレ ヒ アヌㇺケ、アヌカレ ル アヌㇺケ、アエシナ カㇻ、イサㇺカ、アコイタㇰ ペ アエテㇰ ネワ オヤ イキ カㇻ エアㇱカイ。 + 2. イエイワンケクㇽ アナㇰネ、ポン クㇽ ヌカㇻ エアㇱカイ オピッタ アヌカレ ウㇱケ オルン、ポン クㇽ クス ウェン ペ ヤイトゥパレ ソモ キ ノ アサンケ カ イテキ。 + + ## 11 イコイタㇰ、通報、`御意見板` + + 1. イエイワンケクㇽ アナㇰネ、タン チヘコテㇷ゚ アヌカレ イコイタㇰ、通報、ネワ `御意見板` オルン ウコテㇷ゚ カリ、バグ アスル、ウェン ペ アスル、イサㇺカ クニ イコイタㇰ ネワ オヤ ソンコ アサンケ エアㇱカイ。 + 2. インカルㇱクㇽ アナㇰネ、オピッタ イコイタㇰ オルン イタサ イタㇰ コレ クニ ネ ソモ アン。 イタサ イタㇰ コレ パキ、ネプ アカㇻ ヒ、ネワ ネコン アカㇻ ヒ ソンノ ネ セコㇿ ソモ イタㇰ。 + + ## 12 インカルㇱクㇽ ヤイ ネプキ ネ ソモ コㇿ ヒ + + 1. インカルㇱクㇽ アナㇰネ、タン チヘコテㇷ゚ シネ イレンカ クス ピㇼカ ヒ、オピッタ アン ヒ、ソンノ ネ ヒ、ネイ パㇰノ アン ヒ、アプン ヒ、ウェン ペ イサㇺ ヒ、ネワ イエイワンケクㇽ コンルスイ ペ ネ ヒ ソンノ ネ セコㇿ ソモ イタㇰ。 + 2. ソイ ウコテㇷ゚、ソイ アオマレ ペ、オヤ クㇽ アサンケペ、イエイワンケクㇽ ウタㇻ ウウェン ヒ、通信 アウェン ヒ、アスルソㇱ イサㇺ ヒ、ソモ オウペカノ アウウェカㇻパ、ソモ オウペカノ ウコテ、ソモ オウペカノ アヌイェ、ホシピレ、ネプキ オケレ ヒ、ネワ イアヌ シンナ カㇻ ヒ クス ウェン ペ アン ヤㇰカ、インカルㇱクㇽ アナㇰネ ネア ウェン ペ ヤイ ネプキ ネ ソモ コㇿ。 + 3. タン チヘコテㇷ゚ アナㇰネ、エトコ タ ソンコ コレ ソモ キ ワ オケレ、アシンナ シンナ カㇻ、ネワ ポンノ パテㇰ ネ エアㇱカイ。 + + ## 13 タン イタㇰ シンナ カㇻ ヒ + + 1. インカルㇱクㇽ アナㇰネ、イレンカ シンナ ネ ヒ、ネプキ アシンノ オマレ ヒ、ネプキ カトゥ シンナ カㇻ ヒ、アプンノ アン クス、イタㇰ アオウペカレ ヒ ネワ オヤ モト クス、タン イタㇰ シンナ カㇻ エアㇱカイ。 + 2. アシンノ シンナ アカㇻ タン イタㇰ アナㇰネ、タン チヘコテㇷ゚ オッタ アサンケ ヒ タ、ネワ インカルㇱクㇽ オヤ パキ アヌイェ ヤㇰネ ネア パキ タ、エイワンケ クス アン イタㇰ ネ。 + 3. タン イタㇰ シンナ アカㇻ オカケ タ タン チヘコテㇷ゚ エイワンケ クㇽ アナㇰネ、アシンノ シンナ アカㇻ イタㇰ エセ ルウェ ネ セコㇿ インカルㇱクㇽ ラム。 + + ## 14 イレンカ ネワ 裁判所 + + 1. タン イタㇰ ネワ タン チヘコテㇷ゚ アエイワンケ ヒ アナㇰネ、日本 イレンカ アヌ クニ ネ。 + 2. タン イタㇰ ネワ タン チヘコテㇷ゚ クス ウウェン イタㇰ ネ ヤッカ、インカルㇱクㇽ オカ ウㇱケ コㇿ 裁判所 アナㇰネ、ホシキ 裁判 オㇿ パテㇰ アウウェネウサㇻ ウㇱケ ネ セコㇿ アウコイタㇰ。 コㇿカ、イレンカ オッタ オヤ イアヌ アン ヤㇰネ、ネア イレンカ アヌ クニ ネ。 + + ## オカケ イタㇰ + + タン イタㇰ アナㇰネ、{lastUpdatedAt} ワノ アエイワンケ。 +
+
diff --git a/frontend/src/pages/TOSPage/index.tsx b/frontend/src/pages/TOSPage/index.tsx index 5220289..79ca327 100644 --- a/frontend/src/pages/TOSPage/index.tsx +++ b/frontend/src/pages/TOSPage/index.tsx @@ -1,17 +1,26 @@ -import { ainuMDXComponents } from '@/mdx-components' +import PageHead from '@/components/common/PageHead' import { useLocale } from '@/lib/useLocale' +import { useUITranslation } from '@/lib/useUITranslation' +import { ainuMDXComponents } from '@/mdx-components' import AinuTerms from '@/pages/TOSPage/ain-Kana.mdx' import NipponeseTerms from '@/pages/TOSPage/ja.mdx' -// Change only after the user has reviewed the translation and approved publication. -const AINU_TERMS_PUBLISHED = false +const terms = import.meta.glob ('./*.mdx', { eager: true, import: 'default' }) const TOSPage = () => { const locale = useLocale () - return (locale === 'ain-Kana' && AINU_TERMS_PUBLISHED) - ? - : + const { message } = useUITranslation ('navigation') + const Terms = terms[`./${ locale }.mdx`] ?? terms['./ja.mdx'] + + if (!terms) + throw new Error ('TOSPage: ja.mdx not found') + + return ( + <> + + + ) } diff --git a/frontend/src/pages/TOSPage/ja.mdx b/frontend/src/pages/TOSPage/ja.mdx index 6e46d51..a0f1fe3 100644 --- a/frontend/src/pages/TOSPage/ja.mdx +++ b/frontend/src/pages/TOSPage/ja.mdx @@ -1,16 +1,10 @@ -import { Helmet } from 'react-helmet-async' import MainArea from '@/components/layout/MainArea' -import { SITE_TITLE } from '@/config' import { dateString } from '@/lib/utils' export const lastUpdatedAt = dateString ('2026-04-12', 'hour') - - {`利用規約 | ${ SITE_TITLE }`} - -
# 利用規約 diff --git a/frontend/src/pages/deerjikists/DeerjikistDetailPage.tsx b/frontend/src/pages/deerjikists/DeerjikistDetailPage.tsx index c176453..a930a59 100644 --- a/frontend/src/pages/deerjikists/DeerjikistDetailPage.tsx +++ b/frontend/src/pages/deerjikists/DeerjikistDetailPage.tsx @@ -9,6 +9,7 @@ import FieldError from '@/components/common/FieldError' import FormField from '@/components/common/FormField' import PageTitle from '@/components/common/PageTitle' import MainArea from '@/components/layout/MainArea' +import PageHead from '@/components/common/PageHead' import { toast } from '@/components/ui/use-toast' import { PLATFORM_NAMES, PLATFORMS } from '@/consts' import { apiPut } from '@/lib/api' @@ -26,7 +27,7 @@ type DeerjikistFormField = const DeerjikistDetailPage: FC = () => { - const { label } = useUITranslation ('shared') + const { message, label } = useUITranslation ('shared') const locale = useLocale () const { id } = useParams () const tagId = String (id ?? '') @@ -83,6 +84,7 @@ const DeerjikistDetailPage: FC = () => { return ( + {(loading || !(tag)) ? label ('common:loading') : (
diff --git a/frontend/src/pages/help/HelpChangesPage.tsx b/frontend/src/pages/help/HelpChangesPage.tsx index acfcaa9..5281f5b 100644 --- a/frontend/src/pages/help/HelpChangesPage.tsx +++ b/frontend/src/pages/help/HelpChangesPage.tsx @@ -1,13 +1,12 @@ import { useQuery } from '@tanstack/react-query' import { useMemo } from 'react' -import { Helmet } from 'react-helmet-async' import { useSearchParams } from 'react-router-dom' import PrefetchLink from '@/components/PrefetchLink' import PageTitle from '@/components/common/PageTitle' import Pagination from '@/components/common/Pagination' import MainArea from '@/components/layout/MainArea' -import { SITE_TITLE } from '@/config' +import PageHead from '@/components/common/PageHead' import { getHelpChanges, helpEditionDate } from '@/lib/help' import { localeLanguage } from '@/lib/locales' import { useLocale } from '@/lib/useLocale' @@ -54,9 +53,7 @@ const HelpChangesPage: FC = () => { return ( - - {message ('history').text} | {SITE_TITLE} - +
{label ('history')}