feat(client): 翻訳をIndexedDBに保存・プッシュ通知を翻訳 (#6396)

* wip

* tabun ok

* better msg

* oops

* fix lint

* Update gulpfile.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* Update src/client/scripts/set-i18n-contexts.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* refactor

Co-authored-by: acid-chicken <root@acid-chicken.com>

* 

* wip

* fix lint

* たぶんおk

* fix flush

* Translate Notification

* remove console.log

* fix

* add notifications

* remove san

* wip

* ok

* ✌️

* Update src/prelude/array.ts

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>

* wip

* i18n refactor

* Update init.ts

* ✌️

Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Co-authored-by: syuilo <syuilotan@yahoo.co.jp>
This commit is contained in:
tamaina
2020-05-23 13:19:31 +09:00
committed by GitHub
parent 11141c878c
commit 3963ed8ff7
143 changed files with 290 additions and 433 deletions

View File

@@ -7,7 +7,6 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
type Captcha = {
render(container: string | Node, options: {
@@ -31,7 +30,6 @@ declare global {
}
export default Vue.extend({
i18n,
props: {
provider: {
type: String,

View File

@@ -7,13 +7,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { length } from 'stringz';
import { concat } from '../../prelude/array';
export default Vue.extend({
i18n,
props: {
value: {
type: Boolean,

View File

@@ -15,11 +15,8 @@
<script lang="ts">
import Vue from 'vue';
import { faAngleUp, faAngleDown } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
items: {
type: Array,

View File

@@ -57,11 +57,8 @@ import MkInput from './ui/input.vue';
import MkSelect from './ui/select.vue';
import MkSignin from './signin.vue';
import parseAcct from '../../misc/acct/parse';
import i18n from '../i18n';
export default Vue.extend({
i18n,
components: {
MkButton,
MkInput,

View File

@@ -12,13 +12,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import XDrive from './drive.vue';
import XWindow from './window.vue';
export default Vue.extend({
i18n,
components: {
XDrive,
XWindow,

View File

@@ -32,7 +32,6 @@
<script lang="ts">
import Vue from 'vue';
import { faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
import i18n from '../i18n';
import copyToClipboard from '../scripts/copy-to-clipboard';
//import updateAvatar from '../api/update-avatar';
//import updateBanner from '../api/update-banner';
@@ -40,8 +39,6 @@ import XFileThumbnail from './drive-file-thumbnail.vue';
import { faDownload, faLink, faICursor, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
export default Vue.extend({
i18n,
components: {
XFileThumbnail
},

View File

@@ -28,11 +28,8 @@
<script lang="ts">
import Vue from 'vue';
import { faFolder, faFolderOpen } from '@fortawesome/free-regular-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
folder: {
type: Object,

View File

@@ -15,11 +15,8 @@
<script lang="ts">
import Vue from 'vue';
import { faCloud } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
folder: {
type: Object,

View File

@@ -48,7 +48,6 @@
<script lang="ts">
import Vue from 'vue';
import { faAngleRight } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import XNavFolder from './drive.nav-folder.vue';
import XFolder from './drive.folder.vue';
import XFile from './drive.file.vue';
@@ -56,8 +55,6 @@ import XUploader from './uploader.vue';
import MkButton from './ui/button.vue';
export default Vue.extend({
i18n,
components: {
XNavFolder,
XFolder,

View File

@@ -64,7 +64,6 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { emojilist } from '../../misc/emojilist';
import { getStaticImageUrl } from '../scripts/get-static-image-url';
import { faAsterisk, faLeaf, faUtensils, faFutbol, faCity, faDice, faGlobe, faHistory, faUser } from '@fortawesome/free-solid-svg-icons';
@@ -73,8 +72,6 @@ import { groupByX } from '../../prelude/array';
import XPopup from './popup.vue';
export default Vue.extend({
i18n,
components: {
XPopup,
},

View File

@@ -9,11 +9,9 @@
<script lang="ts">
import Vue from 'vue';
import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import MkButton from './ui/button.vue';
export default Vue.extend({
i18n,
components: {
MkButton,
},

View File

@@ -30,12 +30,9 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { faSpinner, faPlus, faMinus, faHourglassHalf } from '@fortawesome/free-solid-svg-icons';
export default Vue.extend({
i18n,
props: {
user: {
type: Object,

View File

@@ -8,10 +8,8 @@
<script lang="ts">
import Vue from 'vue';
import { faSearch } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: ['q'],
data() {
return {

View File

@@ -6,12 +6,9 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import XModal from './modal.vue';
export default Vue.extend({
i18n,
components: {
XModal,
},

View File

@@ -125,7 +125,6 @@
import Vue from 'vue';
import { faChartBar, faUser, faPencilAlt } from '@fortawesome/free-solid-svg-icons';
import Chart from 'chart.js';
import i18n from '../i18n';
import MkSelect from './ui/select.vue';
const chartLimit = 90;
@@ -140,8 +139,6 @@ const alpha = (hex, a) => {
};
export default Vue.extend({
i18n,
components: {
MkSelect
},

View File

@@ -28,10 +28,8 @@
<script lang="ts">
import Vue from 'vue';
import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
media: {
type: Object,

View File

@@ -21,12 +21,10 @@
<script lang="ts">
import Vue from 'vue';
import { faExclamationTriangle, faEyeSlash } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import { getStaticImageUrl } from '../scripts/get-static-image-url';
import ImageViewer from './image-viewer.vue';
export default Vue.extend({
i18n,
props: {
image: {
type: Object,

View File

@@ -23,10 +23,8 @@
import Vue from 'vue';
import { faPlayCircle } from '@fortawesome/free-regular-svg-icons';
import { faExclamationTriangle, faEyeSlash } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
video: {
type: Object,

View File

@@ -16,12 +16,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { toUnicode } from 'punycode';
import { host as localHost } from '../config';
export default Vue.extend({
i18n,
props: {
username: {
type: String,

View File

@@ -93,7 +93,6 @@ import { faBolt, faTimes, faBullhorn, faStar, faLink, faExternalLinkSquareAlt, f
import { faCopy, faTrashAlt, faEdit, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
import { parse } from '../../mfm/parse';
import { sum, unique } from '../../prelude/array';
import i18n from '../i18n';
import XSub from './note.sub.vue';
import XNoteHeader from './note-header.vue';
import XNotePreview from './note-preview.vue';
@@ -109,7 +108,6 @@ import { url } from '../config';
import copyToClipboard from '../scripts/copy-to-clipboard';
export default Vue.extend({
i18n,
components: {
XSub,

View File

@@ -29,15 +29,12 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import paging from '../scripts/paging';
import XNote from './note.vue';
import XList from './date-separated-list.vue';
import MkButton from './ui/button.vue';
export default Vue.extend({
i18n,
components: {
XNote, XList, MkButton
},

View File

@@ -61,13 +61,11 @@
import Vue from 'vue';
import { faIdCardAlt, faPlus, faQuoteLeft, faQuoteRight, faRetweet, faReply, faAt, faCheck, faPollH } from '@fortawesome/free-solid-svg-icons';
import { faClock } from '@fortawesome/free-regular-svg-icons';
import getNoteSummary from '../../misc/get-note-summary';
import noteSummary from '../../misc/get-note-summary';
import XReactionIcon from './reaction-icon.vue';
import MkFollowButton from './follow-button.vue';
import i18n from '../i18n';
export default Vue.extend({
i18n,
components: {
XReactionIcon, MkFollowButton
},
@@ -89,7 +87,7 @@ export default Vue.extend({
},
data() {
return {
getNoteSummary,
getNoteSummary: (text: string) => noteSummary(text, this.$root.i18n.messages[this.$root.i18n.locale]),
followRequestDone: false,
groupInviteDone: false,
faIdCardAlt, faPlus, faQuoteLeft, faQuoteRight, faRetweet, faReply, faAt, faClock, faCheck, faPollH

View File

@@ -18,15 +18,12 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import paging from '../scripts/paging';
import XNotification from './notification.vue';
import XList from './date-separated-list.vue';
import XNote from './note.vue';
export default Vue.extend({
i18n,
components: {
XNotification,
XList,

View File

@@ -8,13 +8,11 @@
<script lang="ts">
import Vue from 'vue';
import { faCheck, faPaperPlane } from '@fortawesome/free-solid-svg-icons';
import i18n from '../../i18n';
import MkTextarea from '../ui/textarea.vue';
import MkButton from '../ui/button.vue';
import { apiUrl } from '../../config';
export default Vue.extend({
i18n,
components: {
MkTextarea,
MkButton,

View File

@@ -9,14 +9,11 @@ import Vue from 'vue';
import { parse } from '@syuilo/aiscript';
import { faHeart as faHeartS } from '@fortawesome/free-solid-svg-icons';
import { faHeart } from '@fortawesome/free-regular-svg-icons';
import i18n from '../../i18n';
import XBlock from './page.block.vue';
import { Hpml } from '../../scripts/hpml/evaluator';
import { url } from '../../config';
export default Vue.extend({
i18n,
components: {
XBlock
},

View File

@@ -51,7 +51,6 @@
<script lang="ts">
import Vue from 'vue';
import { faExclamationTriangle, faTimes } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import { erase } from '../../prelude/array';
import { addTime } from '../../prelude/time';
import { formatDateTimeString } from '../../misc/format-time-string';
@@ -61,7 +60,6 @@ import MkSwitch from './ui/switch.vue';
import MkButton from './ui/button.vue';
export default Vue.extend({
i18n,
components: {
MkInput,
MkSelect,

View File

@@ -24,11 +24,9 @@
<script lang="ts">
import Vue from 'vue';
import { faCheck } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import { sum } from '../../prelude/array';
export default Vue.extend({
i18n,
props: {
note: {
type: Object,

View File

@@ -14,15 +14,12 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import * as XDraggable from 'vuedraggable';
import { faTimesCircle, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
import { faExclamationTriangle, faICursor } from '@fortawesome/free-solid-svg-icons';
import XFileThumbnail from './drive-file-thumbnail.vue'
export default Vue.extend({
i18n,
components: {
XDraggable,
XFileThumbnail

View File

@@ -57,7 +57,6 @@ import { faEyeSlash, faLaughSquint } from '@fortawesome/free-regular-svg-icons';
import insertTextAtCursor from 'insert-text-at-cursor';
import { length } from 'stringz';
import { toASCII } from 'punycode';
import i18n from '../i18n';
import MkVisibilityChooser from './visibility-chooser.vue';
import MkUserSelect from './user-select.vue';
import XNotePreview from './note-preview.vue';
@@ -70,8 +69,6 @@ import { formatTimeString } from '../../misc/format-time-string';
import { selectDriveFile } from '../scripts/select-drive-file';
export default Vue.extend({
i18n,
components: {
XNotePreview,
XUploader: () => import('./uploader.vue').then(m => m.default),

View File

@@ -4,9 +4,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
reaction: {
type: String,

View File

@@ -11,14 +11,11 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { emojiRegex } from '../../misc/emoji-regex';
import XReactionIcon from './reaction-icon.vue';
import XPopup from './popup.vue';
export default Vue.extend({
i18n,
components: {
XPopup,
XReactionIcon,

View File

@@ -20,10 +20,8 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
reaction: {
type: String,

View File

@@ -5,10 +5,8 @@
<script lang="ts">
import Vue from 'vue';
import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
href: {
type: String,

View File

@@ -7,13 +7,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import XWindow from './window.vue';
import MkSignin from './signin.vue';
export default Vue.extend({
i18n,
components: {
MkSignin,
XWindow,

View File

@@ -49,13 +49,10 @@ import { faLock, faGavel } from '@fortawesome/free-solid-svg-icons';
import { faTwitter, faDiscord, faGithub } from '@fortawesome/free-brands-svg-icons';
import MkButton from './ui/button.vue';
import MkInput from './ui/input.vue';
import i18n from '../i18n';
import { apiUrl, host } from '../config';
import { byteify, hexify } from '../scripts/2fa';
export default Vue.extend({
i18n,
components: {
MkButton,
MkInput,

View File

@@ -7,13 +7,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import XWindow from './window.vue';
import XSignup from './signup.vue';
export default Vue.extend({
i18n,
components: {
XSignup,
XWindow,

View File

@@ -53,15 +53,12 @@ import Vue from 'vue';
import { faLock, faExclamationTriangle, faSpinner, faCheck, faKey } from '@fortawesome/free-solid-svg-icons';
const getPasswordStrength = require('syuilo-password-strength');
import { toUnicode } from 'punycode';
import i18n from '../i18n';
import { host, url } from '../config';
import MkButton from './ui/button.vue';
import MkInput from './ui/input.vue';
import MkSwitch from './ui/switch.vue';
export default Vue.extend({
i18n,
components: {
MkButton,
MkInput,

View File

@@ -10,10 +10,8 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
export default Vue.extend({
i18n,
data() {
return {
hasDisconnected: false,

View File

@@ -21,12 +21,10 @@
<script lang="ts">
import Vue from 'vue';
import { faReply } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import XPoll from './poll.vue';
import XMediaList from './media-list.vue';
export default Vue.extend({
i18n,
components: {
XPoll,
XMediaList,

View File

@@ -8,10 +8,8 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
export default Vue.extend({
i18n,
props: {
time: {
type: [Date, String],

View File

@@ -21,13 +21,11 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { apiUrl } from '../config';
//import getMD5 from '../../scripts/get-md5';
import { faSpinner } from '@fortawesome/free-solid-svg-icons';
export default Vue.extend({
i18n,
data() {
return {
uploads: [],

View File

@@ -6,12 +6,9 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import MkUrlPreview from './url-preview.vue';
export default Vue.extend({
i18n,
components: {
MkUrlPreview
},

View File

@@ -32,12 +32,9 @@
<script lang="ts">
import Vue from 'vue';
import { faPlayCircle } from '@fortawesome/free-regular-svg-icons';
import i18n from '../i18n';
import { url as local, lang } from '../config';
export default Vue.extend({
i18n,
props: {
url: {
type: String,

View File

@@ -31,14 +31,11 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import paging from '../scripts/paging';
import MkContainer from './ui/container.vue';
import MkFollowButton from './follow-button.vue';
export default Vue.extend({
i18n,
components: {
MkContainer,
MkFollowButton,

View File

@@ -6,15 +6,12 @@
import Vue from 'vue';
import { faAt, faListUl, faEye, faEyeSlash, faBan, faPencilAlt, faComments, faUsers, faMicrophoneSlash } from '@fortawesome/free-solid-svg-icons';
import { faSnowflake, faEnvelope } from '@fortawesome/free-regular-svg-icons';
import i18n from '../i18n';
import XMenu from './menu.vue';
import copyToClipboard from '../scripts/copy-to-clipboard';
import { host } from '../config';
import getAcct from '../../misc/acct/render';
export default Vue.extend({
i18n,
components: {
XMenu
},

View File

@@ -28,13 +28,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import parseAcct from '../../misc/acct/parse';
import MkFollowButton from './follow-button.vue';
export default Vue.extend({
i18n,
components: {
MkFollowButton
},

View File

@@ -21,14 +21,11 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../i18n';
import { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons';
import MkInput from './ui/input.vue';
import XWindow from './window.vue';
export default Vue.extend({
i18n,
components: {
MkInput,
XWindow,

View File

@@ -31,13 +31,10 @@
<script lang="ts">
import Vue from 'vue';
import { faTimes } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import paging from '../scripts/paging';
import XModal from './modal.vue';
export default Vue.extend({
i18n,
components: {
XModal,
},

View File

@@ -37,11 +37,9 @@
import Vue from 'vue';
import { faGlobe, faUnlock, faHome } from '@fortawesome/free-solid-svg-icons';
import { faEnvelope } from '@fortawesome/free-regular-svg-icons';
import i18n from '../i18n';
import XPopup from './popup.vue';
export default Vue.extend({
i18n,
components: {
XPopup
},

View File

@@ -20,12 +20,9 @@
<script lang="ts">
import Vue from 'vue';
import { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons';
import i18n from '../i18n';
import XModal from './modal.vue';
export default Vue.extend({
i18n,
components: {
XModal,
},