diff --git a/package.json b/package.json index 58aeb363526c2c000e563bc3127fdcdddbc865cd..b5ece4501e6bf031b80d023f7099dcd066d50e4c 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "cropperjs": "1.5.12", "diff": "3.5.0", "escape-html": "1.0.3", - "js-cookie": "^3.0.1", "localforage": "1.10.0", "parse-link-header": "1.0.1", "phoenix": "1.6.2", diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue index 7ad1fe2e484345b046d89d6c5718eea5d7d4974a..6d1f83c436c4bcb5fd93aa22a01326e2daf61369 100644 --- a/src/components/interface_language_switcher/interface_language_switcher.vue +++ b/src/components/interface_language_switcher/interface_language_switcher.vue @@ -1,12 +1,12 @@ <template> <div> <label for="interface-language-switcher"> - {{ promptText }} + {{ $t('settings.interfaceLanguage') }} </label> {{ ' ' }} <Select id="interface-language-switcher" - v-model="controlledLanguage" + v-model="language" > <option v-for="lang in languages" @@ -20,43 +20,39 @@ </template> <script> +import languagesObject from '../../i18n/messages' import localeService from '../../services/locale/locale.service.js' +import ISO6391 from 'iso-639-1' +import _ from 'lodash' import Select from '../select/select.vue' export default { components: { Select }, - props: { - promptText: { - type: String, - required: true - }, - language: { - type: String, - required: true - }, - setLanguage: { - type: Function, - required: true - } - }, computed: { languages () { - return localeService.languages + return _.map(languagesObject.languages, (code) => ({ code: code, name: this.getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name)) }, - controlledLanguage: { - get: function () { return this.language }, + language: { + get: function () { return this.$store.getters.mergedConfig.interfaceLanguage }, set: function (val) { - this.setLanguage(val) + this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val }) } } }, methods: { getLanguageName (code) { - return localeService.getLanguageName(code) + const specialLanguageNames = { + 'ja_easy': 'ã‚„ã•ã—ã„ã«ã»ã‚“ã”', + 'zh': '简体ä¸æ–‡', + 'zh_Hant': 'ç¹é«”ä¸æ–‡' + } + const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code) + const browserLocale = localeService.internalToBrowserLocale(code) + return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1) } } } diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index 6eb316d096a58c902ca34a9ff02a8fa8c796539e..a3ef0f04964852cc0ebf7facb0c7bf5e428cfcb4 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -1,8 +1,6 @@ import useVuelidate from '@vuelidate/core' import { required, requiredIf, sameAs } from '@vuelidate/validators' import { mapActions, mapState } from 'vuex' -import InterfaceLanguageSwitcher from '../interface_language_switcher/interface_language_switcher.vue' -import localeService from '../../services/locale/locale.service.js' const registration = { setup () { return { v$: useVuelidate() } }, @@ -13,14 +11,10 @@ const registration = { username: '', password: '', confirm: '', - reason: '', - language: '' + reason: '' }, captcha: {} }), - components: { - InterfaceLanguageSwitcher - }, validations () { return { user: { @@ -32,8 +26,7 @@ const registration = { required, sameAs: sameAs(this.user.password) }, - reason: { required: requiredIf(() => this.accountApprovalRequired) }, - language: {} + reason: { required: requiredIf(() => this.accountApprovalRequired) } } } }, @@ -71,9 +64,6 @@ const registration = { this.user.captcha_solution = this.captcha.solution this.user.captcha_token = this.captcha.token this.user.captcha_answer_data = this.captcha.answer_data - if (this.user.language) { - this.user.language = localeService.internalToBackendLocale(this.user.language) - } this.v$.$touch() diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 6fa70a09784ecb9d2f90c3b41ac6df3d1997f6e1..3d4091095591419b82948a8e4c097e2308a2f55b 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -162,18 +162,6 @@ </ul> </div> - <div - class="form-group" - :class="{ 'form-group--error': $v.user.language.$error }" - > - <interface-language-switcher - for="email-language" - :prompt-text="$t('registration.email_language')" - :language="$v.user.language.$model" - :set-language="val => $v.user.language.$model = val" - /> - </div> - <div v-if="accountApprovalRequired" class="form-group" diff --git a/src/components/settings_modal/tabs/general_tab.js b/src/components/settings_modal/tabs/general_tab.js index de925155c5909e840ec025e50b929544a4b28002..62d86176d453766439fe5d10df2a9ab1ddf038bd 100644 --- a/src/components/settings_modal/tabs/general_tab.js +++ b/src/components/settings_modal/tabs/general_tab.js @@ -72,12 +72,6 @@ const GeneralTab = { !this.$store.state.users.currentUser.background_image }, instanceShoutboxPresent () { return this.$store.state.instance.shoutAvailable }, - language: { - get: function () { return this.$store.getters.mergedConfig.interfaceLanguage }, - set: function (val) { - this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val }) - } - }, ...SharedComputedObject() }, methods: { diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue index 39149d7f7cc07bde43456a66168586a7fc893bb3..a2c6bffa510559dea4d7830ea23e5716c0a84311 100644 --- a/src/components/settings_modal/tabs/general_tab.vue +++ b/src/components/settings_modal/tabs/general_tab.vue @@ -4,11 +4,7 @@ <h2>{{ $t('settings.interface') }}</h2> <ul class="setting-list"> <li> - <interface-language-switcher - :prompt-text="$t('settings.interfaceLanguage')" - :language="language" - :set-language="val => language = val" - /> + <interface-language-switcher /> </li> <li v-if="instanceSpecificPanelPresent"> <BooleanSetting path="hideISP"> diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js index 8781bb917cae0840ef3a6e4ee977291db982c171..f2b48b4ba308f8f79e31700dd0ee860b033c63e0 100644 --- a/src/components/settings_modal/tabs/profile_tab.js +++ b/src/components/settings_modal/tabs/profile_tab.js @@ -8,10 +8,8 @@ import EmojiInput from 'src/components/emoji_input/emoji_input.vue' import suggestor from 'src/components/emoji_input/suggestor.js' import Autosuggest from 'src/components/autosuggest/autosuggest.vue' import Checkbox from 'src/components/checkbox/checkbox.vue' -import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue' import BooleanSetting from '../helpers/boolean_setting.vue' import SharedComputedObject from '../helpers/shared_computed_object.js' -import localeService from 'src/services/locale/locale.service.js' import { library } from '@fortawesome/fontawesome-svg-core' import { @@ -42,8 +40,7 @@ const ProfileTab = { banner: null, bannerPreview: null, background: null, - backgroundPreview: null, - emailLanguage: this.$store.state.users.currentUser.language || '' + backgroundPreview: null } }, components: { @@ -53,8 +50,7 @@ const ProfileTab = { Autosuggest, ProgressButton, Checkbox, - BooleanSetting, - InterfaceLanguageSwitcher + BooleanSetting }, computed: { user () { @@ -115,25 +111,19 @@ const ProfileTab = { }, methods: { updateProfile () { - const params = { - note: this.newBio, - locked: this.newLocked, - // Backend notation. - /* eslint-disable camelcase */ - display_name: this.newName, - fields_attributes: this.newFields.filter(el => el != null), - bot: this.bot, - show_role: this.showRole - /* eslint-enable camelcase */ - } - - if (this.emailLanguage) { - params.language = localeService.internalToBackendLocale(this.emailLanguage) - } - this.$store.state.api.backendInteractor - .updateProfile({ params }) - .then((user) => { + .updateProfile({ + params: { + note: this.newBio, + locked: this.newLocked, + // Backend notation. + /* eslint-disable camelcase */ + display_name: this.newName, + fields_attributes: this.newFields.filter(el => el != null), + bot: this.bot, + show_role: this.showRole + /* eslint-enable camelcase */ + } }).then((user) => { this.newFields.splice(user.fields.length) merge(this.newFields, user.fields) this.$store.commit('addNewUsers', [user]) diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue index 4cd937722371cd4fbf5987b068acb1deaa3c15d0..881016fbdf3c1ee2ebd560c037d65b7dc69212f5 100644 --- a/src/components/settings_modal/tabs/profile_tab.vue +++ b/src/components/settings_modal/tabs/profile_tab.vue @@ -89,13 +89,6 @@ {{ $t('settings.bot') }} </Checkbox> </p> - <p> - <interface-language-switcher - :prompt-text="$t('settings.email_language')" - :language="emailLanguage" - :set-language="val => emailLanguage = val" - /> - </p> <button :disabled="newName && newName.length === 0" class="btn button-default" diff --git a/src/i18n/en.json b/src/i18n/en.json index a317449242beb129ab14702b4230a1834d3a3157..733df0a0aae556010e6ad7cf974dd29085072c67 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -255,8 +255,7 @@ "password_required": "cannot be left blank", "password_confirmation_required": "cannot be left blank", "password_confirmation_match": "should be the same as password" - }, - "email_language": "In which language do you want to receive emails from the server?" + } }, "remote_user_resolver": { "remote_user_resolver": "Remote user resolver", @@ -305,7 +304,6 @@ "avatarRadius": "Avatars", "background": "Background", "bio": "Bio", - "email_language": "Language for receiving emails from the server", "block_export": "Block export", "block_export_button": "Export your blocks to a csv file", "block_import": "Block import", diff --git a/src/modules/config.js b/src/modules/config.js index e04013394afaa0d2657d650d6299d957d8059409..13f1045b7e8b5b19aea0d3fca78e30ea02cc4eec 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -1,9 +1,5 @@ -import Cookies from 'js-cookie' import { setPreset, applyTheme } from '../services/style_setter/style_setter.js' import messages from '../i18n/messages' -import localeService from '../services/locale/locale.service.js' - -const BACKEND_LANGUAGE_COOKIE_NAME = 'userLanguage' const browserLocale = (window.navigator.language || 'en').split('-')[0] @@ -167,7 +163,6 @@ const config = { break case 'interfaceLanguage': messages.setLanguage(this.getters.i18n, value) - Cookies.set(BACKEND_LANGUAGE_COOKIE_NAME, localeService.internalToBackendLocale(value)) break } } diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index ca84ba2cf77acded101b034db20f5bc742b4a85e..50fa3d507ef0898ddec8caee0f8e7ea7c8e657eb 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -197,7 +197,6 @@ const updateProfile = ({ credentials, params }) => { // homepage // location // token -// language const register = ({ params, credentials }) => { const { nickname, ...rest } = params return fetch(MASTODON_REGISTRATION_URL, { diff --git a/src/services/locale/locale.service.js b/src/services/locale/locale.service.js index 8cef252219fd4962e19012a0e9d572dc1778d101..5be99d81f434275cf0783bb011a4cab5cbff5676 100644 --- a/src/services/locale/locale.service.js +++ b/src/services/locale/locale.service.js @@ -1,35 +1,12 @@ -import languagesObject from '../../i18n/messages' -import ISO6391 from 'iso-639-1' -import _ from 'lodash' - const specialLanguageCodes = { 'ja_easy': 'ja', - 'zh_Hant': 'zh-HANT', - 'zh': 'zh-Hans' + 'zh_Hant': 'zh-HANT' } const internalToBrowserLocale = code => specialLanguageCodes[code] || code -const internalToBackendLocale = code => internalToBrowserLocale(code).replace('_', '-') - -const getLanguageName = (code) => { - const specialLanguageNames = { - 'ja_easy': 'ã‚„ã•ã—ã„ã«ã»ã‚“ã”', - 'zh': '简体ä¸æ–‡', - 'zh_Hant': 'ç¹é«”ä¸æ–‡' - } - const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code) - const browserLocale = internalToBrowserLocale(code) - return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1) -} - -const languages = _.map(languagesObject.languages, (code) => ({ code: code, name: getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name)) - const localeService = { - internalToBrowserLocale, - internalToBackendLocale, - languages, - getLanguageName + internalToBrowserLocale } export default localeService diff --git a/yarn.lock b/yarn.lock index e413b6d1f46def441253b59f7ed636e329d977be..a898a9324a8b9abcd4144dbf8ddba8ced85fad3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5722,11 +5722,6 @@ js-base64@^2.1.9: version "2.5.0" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz#42255ba183ab67ce59a0dee640afdc00ab5ae93e" -js-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" - integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"