diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 7918de552a896033b904e3d7435fe13804aa18f5..6eb90c9d02ede716957253035bedcdfeec0351df 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -88,7 +88,6 @@ add: "è¿½åŠ " reaction: "リアクション" reactionSettingDescription: "リアクションピッカーã«è¡¨ç¤ºã™ã‚‹ãƒªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’è¨å®šã—ã¾ã™ã€‚" rememberNoteVisibility: "公開範囲を記憶ã™ã‚‹" -renameFile: "ファイルåを変更" attachCancel: "添付å–り消ã—" markAsSensitive: "閲覧注æ„ã«ã™ã‚‹" unmarkAsSensitive: "閲覧注æ„を解除ã™ã‚‹" @@ -207,10 +206,13 @@ messaging: "ãƒãƒ£ãƒƒãƒˆ" upload: "アップãƒãƒ¼ãƒ‰" fromDrive: "ドライブã‹ã‚‰" fromUrl: "URLã‹ã‚‰" +uploadFromUrl: "URLアップãƒãƒ¼ãƒ‰" +uploadFromUrlDescription: "アップãƒãƒ¼ãƒ‰ã—ãŸã„ファイルã®URL" +uploadFromUrlRequested: "アップãƒãƒ¼ãƒ‰ã‚’リクエストã—ã¾ã—ãŸ" +uploadFromUrlMayTakeTime: "アップãƒãƒ¼ãƒ‰ãŒå®Œäº†ã™ã‚‹ã¾ã§æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚" explore: "ã¿ã¤ã‘ã‚‹" games: "Misskey Games" messageRead: "æ—¢èª" -recentUsedEmojis: "最近使用ã—ãŸçµµæ–‡å—" noMoreHistory: "ã“れよりéŽåŽ»ã®å±¥æ´ã¯ã‚りã¾ã›ã‚“" startMessaging: "ãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹" nUsersRead: "{n}人ãŒèªã¿ã¾ã—ãŸ" @@ -234,14 +236,22 @@ lightThemes: "明るã„テーマ" darkThemes: "æš—ã„テーマ" syncDeviceDarkMode: "デãƒã‚¤ã‚¹ã®ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã¨åŒæœŸã™ã‚‹" drive: "ドライブ" +fileName: "ファイルå" selectFile: "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" selectFiles: "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" -renameFolder: "フォルダーåを変更" +renameFile: "ファイルåを変更" +folderName: "フォルダーå" createFolder: "フォルダーを作æˆ" +renameFolder: "フォルダーåを変更" deleteFolder: "フォルダーを削除" addFile: "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è¿½åŠ " emptyDrive: "ドライブã¯ç©ºã§ã™" emptyFolder: "フォルダーã¯ç©ºã§ã™" +unableToDelete: "削除ã§ãã¾ã›ã‚“" +inputNewFileName: "æ–°ã—ã„ファイルåを入力ã—ã¦ãã ã•ã„" +inputNewFolderName: "æ–°ã—ã„フォルダåを入力ã—ã¦ãã ã•ã„" +circularReferenceFolder: "移動先ã®ãƒ•ォルダーã¯ã€ç§»å‹•ã™ã‚‹ãƒ•ォルダーã®ã‚µãƒ–フォルダーã§ã™ã€‚" +hasChildFilesOrFolders: "ã“ã®ãƒ•ォルダã¯ç©ºã§ãªã„ãŸã‚ã€å‰Šé™¤ã§ãã¾ã›ã‚“。" copyUrl: "URLをコピー" rename: "åå‰ã‚’変更" avatar: "アイコン" @@ -395,13 +405,14 @@ strongPassword: "å¼·ã„パスワード" passwordMatched: "一致ã—ã¾ã—ãŸ" passwordNotMatched: "一致ã—ã¦ã„ã¾ã›ã‚“" signinWith: "{x}ã§ãƒã‚°ã‚¤ãƒ³" +signinFailed: "ãƒã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ユーザーåã¨ãƒ‘スワードを確èªã—ã¦ãã ã•ã„。" tapSecurityKey: "ã‚»ã‚ュリティーã‚ーã«ã‚¿ãƒƒãƒ" or: "ã‚‚ã—ãã¯" uiLanguage: "UIã®è¡¨ç¤ºè¨€èªž" groupInvited: "ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã•れã¾ã—ãŸ" aboutX: "{x}ã«ã¤ã„ã¦" useOsNativeEmojis: "OSãƒã‚¤ãƒ†ã‚£ãƒ–ã®çµµæ–‡å—を使用" -noGroups: "グループãŒã‚りã¾ã›ã‚“" +youHaveNoGroups: "グループãŒã‚りã¾ã›ã‚“" joinOrCreateGroup: "æ—¢å˜ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã‚‚らã†ã‹ã€æ–°ã—ãグループを作æˆã—ã¦ãã ã•ã„。" noHistory: "å±¥æ´ã¯ã‚りã¾ã›ã‚“" disableAnimatedMfm: "å‹•ãã®ã‚ã‚‹MFMを無効ã«ã™ã‚‹" @@ -453,6 +464,8 @@ none: "ãªã—" volume: "音é‡" details: "詳細" chooseEmoji: "絵文å—ã‚’é¸æŠž" +unableToProcess: "æ“作を完了ã§ãã¾ã›ã‚“" +recentUsed: "最近使用" _sfx: note: "ノート" @@ -679,45 +692,39 @@ _pages: newPage: "ページã®ä½œæˆ" editPage: "ページã®ç·¨é›†" readPage: "ソースを表示ä¸" - page-created: "ページを作æˆã—ã¾ã—ãŸ" - page-updated: "ページを更新ã—ã¾ã—ãŸ" - name-already-exists: "指定ã•れãŸãƒšãƒ¼ã‚¸URLã¯æ—¢ã«å˜åœ¨ã—ã¦ã„ã¾ã™" - title-invalid-name: "䏿£ãªãƒšãƒ¼ã‚¸URLã§ã™" - text-invalid-name: "空白ã§ãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„" + created: "ページを作æˆã—ã¾ã—ãŸ" + updated: "ページを更新ã—ã¾ã—ãŸ" + deleted: "ページを削除ã—ã¾ã—ãŸ" + nameAlreadyExists: "指定ã•れãŸãƒšãƒ¼ã‚¸URLã¯æ—¢ã«å˜åœ¨ã—ã¦ã„ã¾ã™" + invalidNameTitle: "䏿£ãªãƒšãƒ¼ã‚¸URLã§ã™" + invalidNameText: "空白ã§ãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„" editThisPage: "ã“ã®ãƒšãƒ¼ã‚¸ã‚’編集" viewSource: "ソースを表示" viewPage: "ページを見る" like: "ã„ã„ã" unlike: "ã„ã„ã解除" - liked-pages: "ã„ã„ãã—ãŸãƒšãƒ¼ã‚¸" - my-pages: "自分ã®ãƒšãƒ¼ã‚¸" + my: "自分ã®ãƒšãƒ¼ã‚¸" + liked: "ã„ã„ãã—ãŸãƒšãƒ¼ã‚¸" inspector: "インスペクター" content: "ページブãƒãƒƒã‚¯" variables: "変数" - variables-info: "変数を使ã†ã“ã¨ã§å‹•çš„ãªãƒšãƒ¼ã‚¸ã‚’作æˆã§ãã¾ã™ã€‚テã‚スト内㧠<b>{ 変数å }</b> ã¨æ›¸ãã¨ãã“ã«å¤‰æ•°ã®å€¤ã‚’埋ã‚è¾¼ã‚ã¾ã™ã€‚例ãˆã° <b>Hello { thing } world!</b> ã¨ã„ã†ãƒ†ã‚ストã§ã€å¤‰æ•°(thing)ã®å€¤ãŒ <b>ai</b> ã ã£ãŸå ´åˆã€ãƒ†ã‚スト㯠<b>Hello ai world!</b> ã«ãªã‚Šã¾ã™ã€‚" - variables-info2: "変数ã®è©•価(値を算出ã™ã‚‹ã“ã¨)ã¯ä¸Šã‹ã‚‰ä¸‹ã«è¡Œã‚れるã®ã§ã€ã‚る変数ã®ä¸ã§è‡ªåˆ†ã‚ˆã‚Šä¸‹ã®å¤‰æ•°ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。例ãˆã°ä¸Šã‹ã‚‰ <b>Aã€Bã€C</b> ã¨3ã¤ã®å¤‰æ•°ã‚’定義ã—ãŸã¨ãã€<b>C</b>ã®ä¸ã§<b>A</b>ã‚„<b>B</b>ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€<b>A</b>ã®ä¸ã§<b>B</b>ã‚„<b>C</b>ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" - variables-info3: "ユーザーã‹ã‚‰ã®å…¥åŠ›ã‚’å—ã‘å–ã‚‹ã«ã¯ã€ãƒšãƒ¼ã‚¸ã«ã€Œãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã€ãƒ–ãƒãƒƒã‚¯ã‚’è¨ç½®ã—ã€ã€Œå¤‰æ•°åã€ã«å…¥åŠ›ã‚’æ ¼ç´ã—ãŸã„変数åã‚’è¨å®šã—ã¾ã™(変数ã¯è‡ªå‹•ã§ä½œæˆã•れã¾ã™)。ãã®å¤‰æ•°ã‚’使ã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã«å¿œã˜ãŸå‹•作を行ãˆã¾ã™ã€‚" - variables-info4: "関数を使ã†ã¨ã€å€¤ã®ç®—出処ç†ã‚’å†åˆ©ç”¨å¯èƒ½ãªå½¢ã«ã¾ã¨ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚関数を作るã«ã¯ã€ã€Œé–¢æ•°ã€ã‚¿ã‚¤ãƒ—ã®å¤‰æ•°ã‚’作æˆã—ã¾ã™ã€‚関数ã«ã¯ã‚¹ãƒãƒƒãƒˆ(引数)ã‚’è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã€ã‚¹ãƒãƒƒãƒˆã®å€¤ã¯é–¢æ•°å†…ã§å¤‰æ•°ã¨ã—ã¦åˆ©ç”¨å¯èƒ½ã§ã™ã€‚ã¾ãŸã€AiScript標準ã§é–¢æ•°ã‚’引数ã«å–る関数(高階関数ã¨å‘¼ã°ã‚Œã¾ã™)ã‚‚å˜åœ¨ã—ã¾ã™ã€‚関数ã¯äºˆã‚定義ã—ã¦ãŠãã»ã‹ã«ã€ã“ã®ã‚ˆã†ãªé«˜éšŽé–¢æ•°ã®ã‚¹ãƒãƒƒãƒˆã«å³å¸ã§ã‚»ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" - more-details: "詳ã—ã„説明" title: "タイトル" url: "ページURL" summary: "ページã®è¦ç´„" alignCenter: "ä¸å¤®å¯„ã›" - hide-title-when-pinned: "ピン留ã‚ã•れã¦ã„ã‚‹ã¨ãã«ã‚¿ã‚¤ãƒˆãƒ«ã‚’éžè¡¨ç¤º" + hideTitleWhenPinned: "ピン留ã‚ã•れã¦ã„ã‚‹ã¨ãã«ã‚¿ã‚¤ãƒˆãƒ«ã‚’éžè¡¨ç¤º" font: "フォント" fontSerif: "セリフ" fontSansSerif: "サンセリフ" - set-eye-catching-image: "アイã‚ャッãƒç”»åƒã‚’è¨å®š" - remove-eye-catching-image: "アイã‚ャッãƒç”»åƒã‚’削除" + eyeCatchingImageSet: "アイã‚ャッãƒç”»åƒã‚’è¨å®š" + eyeCatchingImageRemove: "アイã‚ャッãƒç”»åƒã‚’削除" chooseBlock: "ブãƒãƒƒã‚¯ã‚’è¿½åŠ " selectType: "ç¨®é¡žã‚’é¸æŠž" enterVariableName: "変数åを決ã‚ã¦ãã ã•ã„" - the-variable-name-is-already-used: "ãã®å¤‰æ•°åã¯æ—¢ã«ä½¿ã‚れã¦ã„ã¾ã™" - content-blocks: "コンテンツ" - input-blocks: "入力" - special-blocks: "特殊" - post-from-post-form: "ã“ã®å†…容を投稿" - posted-from-post-form: "投稿ã—ã¾ã—ãŸ" + variableNameIsAlreadyUsed: "ãã®å¤‰æ•°åã¯æ—¢ã«ä½¿ã‚れã¦ã„ã¾ã™" + contentBlocks: "コンテンツ" + inputBlocks: "入力" + specialBlocks: "特殊" blocks: text: "テã‚スト" textarea: "テã‚ストエリア" diff --git a/src/client/components/drive.file.vue b/src/client/components/drive.file.vue index 2ef3fd38e4a0c2d2e772256ac89cc2a4eed083bf..014e1a6ca587e56241522bc87256ea9c6f9d4c52 100644 --- a/src/client/components/drive.file.vue +++ b/src/client/components/drive.file.vue @@ -139,9 +139,9 @@ export default Vue.extend({ rename() { this.$root.dialog({ - title: this.$t('contextmenu.rename-file'), + title: this.$t('renameFile'), input: { - placeholder: this.$t('contextmenu.input-new-file-name'), + placeholder: this.$t('inputNewFileName'), default: this.file.name, allowEmpty: false } diff --git a/src/client/components/drive.folder.vue b/src/client/components/drive.folder.vue index 658aced3e85a9777d230ae626d92b03960c427c4..2e861e248052120bab3eca6161803e115745517f 100644 --- a/src/client/components/drive.folder.vue +++ b/src/client/components/drive.folder.vue @@ -137,14 +137,14 @@ export default Vue.extend({ switch (err) { case 'detected-circular-definition': this.$root.dialog({ - title: this.$t('unable-to-process'), - text: this.$t('circular-reference-detected') + title: this.$t('unableToProcess'), + text: this.$t('circularReferenceFolder') }); break; default: this.$root.dialog({ type: 'error', - text: this.$t('unhandled-error') + text: this.$t('error') }); } }); @@ -177,9 +177,9 @@ export default Vue.extend({ rename() { this.$root.dialog({ - title: this.$t('contextmenu.rename-folder'), + title: this.$t('renameFolder'), input: { - placeholder: this.$t('contextmenu.input-new-folder-name'), + placeholder: this.$t('inputNewFolderName'), default: this.folder.name } }).then(({ canceled, result: name }) => { @@ -206,14 +206,14 @@ export default Vue.extend({ case 'b0fc8a17-963c-405d-bfbc-859a487295e1': this.$root.dialog({ type: 'error', - title: this.$t('unable-to-delete'), - text: this.$t('has-child-files-or-folders') + title: this.$t('unableToDelete'), + text: this.$t('hasChildFilesOrFolders') }); break; default: this.$root.dialog({ type: 'error', - text: this.$t('unable-to-delete') + text: this.$t('unableToDelete') }); } }); diff --git a/src/client/components/drive.vue b/src/client/components/drive.vue index bb35b156aab0289397884fa30027a8108ea43174..fddac5b9aa89f08d62f3eef8596a507eefdf8a81 100644 --- a/src/client/components/drive.vue +++ b/src/client/components/drive.vue @@ -263,14 +263,14 @@ export default Vue.extend({ switch (err) { case 'detected-circular-definition': this.$root.dialog({ - title: this.$t('unable-to-process'), - text: this.$t('circular-reference-detected') + title: this.$t('unableToProcess'), + text: this.$t('circularReferenceFolder') }); break; default: this.$root.dialog({ type: 'error', - text: this.$t('unhandled-error') + text: this.$t('error') }); } }); @@ -284,9 +284,9 @@ export default Vue.extend({ urlUpload() { this.$root.dialog({ - title: this.$t('url-upload'), + title: this.$t('uploadFromUrl'), input: { - placeholder: this.$t('url-of-file') + placeholder: this.$t('uploadFromUrlDescription') } }).then(({ canceled, result: url }) => { if (canceled) return; @@ -296,17 +296,17 @@ export default Vue.extend({ }); this.$root.dialog({ - title: this.$t('url-upload-requested'), - text: this.$t('may-take-time') + title: this.$t('uploadFromUrlRequested'), + text: this.$t('uploadFromUrlMayTakeTime') }); }); }, createFolder() { this.$root.dialog({ - title: this.$t('create-folder'), + title: this.$t('createFolder'), input: { - placeholder: this.$t('folder-name') + placeholder: this.$t('folderName') } }).then(({ canceled, result: name }) => { if (canceled) return; @@ -321,9 +321,9 @@ export default Vue.extend({ renameFolder(folder) { this.$root.dialog({ - title: this.$t('contextmenu.rename-folder'), + title: this.$t('renameFolder'), input: { - placeholder: this.$t('contextmenu.input-new-folder-name'), + placeholder: this.$t('inputNewFolderName'), default: folder.name } }).then(({ canceled, result: name }) => { @@ -349,14 +349,14 @@ export default Vue.extend({ case 'b0fc8a17-963c-405d-bfbc-859a487295e1': this.$root.dialog({ type: 'error', - title: this.$t('unable-to-delete'), - text: this.$t('has-child-files-or-folders') + title: this.$t('unableToDelete'), + text: this.$t('hasChildFilesOrFolders') }); break; default: this.$root.dialog({ type: 'error', - text: this.$t('unable-to-delete') + text: this.$t('unableToDelete') }); } }); diff --git a/src/client/components/emoji-picker.vue b/src/client/components/emoji-picker.vue index a647b0ea04e2d56fba556288a07c0d96d4c2d5c2..e346023f2993499e2d60553f9b7a3c4c28610b50 100644 --- a/src/client/components/emoji-picker.vue +++ b/src/client/components/emoji-picker.vue @@ -2,12 +2,11 @@ <x-popup :source="source" ref="popup" @closed="() => { $emit('closed'); destroyDom(); }"> <div class="omfetrab"> <header> - <button v-for="category in categories" + <button v-for="(category, i) in categories" class="_button" - :title="category.text" @click="go(category)" :class="{ active: category.isActive }" - :key="category.text" + :key="i" > <fa :icon="category.icon" fixed-width/> </button> @@ -15,7 +14,7 @@ <div class="emojis"> <template v-if="categories[0].isActive"> - <header class="category"><fa :icon="faHistory" fixed-width/> {{ $t('recentUsedEmojis') }}</header> + <header class="category"><fa :icon="faHistory" fixed-width/> {{ $t('recentUsed') }}</header> <div class="list"> <button v-for="(emoji, i) in ($store.state.device.recentEmojis || [])" class="_button" @@ -27,9 +26,10 @@ <img v-else :src="$store.state.device.disableShowingAnimatedImages ? getStaticImageUrl(emoji.url) : emoji.url"/> </button> </div> + + <header class="category"><fa :icon="faAsterisk" fixed-width/> {{ $t('customEmojis') }}</header> </template> - <header class="category"><fa :icon="categories.find(x => x.isActive).icon" fixed-width/> {{ categories.find(x => x.isActive).text }}</header> <template v-if="categories.find(x => x.isActive).name"> <div class="list"> <button v-for="emoji in emojilist.filter(e => e.category === categories.find(x => x.isActive).name)" @@ -92,47 +92,38 @@ export default Vue.extend({ customEmojis: {}, faGlobe, faHistory, categories: [{ - text: this.$t('customEmoji'), icon: faAsterisk, isActive: true }, { name: 'people', - text: this.$t('people'), icon: faLaugh, isActive: false }, { name: 'animals_and_nature', - text: this.$t('animals-and-nature'), icon: faLeaf, isActive: false }, { name: 'food_and_drink', - text: this.$t('food-and-drink'), icon: faUtensils, isActive: false }, { name: 'activity', - text: this.$t('activity'), icon: faFutbol, isActive: false }, { name: 'travel_and_places', - text: this.$t('travel-and-places'), icon: faCity, isActive: false }, { name: 'objects', - text: this.$t('objects'), icon: faDice, isActive: false }, { name: 'symbols', - text: this.$t('symbols'), icon: faHeart, isActive: false }, { name: 'flags', - text: this.$t('flags'), icon: faFlag, isActive: false }] diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue index 758bc59107bd85c85464236e3bdfd1fdf9f65586..3d68289390a8261c1ba7d329820c5c6bdde22395 100755 --- a/src/client/components/signin.vue +++ b/src/client/components/signin.vue @@ -155,7 +155,7 @@ export default Vue.extend({ if (err === null) return; this.$root.dialog({ type: 'error', - text: this.$t('login-failed') + text: this.$t('signinFailed') }); this.signing = false; }); @@ -176,7 +176,7 @@ export default Vue.extend({ }).catch(() => { this.$root.dialog({ type: 'error', - text: this.$t('login-failed') + text: this.$t('signinFailed') }); this.challengeData = null; this.totpLogin = false; diff --git a/src/client/pages/index.welcome.setup.vue b/src/client/pages/index.welcome.setup.vue index a339ac0a28e8e4624ff763bc694a47eadfc1ba41..6d08f5b5d4a12a149bbc95455d5734574185300a 100644 --- a/src/client/pages/index.welcome.setup.vue +++ b/src/client/pages/index.welcome.setup.vue @@ -61,7 +61,7 @@ export default Vue.extend({ this.$root.dialog({ type: 'error', - text: this.$t('some-error') + text: this.$t('error') }); }); } diff --git a/src/client/pages/messaging-room.form.vue b/src/client/pages/messaging-room.form.vue index 14659fb1c43aac4d0d8bd15a0ae1a96476441fad..72e2632772a473679e630ac52f96955fd27d1bef 100644 --- a/src/client/pages/messaging-room.form.vue +++ b/src/client/pages/messaging-room.form.vue @@ -113,7 +113,7 @@ export default Vue.extend({ if (items[0].kind == 'file') { this.$root.dialog({ type: 'error', - text: this.$t('only-one-file-attached') + text: this.$t('onlyOneFileCanBeAttached') }); } } @@ -138,7 +138,7 @@ export default Vue.extend({ e.preventDefault(); this.$root.dialog({ type: 'error', - text: this.$t('only-one-file-attached') + text: this.$t('onlyOneFileCanBeAttached') }); return; } diff --git a/src/client/pages/messaging.vue b/src/client/pages/messaging.vue index 2179115dea51435074f63af040901e88691236fe..47d761d89511af1bdc1c06f191f8b0f3a8ce48fb 100644 --- a/src/client/pages/messaging.vue +++ b/src/client/pages/messaging.vue @@ -145,7 +145,7 @@ export default Vue.extend({ if (groups1.length === 0 && groups2.length === 0) { this.$root.dialog({ type: 'warning', - title: this.$t('noGroups'), + title: this.$t('youHaveNoGroups'), text: this.$t('joinOrCreateGroup'), }); return; diff --git a/src/client/pages/page-editor/els/page-editor.el.if.vue b/src/client/pages/page-editor/els/page-editor.el.if.vue index 3c545a7ddc36ade88dfc556c0c90a314ed7b7684..5e531a7ab597df507b3ad467a12374b9c087f2f9 100644 --- a/src/client/pages/page-editor/els/page-editor.el.if.vue +++ b/src/client/pages/page-editor/els/page-editor.el.if.vue @@ -69,7 +69,7 @@ export default Vue.extend({ async add() { const { canceled, result: type } = await this.$root.dialog({ type: null, - title: this.$t('choose-block'), + title: this.$t('_pages.chooseBlock'), select: { groupedItems: this.getPageBlockList() }, diff --git a/src/client/pages/page-editor/els/page-editor.el.section.vue b/src/client/pages/page-editor/els/page-editor.el.section.vue index d405ee196566a5fbe857a33488f10b5207b66c18..8de796e6d6fbe3b42e3200a50ee22f0ead59f46f 100644 --- a/src/client/pages/page-editor/els/page-editor.el.section.vue +++ b/src/client/pages/page-editor/els/page-editor.el.section.vue @@ -80,7 +80,7 @@ export default Vue.extend({ async add() { const { canceled, result: type } = await this.$root.dialog({ type: null, - title: this.$t('choose-block'), + title: this.$t('_pages.chooseBlock'), select: { groupedItems: this.getPageBlockList() }, diff --git a/src/client/pages/page-editor/page-editor.script-block.vue b/src/client/pages/page-editor/page-editor.script-block.vue index ae56803a39648c1b3f20fd7618a591a6110bffd1..f56e848c39b51a55d198d70c3ac3344c26b7bd7b 100644 --- a/src/client/pages/page-editor/page-editor.script-block.vue +++ b/src/client/pages/page-editor/page-editor.script-block.vue @@ -212,7 +212,7 @@ export default Vue.extend({ async changeType() { const { canceled, result: type } = await this.$root.dialog({ type: null, - title: this.$t('select-type'), + title: this.$t('_pages.selectType'), select: { groupedItems: this.getScriptBlockList(this.getExpectedType ? this.getExpectedType() : null) }, diff --git a/src/client/pages/page-editor/page-editor.vue b/src/client/pages/page-editor/page-editor.vue index 8b357584a5c4f6de804d812dc9fefe133b363b54..6144b0bd9ca504979facb8eb5851439777ac4606 100644 --- a/src/client/pages/page-editor/page-editor.vue +++ b/src/client/pages/page-editor/page-editor.vue @@ -2,7 +2,7 @@ <div> <div class="gwbmwxkm _panel"> <header> - <div class="title"><fa :icon="faStickyNote"/> {{ readonly ? $t('readPage') : pageId ? $t('editPage') : $t('newPage') }}</div> + <div class="title"><fa :icon="faStickyNote"/> {{ readonly ? $t('_pages.readPage') : pageId ? $t('_pages.editPage') : $t('_pages.newPage') }}</div> <div class="buttons"> <button class="_button" @click="del()" v-if="!readonly"><fa :icon="faTrashAlt"/></button> <button class="_button" @click="() => showOptions = !showOptions"><fa :icon="faCog"/></button> @@ -11,37 +11,37 @@ </header> <section> - <router-link class="view" v-if="pageId" :to="`/@${ author.username }/pages/${ currentName }`"><fa :icon="faExternalLinkSquareAlt"/> {{ $t('view-page') }}</router-link> + <router-link class="view" v-if="pageId" :to="`/@${ author.username }/pages/${ currentName }`"><fa :icon="faExternalLinkSquareAlt"/> {{ $t('_pages.viewPage') }}</router-link> <mk-input v-model="title"> - <span>{{ $t('title') }}</span> + <span>{{ $t('_pages.title') }}</span> </mk-input> <template v-if="showOptions"> <mk-input v-model="summary"> - <span>{{ $t('summary') }}</span> + <span>{{ $t('_pages.summary') }}</span> </mk-input> <mk-input v-model="name"> <template #prefix>{{ url }}/@{{ author.username }}/pages/</template> - <span>{{ $t('url') }}</span> + <span>{{ $t('_pages.url') }}</span> </mk-input> - <mk-switch v-model="alignCenter">{{ $t('alignCenter') }}</mk-switch> + <mk-switch v-model="alignCenter">{{ $t('_pages.alignCenter') }}</mk-switch> <mk-select v-model="font"> - <template #label>{{ $t('font') }}</template> - <option value="serif">{{ $t('fontSerif') }}</option> - <option value="sans-serif">{{ $t('fontSansSerif') }}</option> + <template #label>{{ $t('_pages.font') }}</template> + <option value="serif">{{ $t('_pages.fontSerif') }}</option> + <option value="sans-serif">{{ $t('_pages.fontSansSerif') }}</option> </mk-select> - <mk-switch v-model="hideTitleWhenPinned">{{ $t('hide-title-when-pinned') }}</mk-switch> + <mk-switch v-model="hideTitleWhenPinned">{{ $t('_pages.hideTitleWhenPinned') }}</mk-switch> <div class="eyeCatch"> - <mk-button v-if="eyeCatchingImageId == null && !readonly" @click="setEyeCatchingImage()"><fa :icon="faPlus"/> {{ $t('set-eye-catching-image') }}</mk-button> + <mk-button v-if="eyeCatchingImageId == null && !readonly" @click="setEyeCatchingImage()"><fa :icon="faPlus"/> {{ $t('_pages.eyeCatchingImageSet') }}</mk-button> <div v-else-if="eyeCatchingImage"> <img :src="eyeCatchingImage.url" :alt="eyeCatchingImage.name"/> - <mk-button @click="removeEyeCatchingImage()" v-if="!readonly"><fa :icon="faTrashAlt"/> {{ $t('remove-eye-catching-image') }}</mk-button> + <mk-button @click="removeEyeCatchingImage()" v-if="!readonly"><fa :icon="faTrashAlt"/> {{ $t('_pages.eyeCatchingImageRemove') }}</mk-button> </div> </div> </template> @@ -53,7 +53,7 @@ </div> <mk-container :body-togglable="true"> - <template #header><fa :icon="faMagic"/> {{ $t('variables') }}</template> + <template #header><fa :icon="faMagic"/> {{ $t('_pages.variables') }}</template> <div class="qmuvgica"> <x-draggable tag="div" class="variables" v-show="variables.length > 0" :list="variables" handle=".drag-handle" :group="{ name: 'variables' }" animation="150" swap-threshold="0.5"> <x-variable v-for="variable in variables" @@ -70,22 +70,14 @@ </x-draggable> <mk-button @click="addVariable()" class="add" v-if="!readonly"><fa :icon="faPlus"/></mk-button> - - <x-info><span v-html="$t('variables-info')"></span><a @click="() => moreDetails = true" style="display:block;">{{ $t('more-details') }}</a></x-info> - - <template v-if="moreDetails"> - <x-info><span v-html="$t('variables-info2')"></span></x-info> - <x-info><span v-html="$t('variables-info3')"></span></x-info> - <x-info><span v-html="$t('variables-info4')"></span></x-info> - </template> </div> </mk-container> <mk-container :body-togglable="true" :expanded="false"> - <template #header><fa :icon="faCode"/> {{ $t('inspector') }}</template> + <template #header><fa :icon="faCode"/> {{ $t('_pages.inspector') }}</template> <div style="padding:0 32px 32px 32px;"> - <mk-textarea :value="JSON.stringify(content, null, 2)" readonly tall>{{ $t('content') }}</mk-textarea> - <mk-textarea :value="JSON.stringify(variables, null, 2)" readonly tall>{{ $t('variables') }}</mk-textarea> + <mk-textarea :value="JSON.stringify(content, null, 2)" readonly tall>{{ $t('_pages.content') }}</mk-textarea> + <mk-textarea :value="JSON.stringify(variables, null, 2)" readonly tall>{{ $t('_pages.variables') }}</mk-textarea> </div> </mk-container> </div> @@ -152,7 +144,6 @@ export default Vue.extend({ variables: [], aiScript: null, showOptions: false, - moreDetails: false, url, faPlus, faICursor, faSave, faStickyNote, faMagic, faCog, faTrashAlt, faExternalLinkSquareAlt, faCode }; @@ -243,14 +234,14 @@ export default Vue.extend({ if (err.info.param == 'name') { this.$root.dialog({ type: 'error', - title: this.$t('title-invalid-name'), - text: this.$t('text-invalid-name') + title: this.$t('_pages.invalidNameTitle'), + text: this.$t('_pages.invalidNameText') }); } } else if (err.code == 'NAME_ALREADY_EXISTS') { this.$root.dialog({ type: 'error', - text: this.$t('name-already-exists') + text: this.$t('_pages.nameAlreadyExists') }); } }; @@ -262,7 +253,7 @@ export default Vue.extend({ this.currentName = this.name.trim(); this.$root.dialog({ type: 'success', - text: this.$t('page-updated') + text: this.$t('_pages.updated') }); }).catch(onError); } else { @@ -272,7 +263,7 @@ export default Vue.extend({ this.currentName = this.name.trim(); this.$root.dialog({ type: 'success', - text: this.$t('page-created') + text: this.$t('_pages.created') }); this.$router.push(`/my/pages/edit/${this.pageId}`); }).catch(onError); @@ -282,7 +273,7 @@ export default Vue.extend({ del() { this.$root.dialog({ type: 'warning', - text: this.$t('are-you-sure-delete'), + text: this.$t('removeAreYouSure', { x: this.title.trim() }), showCancelButton: true }).then(({ canceled }) => { if (canceled) return; @@ -291,7 +282,7 @@ export default Vue.extend({ }).then(() => { this.$root.dialog({ type: 'success', - text: this.$t('page-deleted') + text: this.$t('_pages.deleted') }); this.$router.push(`/my/pages`); }); @@ -301,7 +292,7 @@ export default Vue.extend({ async add() { const { canceled, result: type } = await this.$root.dialog({ type: null, - title: this.$t('chooseBlock'), + title: this.$t('_pages.chooseBlock'), select: { groupedItems: this.getPageBlockList() }, @@ -315,7 +306,7 @@ export default Vue.extend({ async addVariable() { let { canceled, result: name } = await this.$root.dialog({ - title: this.$t('enterVariableName'), + title: this.$t('_pages.enterVariableName'), input: { type: 'text', }, @@ -328,7 +319,7 @@ export default Vue.extend({ if (this.aiScript.isUsedName(name)) { this.$root.dialog({ type: 'error', - text: this.$t('the-variable-name-is-already-used') + text: this.$t('_pages.variableNameIsAlreadyUsed') }); return; } @@ -348,7 +339,7 @@ export default Vue.extend({ getPageBlockList() { return [{ - label: this.$t('content-blocks'), + label: this.$t('_pages.contentBlocks'), items: [ { value: 'section', text: this.$t('_pages.blocks.section') }, { value: 'text', text: this.$t('_pages.blocks.text') }, @@ -356,7 +347,7 @@ export default Vue.extend({ { value: 'textarea', text: this.$t('_pages.blocks.textarea') }, ] }, { - label: this.$t('input-blocks'), + label: this.$t('_pages.inputBlocks'), items: [ { value: 'button', text: this.$t('_pages.blocks.button') }, { value: 'radioButton', text: this.$t('_pages.blocks.radioButton') }, @@ -367,7 +358,7 @@ export default Vue.extend({ { value: 'counter', text: this.$t('_pages.blocks.counter') } ] }, { - label: this.$t('special-blocks'), + label: this.$t('_pages.specialBlocks'), items: [ { value: 'if', text: this.$t('_pages.blocks.if') }, { value: 'post', text: this.$t('_pages.blocks.post') } diff --git a/src/client/pages/pages.vue b/src/client/pages/pages.vue index bee7d30a6178922a44c3aed04f44ef107c3c0f0d..d993d0196ee704705e3b0082a56298ccd3051a18 100644 --- a/src/client/pages/pages.vue +++ b/src/client/pages/pages.vue @@ -1,7 +1,7 @@ <template> <div> <mk-container :body-togglable="true"> - <template #header><fa :icon="faEdit" fixed-width/>{{ $t('my-pages') }}</template> + <template #header><fa :icon="faEdit" fixed-width/>{{ $t('_pages.my') }}</template> <div class="rknalgpo my"> <mk-button class="new" @click="create()"><fa :icon="faPlus"/></mk-button> <mk-pagination :pagination="myPagesPagination" #default="{items}"> @@ -11,7 +11,7 @@ </mk-container> <mk-container :body-togglable="true"> - <template #header><fa :icon="faHeart" fixed-width/>{{ $t('liked-pages') }}</template> + <template #header><fa :icon="faHeart" fixed-width/>{{ $t('_pages.liked') }}</template> <div class="rknalgpo"> <mk-pagination :pagination="likedPagesPagination" #default="{items}"> <mk-page-preview v-for="like in items" class="ckltabjg" :page="like.page" :key="like.page.id"/> diff --git a/src/docs/pages.ja-JP.md b/src/docs/pages.ja-JP.md new file mode 100644 index 0000000000000000000000000000000000000000..3804c5a5c28b5e1d0e095557ada0ff883d287c2e --- /dev/null +++ b/src/docs/pages.ja-JP.md @@ -0,0 +1,10 @@ +# Pages + +## 変数 +変数を使ã†ã“ã¨ã§å‹•çš„ãªãƒšãƒ¼ã‚¸ã‚’作æˆã§ãã¾ã™ã€‚テã‚スト内㧠<b>{ 変数å }</b> ã¨æ›¸ãã¨ãã“ã«å¤‰æ•°ã®å€¤ã‚’埋ã‚è¾¼ã‚ã¾ã™ã€‚例ãˆã° <b>Hello { thing } world!</b> ã¨ã„ã†ãƒ†ã‚ストã§ã€å¤‰æ•°(thing)ã®å€¤ãŒ <b>ai</b> ã ã£ãŸå ´åˆã€ãƒ†ã‚スト㯠<b>Hello ai world!</b> ã«ãªã‚Šã¾ã™ã€‚ + +変数ã®è©•価(値を算出ã™ã‚‹ã“ã¨)ã¯ä¸Šã‹ã‚‰ä¸‹ã«è¡Œã‚れるã®ã§ã€ã‚る変数ã®ä¸ã§è‡ªåˆ†ã‚ˆã‚Šä¸‹ã®å¤‰æ•°ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。例ãˆã°ä¸Šã‹ã‚‰ <b>Aã€Bã€C</b> ã¨3ã¤ã®å¤‰æ•°ã‚’定義ã—ãŸã¨ãã€<b>C</b>ã®ä¸ã§<b>A</b>ã‚„<b>B</b>ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€<b>A</b>ã®ä¸ã§<b>B</b>ã‚„<b>C</b>ã‚’å‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 + +ユーザーã‹ã‚‰ã®å…¥åŠ›ã‚’å—ã‘å–ã‚‹ã«ã¯ã€ãƒšãƒ¼ã‚¸ã«ã€Œãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã€ãƒ–ãƒãƒƒã‚¯ã‚’è¨ç½®ã—ã€ã€Œå¤‰æ•°åã€ã«å…¥åŠ›ã‚’æ ¼ç´ã—ãŸã„変数åã‚’è¨å®šã—ã¾ã™(変数ã¯è‡ªå‹•ã§ä½œæˆã•れã¾ã™)。ãã®å¤‰æ•°ã‚’使ã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼å…¥åŠ›ã«å¿œã˜ãŸå‹•作を行ãˆã¾ã™ã€‚ + +関数を使ã†ã¨ã€å€¤ã®ç®—出処ç†ã‚’å†åˆ©ç”¨å¯èƒ½ãªå½¢ã«ã¾ã¨ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚関数を作るã«ã¯ã€ã€Œé–¢æ•°ã€ã‚¿ã‚¤ãƒ—ã®å¤‰æ•°ã‚’作æˆã—ã¾ã™ã€‚関数ã«ã¯ã‚¹ãƒãƒƒãƒˆ(引数)ã‚’è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã€ã‚¹ãƒãƒƒãƒˆã®å€¤ã¯é–¢æ•°å†…ã§å¤‰æ•°ã¨ã—ã¦åˆ©ç”¨å¯èƒ½ã§ã™ã€‚ã¾ãŸã€AiScript標準ã§é–¢æ•°ã‚’引数ã«å–る関数(高階関数ã¨å‘¼ã°ã‚Œã¾ã™)ã‚‚å˜åœ¨ã—ã¾ã™ã€‚関数ã¯äºˆã‚定義ã—ã¦ãŠãã»ã‹ã«ã€ã“ã®ã‚ˆã†ãªé«˜éšŽé–¢æ•°ã®ã‚¹ãƒãƒƒãƒˆã«å³å¸ã§ã‚»ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚