forked from mirrors/akkoma-fe
Merge branch 'develop' into stable
This commit is contained in:
commit
cb63cc38c1
127 changed files with 7278 additions and 5780 deletions
|
@ -1,2 +0,0 @@
|
|||
build/*.js
|
||||
config/*.js
|
30
.eslintrc.js
30
.eslintrc.js
|
@ -1,30 +0,0 @@
|
|||
module.exports = {
|
||||
root: true,
|
||||
parserOptions: {
|
||||
parser: '@babel/eslint-parser',
|
||||
sourceType: 'module'
|
||||
},
|
||||
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
|
||||
extends: [
|
||||
'plugin:vue/recommended'
|
||||
],
|
||||
// required to lint *.vue files
|
||||
plugins: [
|
||||
'vue',
|
||||
'import'
|
||||
],
|
||||
// add your custom rules here
|
||||
rules: {
|
||||
// allow paren-less arrow functions
|
||||
'arrow-parens': 0,
|
||||
// allow async-await
|
||||
'generator-star-spacing': 0,
|
||||
// allow debugger during development
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
|
||||
'vue/require-prop-types': 0,
|
||||
'vue/no-unused-vars': 0,
|
||||
'no-tabs': 0,
|
||||
'vue/multi-word-component-names': 0,
|
||||
'vue/no-reserved-component-names': 0
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
7.2.1
|
1
.tool-versions
Normal file
1
.tool-versions
Normal file
|
@ -0,0 +1 @@
|
|||
nodejs 20.12.2
|
|
@ -1,20 +1,21 @@
|
|||
labels:
|
||||
platform: linux/amd64
|
||||
pipeline:
|
||||
|
||||
steps:
|
||||
lint:
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
image: node:18
|
||||
image: node:20
|
||||
commands:
|
||||
- yarn
|
||||
- yarn lint
|
||||
#- yarn stylelint
|
||||
|
||||
test:
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
image: node:18
|
||||
image: node:20
|
||||
commands:
|
||||
- apt update
|
||||
- apt install firefox-esr -y --no-install-recommends
|
||||
|
@ -28,7 +29,7 @@ pipeline:
|
|||
branch:
|
||||
- develop
|
||||
- stable
|
||||
image: node:18
|
||||
image: node:20
|
||||
commands:
|
||||
- yarn
|
||||
- yarn build
|
||||
|
@ -40,15 +41,15 @@ pipeline:
|
|||
branch:
|
||||
- develop
|
||||
- stable
|
||||
image: node:18
|
||||
image: node:20
|
||||
secrets:
|
||||
- SCW_ACCESS_KEY
|
||||
- SCW_SECRET_KEY
|
||||
- SCW_DEFAULT_ORGANIZATION_ID
|
||||
commands:
|
||||
- apt-get update && apt-get install -y rclone wget zip
|
||||
- wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64
|
||||
- mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli
|
||||
- wget https://github.com/scaleway/scaleway-cli/releases/download/v2.30.0/scaleway-cli_2.30.0_linux_amd64
|
||||
- mv scaleway-cli_2.30.0_linux_amd64 scaleway-cli
|
||||
- chmod +x scaleway-cli
|
||||
- ./scaleway-cli object config install type=rclone
|
||||
- zip akkoma-fe.zip -r dist
|
||||
|
@ -70,8 +71,8 @@ pipeline:
|
|||
- SCW_DEFAULT_ORGANIZATION_ID
|
||||
commands:
|
||||
- apt-get update && apt-get install -y rclone wget git zip
|
||||
- wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64
|
||||
- mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli
|
||||
- wget https://github.com/scaleway/scaleway-cli/releases/download/v2.30.0/scaleway-cli_2.30.0_linux_amd64
|
||||
- mv scaleway-cli_2.30.0_linux_amd64 scaleway-cli
|
||||
- chmod +x scaleway-cli
|
||||
- ./scaleway-cli object config install type=rclone
|
||||
- cd docs
|
||||
|
|
|
@ -20,6 +20,8 @@ To use Akkoma-FE in Akkoma, use the [frontend](https://docs.akkoma.dev/stable/ad
|
|||
|
||||
## Build Setup
|
||||
|
||||
Make sure you have [Node.js](https://nodejs.org/) installed. You can check `/.woodpecker.yml` for which node version the Akkoma CI currently uses.
|
||||
|
||||
``` bash
|
||||
# install dependencies
|
||||
corepack enable
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
// https://github.com/shelljs/shelljs
|
||||
require('./check-versions')()
|
||||
require('shelljs/global')
|
||||
env.NODE_ENV = 'production'
|
||||
require("./check-versions")();
|
||||
require("shelljs/global");
|
||||
env.NODE_ENV = "production";
|
||||
|
||||
var path = require('path')
|
||||
var config = require('../config')
|
||||
var ora = require('ora')
|
||||
var webpack = require('webpack')
|
||||
var webpackConfig = require('./webpack.prod.conf')
|
||||
var path = require("path");
|
||||
var config = require("../config");
|
||||
var webpack = require("webpack");
|
||||
var webpackConfig = require("./webpack.prod.conf");
|
||||
|
||||
console.log(
|
||||
' Tip:\n' +
|
||||
' Built files are meant to be served over an HTTP server.\n' +
|
||||
' Opening index.html over file:// won\'t work.\n'
|
||||
)
|
||||
" Tip:\n" +
|
||||
" Built files are meant to be served over an HTTP server.\n" +
|
||||
" Opening index.html over file:// won't work.\n",
|
||||
);
|
||||
|
||||
var spinner = ora('building for production...')
|
||||
spinner.start()
|
||||
|
||||
var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory)
|
||||
rm('-rf', assetsPath)
|
||||
mkdir('-p', assetsPath)
|
||||
cp('-R', 'static/*', assetsPath)
|
||||
var assetsPath = path.join(
|
||||
config.build.assetsRoot,
|
||||
config.build.assetsSubDirectory,
|
||||
);
|
||||
rm("-rf", assetsPath);
|
||||
mkdir("-p", assetsPath);
|
||||
cp("-R", "static/*", assetsPath);
|
||||
|
||||
webpack(webpackConfig, function (err, stats) {
|
||||
spinner.stop()
|
||||
if (err) throw err
|
||||
process.stdout.write(stats.toString({
|
||||
if (err) throw err;
|
||||
process.stdout.write(
|
||||
stats.toString({
|
||||
colors: true,
|
||||
modules: false,
|
||||
children: false,
|
||||
chunks: false,
|
||||
chunkModules: false
|
||||
}) + '\n')
|
||||
})
|
||||
chunkModules: false,
|
||||
}) + "\n",
|
||||
);
|
||||
});
|
||||
|
|
|
@ -5,7 +5,7 @@ var path = require('path')
|
|||
var express = require('express')
|
||||
var webpack = require('webpack')
|
||||
var opn = require('opn')
|
||||
var proxyMiddleware = require('http-proxy-middleware')
|
||||
const { createProxyMiddleware } = require('http-proxy-middleware');
|
||||
var webpackConfig = process.env.NODE_ENV === 'testing'
|
||||
? require('./webpack.prod.conf')
|
||||
: require('./webpack.dev.conf')
|
||||
|
@ -36,7 +36,13 @@ Object.keys(proxyTable).forEach(function (context) {
|
|||
if (typeof options === 'string') {
|
||||
options = { target: options }
|
||||
}
|
||||
app.use(proxyMiddleware(context, options))
|
||||
const targetUrl = new URL(options.target);
|
||||
// add path
|
||||
targetUrl.pathname = context;
|
||||
options.target = targetUrl.toString();
|
||||
|
||||
console.log("Proxying", context, "to", options.target);
|
||||
app.use(context, createProxyMiddleware(options))
|
||||
})
|
||||
|
||||
// handle fallback for HTML5 history API
|
||||
|
|
|
@ -3,6 +3,7 @@ var config = require('../config')
|
|||
var utils = require('./utils')
|
||||
var projectRoot = path.resolve(__dirname, '../')
|
||||
var { VueLoaderPlugin } = require('vue-loader')
|
||||
const ESLintPlugin = require('eslint-webpack-plugin');
|
||||
|
||||
var env = process.env.NODE_ENV
|
||||
// check env & config/index.js to decide weither to enable CSS Sourcemaps for the
|
||||
|
@ -35,6 +36,7 @@ module.exports = {
|
|||
],
|
||||
fallback: {
|
||||
"url": require.resolve("url/"),
|
||||
querystring: require.resolve("querystring-es3")
|
||||
},
|
||||
alias: {
|
||||
'static': path.resolve(__dirname, '../static'),
|
||||
|
@ -47,20 +49,6 @@ module.exports = {
|
|||
module: {
|
||||
noParse: /node_modules\/localforage\/dist\/localforage.js/,
|
||||
rules: [
|
||||
{
|
||||
enforce: 'pre',
|
||||
test: /\.(js|vue)$/,
|
||||
include: projectRoot,
|
||||
exclude: /node_modules/,
|
||||
use: {
|
||||
loader: 'eslint-loader',
|
||||
options: {
|
||||
formatter: require('eslint-friendly-formatter'),
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
extract: true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
enforce: 'post',
|
||||
test: /\.(json5?|ya?ml)$/, // target json, json5, yaml and yml files
|
||||
|
@ -118,6 +106,9 @@ module.exports = {
|
|||
]
|
||||
},
|
||||
plugins: [
|
||||
new VueLoaderPlugin()
|
||||
new VueLoaderPlugin(),
|
||||
new ESLintPlugin({
|
||||
configType: 'flat'
|
||||
})
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,5 +2,4 @@ var { merge } = require('webpack-merge')
|
|||
var devEnv = require('./dev.env')
|
||||
|
||||
module.exports = merge(devEnv, {
|
||||
NODE_ENV: '"testing"'
|
||||
})
|
||||
|
|
31
eslint.config.js
Normal file
31
eslint.config.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
const pluginVue = require('eslint-plugin-vue')
|
||||
const pluginImport = require('eslint-plugin-import')
|
||||
|
||||
module.exports = [
|
||||
...pluginVue.configs['flat/recommended'],
|
||||
{
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
parser: '@babel/eslint-parser',
|
||||
sourceType: 'module'
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
// allow paren-less arrow functions
|
||||
'arrow-parens': 0,
|
||||
// allow async-await
|
||||
'generator-star-spacing': 0,
|
||||
// allow debugger during development
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
|
||||
'vue/require-prop-types': 0,
|
||||
'vue/no-unused-vars': 0,
|
||||
'no-tabs': 0,
|
||||
'vue/multi-word-component-names': 0,
|
||||
'vue/no-reserved-component-names': 0
|
||||
},
|
||||
ignores: [
|
||||
'build/*.js',
|
||||
'config/*.js'
|
||||
]
|
||||
}
|
||||
]
|
162
package.json
162
package.json
|
@ -12,120 +12,118 @@
|
|||
"e2e": "node test/e2e/runner.js",
|
||||
"test": "npm run unit && npm run e2e",
|
||||
"stylelint": "stylelint src/**/*.scss",
|
||||
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs",
|
||||
"lint-fix": "eslint --fix --ext .js,.vue src test/unit/specs test/e2e/specs"
|
||||
"lint": "eslint src test/unit/specs test/e2e/specs",
|
||||
"lint-fix": "eslint --fix src test/unit/specs test/e2e/specs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "7.17.8",
|
||||
"@chenfengyuan/vue-qrcode": "2.0.0",
|
||||
"@chenfengyuan/vue-qrcode": "^2.0.0",
|
||||
"@floatingghost/pinch-zoom-element": "^1.3.1",
|
||||
"@fortawesome/fontawesome-svg-core": "1.3.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.1.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.2.0",
|
||||
"@fortawesome/vue-fontawesome": "3.0.1",
|
||||
"@vuelidate/core": "^2.0.0",
|
||||
"@vuelidate/validators": "^2.0.0",
|
||||
"blurhash": "^2.0.4",
|
||||
"body-scroll-lock": "2.7.1",
|
||||
"chromatism": "3.0.0",
|
||||
"click-outside-vue3": "4.0.1",
|
||||
"cropperjs": "1.5.12",
|
||||
"diff": "3.5.0",
|
||||
"escape-html": "1.0.3",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.5.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.8",
|
||||
"@vuelidate/core": "^2.0.3",
|
||||
"@vuelidate/validators": "^2.0.4",
|
||||
"blurhash": "^2.0.5",
|
||||
"body-scroll-lock": "^3.1.5",
|
||||
"chromatism": "^3.0.0",
|
||||
"click-outside-vue3": "^4.0.1",
|
||||
"cropperjs": "^1.6.2",
|
||||
"diff": "^5.2.0",
|
||||
"escape-html": "^1.0.3",
|
||||
"iso-639-1": "^2.1.15",
|
||||
"js-cookie": "^3.0.1",
|
||||
"localforage": "1.10.0",
|
||||
"localforage": "^1.10.0",
|
||||
"parse-link-header": "^2.0.0",
|
||||
"phoenix": "1.6.2",
|
||||
"punycode.js": "2.1.0",
|
||||
"qrcode": "1",
|
||||
"url": "^0.11.0",
|
||||
"vue": "^3.2.31",
|
||||
"vue-i18n": "^9.2.2",
|
||||
"vue-router": "4.0.14",
|
||||
"vue-template-compiler": "2.6.11",
|
||||
"vuex": "4.0.2"
|
||||
"phoenix": "^1.7.12",
|
||||
"punycode.js": "^2.3.1",
|
||||
"qrcode": "^1.5.3",
|
||||
"querystring-es3": "^0.2.1",
|
||||
"url": "^0.11.3",
|
||||
"vue": "^3.4.38",
|
||||
"vue-i18n": "^9.14.0",
|
||||
"vue-router": "^4.4.3",
|
||||
"vue-template-compiler": "^2.7.16",
|
||||
"vuex": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.17.8",
|
||||
"@babel/core": "^7.24.6",
|
||||
"@babel/eslint-parser": "^7.19.1",
|
||||
"@babel/plugin-transform-runtime": "7.17.0",
|
||||
"@babel/preset-env": "7.16.11",
|
||||
"@babel/register": "7.17.7",
|
||||
"@babel/plugin-transform-runtime": "^7.24.6",
|
||||
"@babel/preset-env": "^7.24.6",
|
||||
"@babel/register": "^7.24.6",
|
||||
"@intlify/vue-i18n-loader": "^5.0.0",
|
||||
"@ungap/event-target": "0.2.3",
|
||||
"@vue/babel-helper-vue-jsx-merge-props": "1.2.1",
|
||||
"@vue/babel-plugin-jsx": "1.1.1",
|
||||
"@ungap/event-target": "^0.2.4",
|
||||
"@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
|
||||
"@vue/babel-plugin-jsx": "^1.2.2",
|
||||
"@vue/compiler-sfc": "^3.1.0",
|
||||
"@vue/test-utils": "^2.0.2",
|
||||
"autoprefixer": "6.7.7",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"babel-loader": "^9.1.0",
|
||||
"babel-plugin-lodash": "3.3.4",
|
||||
"babel-plugin-lodash": "^3.3.4",
|
||||
"chai": "^4.3.7",
|
||||
"chalk": "1.1.3",
|
||||
"chromedriver": "^107.0.3",
|
||||
"chalk": "^1.1.3",
|
||||
"chromedriver": "^119.0.1",
|
||||
"connect-history-api-fallback": "^2.0.0",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"css-loader": "^6.7.2",
|
||||
"css-loader": "^7.1.2",
|
||||
"custom-event-polyfill": "^1.0.7",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-config-standard": "^17.0.0",
|
||||
"eslint": "^9.3.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-friendly-formatter": "^4.0.1",
|
||||
"eslint-loader": "^4.0.2",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-promise": "^6.2.0",
|
||||
"eslint-plugin-standard": "^5.0.0",
|
||||
"eslint-plugin-vue": "^9.7.0",
|
||||
"eventsource-polyfill": "0.9.6",
|
||||
"express": "4.17.3",
|
||||
"eslint-plugin-vue": "^9.26.0",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"eventsource-polyfill": "^0.9.6",
|
||||
"express": "^4.19.2",
|
||||
"file-loader": "^6.2.0",
|
||||
"function-bind": "1.1.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"http-proxy-middleware": "0.21.0",
|
||||
"inject-loader": "2.0.1",
|
||||
"isparta-loader": "2.0.0",
|
||||
"json-loader": "0.5.7",
|
||||
"karma": "6.3.17",
|
||||
"karma-coverage": "1.1.2",
|
||||
"karma-firefox-launcher": "1.3.0",
|
||||
"karma-mocha": "2.0.1",
|
||||
"karma-mocha-reporter": "2.2.5",
|
||||
"karma-sinon-chai": "2.0.2",
|
||||
"karma-sourcemap-loader": "0.3.8",
|
||||
"karma-spec-reporter": "0.0.33",
|
||||
"http-proxy-middleware": "^3.0.0",
|
||||
"json-loader": "^0.5.7",
|
||||
"karma": "^6.4.3",
|
||||
"karma-coverage": "^2.2.1",
|
||||
"karma-firefox-launcher": "^2.1.3",
|
||||
"karma-mocha": "^2.0.1",
|
||||
"karma-mocha-reporter": "^2.2.5",
|
||||
"karma-sinon-chai": "^2.0.2",
|
||||
"karma-sourcemap-loader": "^0.4.0",
|
||||
"karma-spec-reporter": "^0.0.36",
|
||||
"karma-webpack": "^5.0.0",
|
||||
"lodash": "4.17.21",
|
||||
"lolex": "1.6.0",
|
||||
"mini-css-extract-plugin": "0.12.0",
|
||||
"mocha": "3.5.3",
|
||||
"nightwatch": "0.9.21",
|
||||
"opn": "4.0.2",
|
||||
"ora": "0.4.1",
|
||||
"lodash": "^4.17.21",
|
||||
"lolex": "^6.0.0",
|
||||
"mini-css-extract-plugin": "^2.9.0",
|
||||
"mocha": "^10.4.0",
|
||||
"nightwatch": "^3.6.3",
|
||||
"opn": "^6.0.0",
|
||||
"postcss-html": "^1.5.0",
|
||||
"postcss-loader": "3.0.0",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"postcss-sass": "^0.5.0",
|
||||
"raw-loader": "0.5.1",
|
||||
"sass": "^1.56.0",
|
||||
"sass-loader": "^13.2.0",
|
||||
"selenium-server": "2.53.1",
|
||||
"semver": "5.7.1",
|
||||
"shelljs": "0.8.5",
|
||||
"sinon": "2.4.1",
|
||||
"sinon-chai": "2.14.0",
|
||||
"raw-loader": "^4.0.2",
|
||||
"sass": "^1.77.2",
|
||||
"sass-loader": "^14.2.1",
|
||||
"selenium-server": "^3.141.59",
|
||||
"semver": "^7.6.2",
|
||||
"shelljs": "^0.8.5",
|
||||
"sinon": "^18.0.0",
|
||||
"sinon-chai": "^3.7.0",
|
||||
"stylelint": "^14.15.0",
|
||||
"stylelint-config-recommended-vue": "^1.4.0",
|
||||
"stylelint-config-standard": "^29.0.0",
|
||||
"stylelint-config-standard-scss": "^6.1.0",
|
||||
"stylelint-rscss": "^0.4.0",
|
||||
"url-loader": "^4.1.1",
|
||||
"vue-loader": "^17.0.0",
|
||||
"vue-style-loader": "^4.1.2",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-dev-middleware": "^5.3.3",
|
||||
"webpack-hot-middleware": "^2.25.1",
|
||||
"webpack-merge": "^5.8.0",
|
||||
"workbox-webpack-plugin": "^6.5.4"
|
||||
"vue-loader": "^17.4.2",
|
||||
"vue-style-loader": "^4.1.3",
|
||||
"webpack": "^5.91.0",
|
||||
"webpack-dev-middleware": "^7.2.1",
|
||||
"webpack-hot-middleware": "^2.26.1",
|
||||
"webpack-merge": "^5.10.0",
|
||||
"workbox-webpack-plugin": "^7.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16.0.0",
|
||||
|
|
|
@ -183,6 +183,12 @@ const setSettings = async ({ apiConfig, staticConfig, store }) => {
|
|||
copyInstanceOption('renderMisskeyMarkdown')
|
||||
copyInstanceOption('sidebarRight')
|
||||
|
||||
if (config.backendCommitUrl)
|
||||
copyInstanceOption('backendCommitUrl')
|
||||
|
||||
if (config.frontendCommitUrl)
|
||||
copyInstanceOption('frontendCommitUrl')
|
||||
|
||||
return store.dispatch('setTheme', config['theme'])
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
:bound-to="{ x: 'container' }"
|
||||
remove-padding
|
||||
>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="dropdown-menu">
|
||||
<template v-if="relationship.following">
|
||||
<button
|
||||
|
@ -71,7 +71,7 @@
|
|||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button class="button-unstyled ellipsis-button">
|
||||
<FAIcon
|
||||
class="icon"
|
||||
|
@ -93,7 +93,7 @@
|
|||
keypath="user_card.block_confirm"
|
||||
tag="span"
|
||||
>
|
||||
<template v-slot:user>
|
||||
<template #user>
|
||||
<span
|
||||
v-text="user.screen_name_ui"
|
||||
/>
|
||||
|
|
|
@ -246,8 +246,8 @@
|
|||
ref="flash"
|
||||
class="flash"
|
||||
:src="attachment.large_thumb_url || attachment.url"
|
||||
@playerOpened="setFlashLoaded(true)"
|
||||
@playerClosed="setFlashLoaded(false)"
|
||||
@player-opened="setFlashLoaded(true)"
|
||||
@player-closed="setFlashLoaded(false)"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
|
|
@ -22,12 +22,12 @@
|
|||
|
||||
<script>
|
||||
export default {
|
||||
emits: ['update:modelValue'],
|
||||
props: [
|
||||
'modelValue',
|
||||
'indeterminate',
|
||||
'disabled'
|
||||
]
|
||||
],
|
||||
emits: ['update:modelValue']
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
:model-value="present"
|
||||
:disabled="disabled"
|
||||
class="opt"
|
||||
@update:modelValue="$emit('update:modelValue', typeof modelValue === 'undefined' ? fallback : undefined)"
|
||||
@update:model-value="$emit('update:modelValue', typeof modelValue === 'undefined' ? fallback : undefined)"
|
||||
/>
|
||||
<div class="input color-input-field">
|
||||
<input
|
||||
|
@ -46,7 +46,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<style lang="scss" src="./color_input.scss"></style>
|
||||
<script>
|
||||
import Checkbox from '../checkbox/checkbox.vue'
|
||||
import { hex2rgb } from '../../services/color_convert/color_convert.js'
|
||||
|
@ -108,6 +107,7 @@ export default {
|
|||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" src="./color_input.scss"></style>
|
||||
|
||||
<style lang="scss">
|
||||
.color-control {
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
</dialog-modal>
|
||||
</template>
|
||||
|
||||
<script src="./confirm_modal.js"></script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '../../_variables';
|
||||
|
||||
|
@ -35,5 +37,3 @@
|
|||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="./confirm_modal.js"></script>
|
||||
|
|
|
@ -267,11 +267,11 @@ const conversation = {
|
|||
},
|
||||
replies () {
|
||||
let i = 1
|
||||
// eslint-disable-next-line camelcase
|
||||
|
||||
return reduce(this.conversation, (result, { id, in_reply_to_status_id }) => {
|
||||
/* eslint-disable camelcase */
|
||||
|
||||
const irid = in_reply_to_status_id
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
if (irid) {
|
||||
result[irid] = result[irid] || []
|
||||
result[irid].push({
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
:controlled-set-media-playing="(newVal) => toggleStatusContentProperty(status.id, 'mediaPlaying', newVal)"
|
||||
|
||||
@goto="setHighlight"
|
||||
@toggleExpanded="toggleExpanded"
|
||||
@toggle-expanded="toggleExpanded"
|
||||
/>
|
||||
<div
|
||||
v-if="showOtherRepliesButtonBelowStatus && getReplies(status.id).length > 1"
|
||||
|
@ -184,7 +184,7 @@
|
|||
:toggle-status-content-property="toggleStatusContentProperty"
|
||||
|
||||
@goto="setHighlight"
|
||||
@toggleExpanded="toggleExpanded"
|
||||
@toggle-expanded="toggleExpanded"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -44,9 +44,9 @@
|
|||
/>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="publicTimelineVisible"
|
||||
:to="{ name: 'public-timeline' }"
|
||||
class="nav-icon"
|
||||
v-if="publicTimelineVisible"
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
|
@ -68,9 +68,9 @@
|
|||
/>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="federatedTimelineVisible"
|
||||
:to="{ name: 'public-external-timeline' }"
|
||||
class="nav-icon"
|
||||
v-if="federatedTimelineVisible"
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
class="btn button-default"
|
||||
>
|
||||
{{ $t('domain_mute_card.unmute') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('domain_mute_card.unmute_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
|
@ -19,7 +19,7 @@
|
|||
class="btn button-default"
|
||||
>
|
||||
{{ $t('domain_mute_card.mute') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('domain_mute_card.mute_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<Modal
|
||||
v-if="isFormVisible"
|
||||
class="edit-form-modal-view"
|
||||
@backdropClicked="closeModal"
|
||||
@backdrop-clicked="closeModal"
|
||||
>
|
||||
<div class="edit-form-modal-panel panel">
|
||||
<div class="panel-heading">
|
||||
|
@ -11,10 +11,10 @@
|
|||
<PostStatusForm
|
||||
class="panel-body"
|
||||
v-bind="params"
|
||||
@posted="closeModal"
|
||||
:disablePolls="true"
|
||||
:disableVisibilitySelector="true"
|
||||
:disable-polls="true"
|
||||
:disable-visibility-selector="true"
|
||||
:post-handler="doEditStatus"
|
||||
@posted="closeModal"
|
||||
/>
|
||||
</div>
|
||||
</Modal>
|
||||
|
|
|
@ -43,7 +43,10 @@
|
|||
:class="{ highlighted: index === highlighted }"
|
||||
@click.stop.prevent="onClick($event, suggestion)"
|
||||
>
|
||||
<span v-if="!suggestion.mfm" class="image">
|
||||
<span
|
||||
v-if="!suggestion.mfm"
|
||||
class="image"
|
||||
>
|
||||
<img
|
||||
v-if="suggestion.img"
|
||||
:src="suggestion.img"
|
||||
|
|
|
@ -122,14 +122,14 @@ export const suggestUsers = ({ dispatch, state }) => {
|
|||
const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1
|
||||
|
||||
return diff + nameAlphabetically + screenNameAlphabetically
|
||||
/* eslint-disable camelcase */
|
||||
|
||||
}).map(({ screen_name, screen_name_ui, name, profile_image_url_original }) => ({
|
||||
displayText: screen_name_ui,
|
||||
detailText: name,
|
||||
imageUrl: profile_image_url_original,
|
||||
replacement: '@' + screen_name + ' '
|
||||
}))
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
|
||||
suggestions = newSuggestions || []
|
||||
return suggestions
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
:bound-to="{ x: 'container' }"
|
||||
remove-padding
|
||||
>
|
||||
<template v-slot:content="{close}">
|
||||
<template #content="{close}">
|
||||
<div class="dropdown-menu">
|
||||
<button
|
||||
v-if="canMute && !status.thread_muted"
|
||||
|
@ -172,7 +172,7 @@
|
|||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button class="button-unstyled popover-trigger">
|
||||
<FAIcon
|
||||
class="fa-scale-110 fa-old-padding"
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
<template>
|
||||
<basic-user-card :user="user" v-if="show">
|
||||
<basic-user-card
|
||||
v-if="show"
|
||||
:user="user"
|
||||
>
|
||||
<div class="follow-request-card-content-container">
|
||||
<button
|
||||
class="btn button-default"
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
:description="descriptions && descriptions[attachment.id]"
|
||||
:hide-description="size === 'small' || tooManyAttachments && hidingLong"
|
||||
:style="itemStyle(attachment.id, row.items)"
|
||||
@setMedia="onMedia"
|
||||
@naturalSizeLoad="onNaturalSizeLoad"
|
||||
@set-media="onMedia"
|
||||
@natural-size-load="onNaturalSizeLoad"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -42,6 +42,7 @@ export default {
|
|||
@import '../../_variables.scss';
|
||||
|
||||
.list {
|
||||
min-height: 1em;
|
||||
&-item:not(:last-child) {
|
||||
border-bottom: 1px solid;
|
||||
border-bottom-color: $fallback--border;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<Modal
|
||||
v-if="showing"
|
||||
class="media-modal-view"
|
||||
@backdropClicked="hideIfNotSwiped"
|
||||
@backdrop-clicked="hideIfNotSwiped"
|
||||
>
|
||||
<SwipeClick
|
||||
v-if="type === 'image'"
|
||||
|
|
|
@ -42,7 +42,7 @@ const mediaUpload = {
|
|||
.then((fileData) => {
|
||||
self.$emit('uploaded', fileData)
|
||||
self.decreaseUploadCount()
|
||||
}, (error) => { // eslint-disable-line handle-callback-err
|
||||
}, (error) => {
|
||||
self.$emit('upload-failed', 'default')
|
||||
self.decreaseUploadCount()
|
||||
})
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
<input
|
||||
id="code"
|
||||
v-model="code"
|
||||
autocomplete="one-time-code"
|
||||
class="form-control"
|
||||
>
|
||||
</div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
class="panel-heading"
|
||||
@click="toggleHidden"
|
||||
>
|
||||
<h4>{{ $t('moderation.reports.report') + ' ' + this.account.screen_name }}</h4>
|
||||
<h4>{{ $t('moderation.reports.report') + ' ' + account.screen_name }}</h4>
|
||||
<button
|
||||
v-if="isOpen"
|
||||
class="button-default"
|
||||
|
@ -35,7 +35,10 @@
|
|||
<div v-if="content">
|
||||
{{ decode(content) }}
|
||||
</div>
|
||||
<i v-else class="faint">
|
||||
<i
|
||||
v-else
|
||||
class="faint"
|
||||
>
|
||||
{{ $t('moderation.reports.no_content') }}
|
||||
</i>
|
||||
<div class="report-author">
|
||||
|
@ -43,12 +46,12 @@
|
|||
class="small-avatar"
|
||||
:user="actor"
|
||||
/>
|
||||
{{ this.actor.screen_name }}
|
||||
{{ actor.screen_name }}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="!hidden && statuses.length > 0"
|
||||
class="dropdown"
|
||||
v-if="!hidden && this.statuses.length > 0"
|
||||
>
|
||||
<button
|
||||
class="button button-unstyled dropdown-header"
|
||||
|
@ -74,8 +77,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="!hidden && notes.length > 0"
|
||||
class="dropdown"
|
||||
v-if="!hidden && this.notes.length > 0"
|
||||
>
|
||||
<button
|
||||
class="button button-unstyled dropdown-header"
|
||||
|
@ -99,9 +102,9 @@
|
|||
</div>
|
||||
<div class="report-add-note">
|
||||
<textarea
|
||||
v-model.trim="note"
|
||||
rows="1"
|
||||
cols="1"
|
||||
v-model.trim="note"
|
||||
:placeholder="$t('moderation.reports.note_placeholder')"
|
||||
/>
|
||||
<button
|
||||
|
@ -134,7 +137,7 @@
|
|||
:offset="{ y: 5 }"
|
||||
remove-padding
|
||||
>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button
|
||||
class="btn button-default"
|
||||
:disabled="!tagPolicyEnabled"
|
||||
|
@ -147,7 +150,7 @@
|
|||
/>
|
||||
</button>
|
||||
</template>
|
||||
<template v-slot:content="{close}">
|
||||
<template #content="{close}">
|
||||
<div
|
||||
class="dropdown-menu"
|
||||
:disabled="!tagPolicyEnabled"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
class="small-avatar"
|
||||
:user="user"
|
||||
/>
|
||||
{{ this.user.screen_name }}
|
||||
{{ user.screen_name }}
|
||||
</div>
|
||||
<div class="header-right">
|
||||
<Timeago
|
||||
|
|
|
@ -22,6 +22,9 @@ export default {
|
|||
default: false
|
||||
}
|
||||
},
|
||||
emits: [
|
||||
'backdropClicked',
|
||||
],
|
||||
computed: {
|
||||
classes () {
|
||||
return {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
@show="setToggled(true)"
|
||||
@close="setToggled(false)"
|
||||
>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="dropdown-menu">
|
||||
<span v-if="user.is_local">
|
||||
<button
|
||||
|
@ -122,7 +122,7 @@
|
|||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button
|
||||
class="btn button-default btn-block moderation-tools-button"
|
||||
:class="{ toggled }"
|
||||
|
@ -137,11 +137,11 @@
|
|||
v-if="showDeleteUserDialog"
|
||||
:on-cancel="deleteUserDialog.bind(this, false)"
|
||||
>
|
||||
<template v-slot:header>
|
||||
<template #header>
|
||||
{{ $t('user_card.admin_menu.delete_user') }}
|
||||
</template>
|
||||
<p>{{ $t('user_card.admin_menu.delete_user_confirmation') }}</p>
|
||||
<template v-slot:footer>
|
||||
<template #footer>
|
||||
<button
|
||||
class="btn button-default"
|
||||
@click="deleteUserDialog(false)"
|
||||
|
|
|
@ -6,6 +6,7 @@ import UserCard from '../user_card/user_card.vue'
|
|||
import Timeago from '../timeago/timeago.vue'
|
||||
import RichContent from 'src/components/rich_content/rich_content.jsx'
|
||||
import ConfirmModal from '../confirm_modal/confirm_modal.vue'
|
||||
import StillImage from '../still-image/still-image.vue'
|
||||
import { isStatusNotification } from '../../services/notification_utils/notification_utils.js'
|
||||
import { highlightClass, highlightStyle } from '../../services/user_highlighter/user_highlighter.js'
|
||||
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
|
||||
|
@ -50,7 +51,8 @@ const Notification = {
|
|||
Timeago,
|
||||
Status,
|
||||
RichContent,
|
||||
ConfirmModal
|
||||
ConfirmModal,
|
||||
StillImage
|
||||
},
|
||||
methods: {
|
||||
toggleUserExpanded () {
|
||||
|
|
|
@ -116,12 +116,13 @@
|
|||
scope="global"
|
||||
keypath="notifications.reacted_with"
|
||||
>
|
||||
<img
|
||||
<still-image
|
||||
v-if="notification.emoji_url !== null"
|
||||
class="notification-reaction-emoji"
|
||||
:src="notification.emoji_url"
|
||||
:name="notification.emoji"
|
||||
>
|
||||
:title="notification.emoji"
|
||||
:alt="notification.emoji"
|
||||
/>
|
||||
<span
|
||||
v-else
|
||||
class="emoji-reaction-emoji"
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
placement="bottom"
|
||||
:bound-to="{ x: 'container' }"
|
||||
>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="dropdown-menu">
|
||||
<button
|
||||
class="button-default dropdown-item"
|
||||
|
@ -72,7 +72,7 @@
|
|||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button class="filter-trigger-button button-unstyled">
|
||||
<FAIcon icon="filter" />
|
||||
</button>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
:model-value="present"
|
||||
:disabled="disabled"
|
||||
class="opt"
|
||||
@update:modelValue="$emit('update:modelValue', !present ? fallback : undefined)"
|
||||
@update:model-value="$emit('update:modelValue', !present ? fallback : undefined)"
|
||||
/>
|
||||
<input
|
||||
:id="name"
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
<pinch-zoom
|
||||
class="pinch-zoom-parent"
|
||||
v-bind="$attrs"
|
||||
v-on="$listeners"
|
||||
>
|
||||
<slot />
|
||||
</pinch-zoom>
|
||||
|
|
|
@ -9,11 +9,12 @@ import StatusContent from '../status_content/status_content.vue'
|
|||
import fileTypeService from '../../services/file_type/file_type.service.js'
|
||||
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
|
||||
import { reject, map, uniqBy, debounce } from 'lodash'
|
||||
import { usePostLanguageOptions } from 'src/lib/post_language'
|
||||
import suggestor from '../emoji_input/suggestor.js'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import Checkbox from '../checkbox/checkbox.vue'
|
||||
import Select from '../select/select.vue'
|
||||
import iso6391 from 'iso-639-1'
|
||||
|
||||
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
import {
|
||||
|
@ -62,6 +63,13 @@ const deleteDraft = (draftKey) => {
|
|||
localStorage.setItem('drafts', JSON.stringify(draftData));
|
||||
}
|
||||
|
||||
const interfaceToISOLanguage = (ilang) => {
|
||||
const sep = ilang.indexOf("_");
|
||||
return sep < 0 ?
|
||||
ilang :
|
||||
ilang.substr(0, sep);
|
||||
}
|
||||
|
||||
const PostStatusForm = {
|
||||
props: [
|
||||
'statusId',
|
||||
|
@ -129,6 +137,13 @@ const PostStatusForm = {
|
|||
this.$refs.textarea.focus()
|
||||
}
|
||||
},
|
||||
setup() {
|
||||
const {postLanguageOptions} = usePostLanguageOptions()
|
||||
|
||||
return {
|
||||
postLanguageOptions,
|
||||
}
|
||||
},
|
||||
data () {
|
||||
const preset = this.$route.query.message
|
||||
let statusText = preset || ''
|
||||
|
@ -138,7 +153,8 @@ const PostStatusForm = {
|
|||
statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
|
||||
}
|
||||
|
||||
const { postContentType: contentType, sensitiveByDefault, sensitiveIfSubject, interfaceLanguage, alwaysShowSubjectInput } = this.$store.getters.mergedConfig
|
||||
const { postContentType: contentType, postLanguage: defaultPostLanguage, sensitiveByDefault, sensitiveIfSubject, interfaceLanguage, alwaysShowSubjectInput } = this.$store.getters.mergedConfig
|
||||
const postLanguage = defaultPostLanguage || interfaceToISOLanguage(interfaceLanguage)
|
||||
|
||||
let statusParams = {
|
||||
spoilerText: this.subject || '',
|
||||
|
@ -149,7 +165,7 @@ const PostStatusForm = {
|
|||
poll: {},
|
||||
mediaDescriptions: {},
|
||||
visibility: this.suggestedVisibility(),
|
||||
language: interfaceLanguage,
|
||||
language: postLanguage,
|
||||
contentType
|
||||
}
|
||||
|
||||
|
@ -164,7 +180,7 @@ const PostStatusForm = {
|
|||
poll: this.statusPoll || {},
|
||||
mediaDescriptions: this.statusMediaDescriptions || {},
|
||||
visibility: this.statusScope || this.suggestedVisibility(),
|
||||
language: this.statusLanguage || interfaceLanguage,
|
||||
language: this.statusLanguage || postLanguage,
|
||||
contentType: statusContentType
|
||||
}
|
||||
}
|
||||
|
@ -309,13 +325,11 @@ const PostStatusForm = {
|
|||
...mapState({
|
||||
mobileLayout: state => state.interface.mobileLayout
|
||||
}),
|
||||
isoLanguages () {
|
||||
return iso6391.getAllCodes();
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'newStatus': {
|
||||
deep: true,
|
||||
flush: 'sync',
|
||||
handler () {
|
||||
this.statusChanged()
|
||||
}
|
||||
|
|
|
@ -118,8 +118,8 @@
|
|||
/>
|
||||
</div>
|
||||
<EmojiInput
|
||||
ref="subject-emoji-input"
|
||||
v-if="subjectVisible"
|
||||
ref="subject-emoji-input"
|
||||
v-model="newStatus.spoilerText"
|
||||
enable-emoji-picker
|
||||
hide-emoji-button
|
||||
|
@ -170,7 +170,7 @@
|
|||
cols="1"
|
||||
:disabled="posting && !optimisticPosting"
|
||||
class="form-post-body"
|
||||
:class="{ 'scrollable-form': !!maxHeight }"
|
||||
:class="{ 'scrollable-form': !!maxHeight, '-has-subject': subjectVisible }"
|
||||
@keydown.exact.enter="submitOnEnter && postStatus($event, newStatus)"
|
||||
@keydown.meta.enter="postStatus($event, newStatus)"
|
||||
@keydown.ctrl.enter="!submitOnEnter && postStatus($event, newStatus)"
|
||||
|
@ -190,6 +190,7 @@
|
|||
<div
|
||||
v-if="!disableScopeSelector"
|
||||
class="visibility-tray"
|
||||
:class="{ 'visibility-tray-edit': isEdit }"
|
||||
>
|
||||
<scope-selector
|
||||
v-if="!disableVisibilitySelector"
|
||||
|
@ -200,7 +201,9 @@
|
|||
/>
|
||||
|
||||
<div
|
||||
class="language-selector"
|
||||
class="format-selector-container">
|
||||
<div
|
||||
class="format-selector"
|
||||
>
|
||||
<Select
|
||||
id="post-language"
|
||||
|
@ -208,17 +211,17 @@
|
|||
class="form-control"
|
||||
>
|
||||
<option
|
||||
v-for="language in isoLanguages"
|
||||
:key="language"
|
||||
:value="language"
|
||||
v-for="language in postLanguageOptions"
|
||||
:key="language.key"
|
||||
:value="language.value"
|
||||
>
|
||||
{{ language }}
|
||||
{{ language.label }}
|
||||
</option>
|
||||
</Select>
|
||||
</div>
|
||||
<div
|
||||
v-if="postFormats.length > 1"
|
||||
class="text-format"
|
||||
class="text-format format-selector"
|
||||
>
|
||||
<Select
|
||||
id="post-content-type"
|
||||
|
@ -236,7 +239,7 @@
|
|||
</div>
|
||||
<div
|
||||
v-if="postFormats.length === 1 && postFormats[0] !== 'text/plain'"
|
||||
class="text-format"
|
||||
class="text-format format-selector"
|
||||
>
|
||||
<span class="only-format">
|
||||
{{ $t(`post_status.content_type["${postFormats[0]}"]`) }}
|
||||
|
@ -244,6 +247,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<poll-form
|
||||
v-if="pollsAvailable"
|
||||
ref="pollForm"
|
||||
|
@ -460,6 +464,10 @@
|
|||
align-items: baseline;
|
||||
}
|
||||
|
||||
.visibility-tray-edit {
|
||||
justify-content: right;
|
||||
}
|
||||
|
||||
.visibility-notice.edit-warning {
|
||||
> :first-child {
|
||||
margin-top: 0;
|
||||
|
@ -470,6 +478,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
.format-selector-container {
|
||||
.format-selector {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.media-upload-icon, .poll-icon, .emoji-icon, .spoiler-icon {
|
||||
font-size: 1.85em;
|
||||
line-height: 1.1;
|
||||
|
@ -570,6 +584,11 @@
|
|||
line-height: 1.85;
|
||||
}
|
||||
|
||||
.form-post-subject {
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.form-post-body {
|
||||
// TODO: make a resizable textarea component?
|
||||
box-sizing: content-box; // needed for easier computation of dynamic size
|
||||
|
@ -582,6 +601,11 @@
|
|||
min-height: calc(var(--post-line-height) * 1em);
|
||||
resize: none;
|
||||
|
||||
&.-has-subject {
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
&.scrollable-form {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
v-if="isLoggedIn && !resettingForm"
|
||||
:is-open="modalActivated"
|
||||
class="post-form-modal-view"
|
||||
@backdropClicked="closeModal"
|
||||
@backdrop-clicked="closeModal"
|
||||
>
|
||||
<div class="post-form-modal-panel panel">
|
||||
<div class="panel-heading">
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
remove-padding
|
||||
@show="focusInput"
|
||||
>
|
||||
<template v-slot:content="{close}">
|
||||
<template #content="{close}">
|
||||
<EmojiPicker
|
||||
:enable-sticker-picker="false"
|
||||
@emoji="addReaction($event, close)"
|
||||
/>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button
|
||||
class="button-unstyled popover-trigger"
|
||||
:title="$t('tool_tip.add_reaction')"
|
||||
|
|
|
@ -2,7 +2,7 @@ export default {
|
|||
props: [ 'user' ],
|
||||
computed: {
|
||||
subscribeUrl () {
|
||||
// eslint-disable-next-line no-undef
|
||||
|
||||
const serverUrl = new URL(this.user.statusnet_profile_url)
|
||||
return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
:items="items"
|
||||
:get-key="getKey"
|
||||
>
|
||||
<template v-slot:item="{item}">
|
||||
<template #item="{item}">
|
||||
<div
|
||||
class="selectable-list-item-inner"
|
||||
:class="{ 'selectable-list-item-selected-inner': isSelected(item) }"
|
||||
|
@ -41,7 +41,7 @@
|
|||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:empty>
|
||||
<template #empty>
|
||||
<slot name="empty" />
|
||||
</template>
|
||||
</List>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<Checkbox
|
||||
:model-value="state"
|
||||
:disabled="disabled"
|
||||
@update:modelValue="update"
|
||||
@update:model-value="update"
|
||||
>
|
||||
<span
|
||||
v-if="!!$slots.default"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<Select
|
||||
:model-value="state"
|
||||
:disabled="disabled"
|
||||
@update:modelValue="update"
|
||||
@update:model-value="update"
|
||||
>
|
||||
<option
|
||||
v-for="option in options"
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
<Popover
|
||||
trigger="hover"
|
||||
>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
|
||||
<FAIcon
|
||||
icon="wrench"
|
||||
:aria-label="$t('settings.setting_changed')"
|
||||
/>
|
||||
</template>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="modified-tooltip">
|
||||
{{ $t('settings.setting_changed') }}
|
||||
</div>
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
<Popover
|
||||
trigger="hover"
|
||||
>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
|
||||
<FAIcon
|
||||
icon="server"
|
||||
:aria-label="$t('settings.setting_server_side')"
|
||||
/>
|
||||
</template>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="serverside-tooltip">
|
||||
{{ $t('settings.setting_server_side') }}
|
||||
</div>
|
||||
|
|
|
@ -69,7 +69,7 @@ const SettingsModal = {
|
|||
this.$store.dispatch('closeSettingsModal')
|
||||
},
|
||||
logout () {
|
||||
this.$router.replace('/main/public')
|
||||
this.$router.replace(this.$store.state.instance.redirectRootNoLogin || '/main/all')
|
||||
this.$store.dispatch('closeSettingsModal')
|
||||
this.$store.dispatch('logout')
|
||||
},
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
<Checkbox
|
||||
:model-value="!!expertLevel"
|
||||
class="expertMode"
|
||||
@update:modelValue="expertLevel = Number($event)"
|
||||
@update:model-value="expertLevel = Number($event)"
|
||||
>
|
||||
{{ $t("settings.expert_mode") }}
|
||||
</Checkbox>
|
||||
|
|
|
@ -72,7 +72,7 @@ const DataImportExportTab = {
|
|||
// check is it's a local user
|
||||
if (user && user.is_local) {
|
||||
// append the instance address
|
||||
// eslint-disable-next-line no-undef
|
||||
|
||||
return user.screen_name + '@' + location.hostname
|
||||
}
|
||||
return user.screen_name
|
||||
|
|
|
@ -4,6 +4,7 @@ import ScopeSelector from 'src/components/scope_selector/scope_selector.vue'
|
|||
import IntegerSetting from '../helpers/integer_setting.vue'
|
||||
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
|
||||
|
||||
import { usePostLanguageOptions } from 'src/lib/post_language'
|
||||
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
||||
import ServerSideIndicator from '../helpers/server_side_indicator.vue'
|
||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||
|
@ -17,6 +18,11 @@ library.add(
|
|||
)
|
||||
|
||||
const GeneralTab = {
|
||||
setup() {
|
||||
const {postLanguageOptions} = usePostLanguageOptions()
|
||||
|
||||
return {postLanguageOptions}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
subjectLineOptions: ['email', 'noop', 'masto'].map(mode => ({
|
||||
|
@ -118,6 +124,12 @@ const GeneralTab = {
|
|||
this.$store.dispatch('setOption', { name: 'translationLanguage', value: val })
|
||||
}
|
||||
},
|
||||
postLanguage: {
|
||||
get: function () { return this.$store.getters.mergedConfig.postLanguage },
|
||||
set: function (val) {
|
||||
this.$store.dispatch('setOption', { name: 'postLanguage', value: val })
|
||||
}
|
||||
},
|
||||
...SharedComputedObject()
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -44,7 +44,6 @@
|
|||
<template
|
||||
v-if="profilesExpanded"
|
||||
>
|
||||
|
||||
<div
|
||||
v-for="profile in settingsProfiles"
|
||||
:key="profile.id"
|
||||
|
@ -73,15 +72,24 @@
|
|||
</button>
|
||||
</template>
|
||||
</div>
|
||||
<button class="btn button-default" @click="refreshProfiles()">
|
||||
<button
|
||||
class="btn button-default"
|
||||
@click="refreshProfiles()"
|
||||
>
|
||||
{{ $t('settings.settings_profiles_refresh') }}
|
||||
<FAIcon icon="sync" @click="refreshProfiles()" />
|
||||
<FAIcon
|
||||
icon="sync"
|
||||
@click="refreshProfiles()"
|
||||
/>
|
||||
</button>
|
||||
<h3>{{ $t('settings.settings_profile_creation') }}</h3>
|
||||
<label for="settings-profile-new-name">
|
||||
{{ $t('settings.settings_profile_creation_new_name_label') }}
|
||||
</label>
|
||||
<input v-model="newProfileName" id="settings-profile-new-name">
|
||||
<input
|
||||
id="settings-profile-new-name"
|
||||
v-model="newProfileName"
|
||||
>
|
||||
<button
|
||||
class="btn button-default"
|
||||
@click="createSettingsProfile"
|
||||
|
@ -585,6 +593,15 @@
|
|||
{{ $t('settings.post_status_content_type') }}
|
||||
</ChoiceSetting>
|
||||
</li>
|
||||
<li>
|
||||
<ChoiceSetting
|
||||
id="postLanguage"
|
||||
path="postLanguage"
|
||||
:options="postLanguageOptions"
|
||||
>
|
||||
{{ $t('settings.post_language') }}
|
||||
</ChoiceSetting>
|
||||
</li>
|
||||
<li>
|
||||
<BooleanSetting
|
||||
path="alwaysShowNewPostButton"
|
||||
|
|
|
@ -85,7 +85,7 @@ const MutesAndBlocks = {
|
|||
// check is it's a local user
|
||||
if (user && user.is_local) {
|
||||
// append the instance address
|
||||
// eslint-disable-next-line no-undef
|
||||
|
||||
return user.screen_name + '@' + location.hostname
|
||||
}
|
||||
return user.screen_name
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
:query="queryUserIds"
|
||||
:placeholder="$t('settings.search_user_to_block')"
|
||||
>
|
||||
<template v-slot="row">
|
||||
<template #default="row">
|
||||
<BlockCard
|
||||
:user-id="row.item"
|
||||
/>
|
||||
|
@ -21,7 +21,7 @@
|
|||
:refresh="true"
|
||||
:get-key="i => i"
|
||||
>
|
||||
<template v-slot:header="{selected}">
|
||||
<template #header="{selected}">
|
||||
<div class="bulk-actions">
|
||||
<ProgressButton
|
||||
v-if="selected.length > 0"
|
||||
|
@ -29,7 +29,7 @@
|
|||
:click="() => blockUsers(selected)"
|
||||
>
|
||||
{{ $t('user_card.block') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('user_card.block_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
|
@ -39,16 +39,16 @@
|
|||
:click="() => unblockUsers(selected)"
|
||||
>
|
||||
{{ $t('user_card.unblock') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('user_card.unblock_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:item="{item}">
|
||||
<template #item="{item}">
|
||||
<BlockCard :user-id="item" />
|
||||
</template>
|
||||
<template v-slot:empty>
|
||||
<template #empty>
|
||||
{{ $t('settings.no_blocks') }}
|
||||
</template>
|
||||
</BlockList>
|
||||
|
@ -63,7 +63,7 @@
|
|||
:query="queryUserIds"
|
||||
:placeholder="$t('settings.search_user_to_mute')"
|
||||
>
|
||||
<template v-slot="row">
|
||||
<template #default="row">
|
||||
<MuteCard
|
||||
:user-id="row.item"
|
||||
/>
|
||||
|
@ -74,7 +74,7 @@
|
|||
:refresh="true"
|
||||
:get-key="i => i"
|
||||
>
|
||||
<template v-slot:header="{selected}">
|
||||
<template #header="{selected}">
|
||||
<div class="bulk-actions">
|
||||
<ProgressButton
|
||||
v-if="selected.length > 0"
|
||||
|
@ -82,7 +82,7 @@
|
|||
:click="() => muteUsers(selected)"
|
||||
>
|
||||
{{ $t('user_card.mute') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('user_card.mute_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
|
@ -92,16 +92,16 @@
|
|||
:click="() => unmuteUsers(selected)"
|
||||
>
|
||||
{{ $t('user_card.unmute') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('user_card.unmute_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:item="{item}">
|
||||
<template #item="{item}">
|
||||
<MuteCard :user-id="item" />
|
||||
</template>
|
||||
<template v-slot:empty>
|
||||
<template #empty>
|
||||
{{ $t('settings.no_mutes') }}
|
||||
</template>
|
||||
</MuteList>
|
||||
|
@ -114,7 +114,7 @@
|
|||
:query="queryKnownDomains"
|
||||
:placeholder="$t('settings.type_domains_to_mute')"
|
||||
>
|
||||
<template v-slot="row">
|
||||
<template #default="row">
|
||||
<DomainMuteCard
|
||||
:domain="row.item"
|
||||
/>
|
||||
|
@ -125,7 +125,7 @@
|
|||
:refresh="true"
|
||||
:get-key="i => i"
|
||||
>
|
||||
<template v-slot:header="{selected}">
|
||||
<template #header="{selected}">
|
||||
<div class="bulk-actions">
|
||||
<ProgressButton
|
||||
v-if="selected.length > 0"
|
||||
|
@ -133,16 +133,16 @@
|
|||
:click="() => unmuteDomains(selected)"
|
||||
>
|
||||
{{ $t('domain_mute_card.unmute') }}
|
||||
<template v-slot:progress>
|
||||
<template #progress>
|
||||
{{ $t('domain_mute_card.unmute_progress') }}
|
||||
</template>
|
||||
</ProgressButton>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:item="{item}">
|
||||
<template #item="{item}">
|
||||
<DomainMuteCard :domain="item" />
|
||||
</template>
|
||||
<template v-slot:empty>
|
||||
<template #empty>
|
||||
{{ $t('settings.no_mutes') }}
|
||||
</template>
|
||||
</DomainMuteList>
|
||||
|
|
|
@ -130,7 +130,7 @@ const ProfileTab = {
|
|||
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,
|
||||
|
@ -138,7 +138,7 @@ const ProfileTab = {
|
|||
status_ttl_days: this.expirePosts ? this.newPostTTLDays : -1,
|
||||
permit_followback: this.permit_followback,
|
||||
accepts_direct_messages_from: this.userAcceptsDirectMessagesFrom
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
}
|
||||
|
||||
if (this.emailLanguage) {
|
||||
|
@ -187,7 +187,7 @@ const ProfileTab = {
|
|||
})
|
||||
return
|
||||
}
|
||||
// eslint-disable-next-line no-undef
|
||||
|
||||
const reader = new FileReader()
|
||||
reader.onload = ({ target }) => {
|
||||
const img = target.result
|
||||
|
|
|
@ -110,11 +110,9 @@
|
|||
max="730"
|
||||
class="expire-posts-days"
|
||||
:placeholder="$t('settings.expire_posts_input_placeholder')"
|
||||
/>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
>
|
||||
</p>
|
||||
<p />
|
||||
<p>
|
||||
<interface-language-switcher
|
||||
:prompt-text="$t('settings.email_language')"
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
import { extractCommit } from 'src/services/version/version.service'
|
||||
|
||||
const pleromaFeCommitUrl = 'https://akkoma.dev/AkkomaGang/pleroma-fe/commit/'
|
||||
const pleromaBeCommitUrl = 'https://akkoma.dev/AkkomaGang/akkoma/commit/'
|
||||
function joinURL(base, subpath) {
|
||||
return URL.parse(subpath, base)?.href || "invalid base URL"
|
||||
}
|
||||
|
||||
const VersionTab = {
|
||||
data () {
|
||||
const instance = this.$store.state.instance
|
||||
return {
|
||||
backendCommitUrl: instance.backendCommitUrl,
|
||||
backendVersion: instance.backendVersion,
|
||||
frontendCommitUrl: instance.frontendCommitUrl,
|
||||
frontendVersion: instance.frontendVersion
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
frontendVersionLink () {
|
||||
return pleromaFeCommitUrl + this.frontendVersion
|
||||
return joinURL(this.frontendCommitUrl, this.frontendVersion)
|
||||
},
|
||||
backendVersionLink () {
|
||||
return pleromaBeCommitUrl + extractCommit(this.backendVersion)
|
||||
return joinURL(this.backendCommitUrl, extractCommit(this.backendVersion))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -266,6 +266,16 @@
|
|||
color: $fallback--cGreen;
|
||||
color: var(--cGreen, $fallback--cGreen);
|
||||
}
|
||||
|
||||
.right-side {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.3em;
|
||||
}
|
||||
|
||||
.repeat-tooltip {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.repeater-avatar {
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
:user="statusoid.user"
|
||||
/>
|
||||
<div class="right-side faint">
|
||||
<span
|
||||
<div
|
||||
class="status-username repeater-name"
|
||||
:title="retweeter"
|
||||
>
|
||||
|
@ -100,8 +100,12 @@
|
|||
v-else
|
||||
:to="retweeterProfileLink"
|
||||
>{{ retweeter }}</router-link>
|
||||
</span>
|
||||
</div>
|
||||
{{ ' ' }}
|
||||
|
||||
<div
|
||||
class="repeat-tooltip"
|
||||
>
|
||||
<FAIcon
|
||||
icon="retweet"
|
||||
class="repeat-icon"
|
||||
|
@ -110,6 +114,7 @@
|
|||
{{ $t('timeline.repeated') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="!deleted"
|
||||
|
@ -368,7 +373,7 @@
|
|||
:controlled-toggle-showing-long-subject="controlledToggleShowingLongSubject"
|
||||
@mediaplay="addMediaPlaying($event)"
|
||||
@mediapause="removeMediaPlaying($event)"
|
||||
@parseReady="setHeadTailLinks"
|
||||
@parse-ready="setHeadTailLinks"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
@ -476,8 +481,8 @@
|
|||
/>
|
||||
<extra-buttons
|
||||
:status="status"
|
||||
@onError="showError"
|
||||
@onSuccess="clearError"
|
||||
@on-error="showError"
|
||||
@on-success="clearError"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -41,7 +41,8 @@ const StatusContent = {
|
|||
postLength: this.status.text.length,
|
||||
parseReadyDone: false,
|
||||
renderMisskeyMarkdown,
|
||||
translateFrom: null
|
||||
translateFrom: null,
|
||||
translating: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -135,7 +136,10 @@ const StatusContent = {
|
|||
},
|
||||
translateStatus () {
|
||||
const translateTo = this.$store.getters.mergedConfig.translationLanguage || this.$store.state.instance.interfaceLanguage
|
||||
this.$store.dispatch('translateStatus', { id: this.status.id, language: translateTo, from: this.translateFrom })
|
||||
this.translating = true
|
||||
this.$store.dispatch(
|
||||
'translateStatus', { id: this.status.id, language: translateTo, from: this.translateFrom }
|
||||
).finally(() => { this.translating = false })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
:mfm="renderMisskeyMarkdown && (status.media_type === 'text/x.misskeymarkdown')"
|
||||
:greentext="mergedConfig.greentext"
|
||||
:attentions="status.attentions"
|
||||
@parseReady="onParseReady"
|
||||
@parse-ready="onParseReady"
|
||||
/>
|
||||
<div
|
||||
v-if="status.translation"
|
||||
|
@ -70,7 +70,7 @@
|
|||
:mfm="renderMisskeyMarkdown && (status.media_type === 'text/x.misskeymarkdown')"
|
||||
:greentext="mergedConfig.greentext"
|
||||
:attentions="status.attentions"
|
||||
@parseReady="onParseReady"
|
||||
@parse-ready="onParseReady"
|
||||
/>
|
||||
<div>
|
||||
<label class="label">{{ $t('status.override_translation_source_language') }}</label>
|
||||
|
@ -89,7 +89,11 @@
|
|||
</option>
|
||||
</Select>
|
||||
{{ ' ' }}
|
||||
<button @click="translateStatus" class="btn button-default">
|
||||
<button
|
||||
class="btn button-default"
|
||||
:disabled="translating"
|
||||
@click="translateStatus"
|
||||
>
|
||||
{{ $t('status.translate') }}
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
:toggle-showing-tall="toggleShowingTall"
|
||||
:toggle-expanding-subject="toggleExpandingSubject"
|
||||
:toggle-showing-long-subject="toggleShowingLongSubject"
|
||||
@parseReady="$emit('parseReady', $event)"
|
||||
@parse-ready="$emit('parseReady', $event)"
|
||||
>
|
||||
<div v-if="status.poll && status.poll.options && !compact">
|
||||
<Poll
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<Modal
|
||||
v-if="modalActivated"
|
||||
class="status-history-modal-view"
|
||||
@backdropClicked="closeModal"
|
||||
@backdrop-clicked="closeModal"
|
||||
>
|
||||
<div class="status-history-modal-panel panel">
|
||||
<div class="panel-heading">
|
||||
|
@ -17,7 +17,7 @@
|
|||
v-for="status in history"
|
||||
:key="status.id"
|
||||
:statusoid="status"
|
||||
:isPreview="true"
|
||||
:is-preview="true"
|
||||
class="conversation-status status-fadein panel-body"
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
:bound-to="{ x: 'container' }"
|
||||
@show="enter"
|
||||
>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<slot />
|
||||
</template>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<Status
|
||||
v-if="status"
|
||||
:is-preview="true"
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
>
|
||||
<div
|
||||
v-if="animated && imageTypeLabel"
|
||||
class="image-type-label">
|
||||
class="image-type-label"
|
||||
>
|
||||
{{ imageTypeLabel }}
|
||||
</div>
|
||||
<canvas
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
:dive="dive ? () => dive(status.id) : undefined"
|
||||
|
||||
@goto="setHighlight"
|
||||
@toggleExpanded="toggleExpanded"
|
||||
@toggle-expanded="toggleExpanded"
|
||||
/>
|
||||
<div
|
||||
v-if="currentReplies.length && threadShowing"
|
||||
|
|
|
@ -28,4 +28,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
.timeline {
|
||||
min-height: 1em;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
class="TimelineQuickSettings"
|
||||
:bound-to="{ x: 'container' }"
|
||||
>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="dropdown-menu">
|
||||
<div v-if="loggedIn">
|
||||
<button
|
||||
|
@ -80,7 +80,7 @@
|
|||
</button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button class="button-unstyled">
|
||||
<FAIcon icon="filter" />
|
||||
</button>
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
@show="openMenu"
|
||||
@close="() => isOpen = false"
|
||||
>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="timeline-menu-popover popover-default">
|
||||
<TimelineMenuContent />
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<button class="button-unstyled title timeline-menu-title">
|
||||
<span class="timeline-title">{{ timelineName() }}</span>
|
||||
<span>
|
||||
|
|
|
@ -62,7 +62,6 @@
|
|||
:title="$t('nav.twkn_timeline_description')"
|
||||
:aria-label="$t('nav.twkn_timeline_description')"
|
||||
>{{ $t("nav.twkn") }}</span>
|
||||
|
||||
</router-link>
|
||||
</li>
|
||||
<li v-if="currentUser">
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
/>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="publicTimelineVisible"
|
||||
:to="{ name: 'public-timeline' }"
|
||||
class="nav-icon"
|
||||
v-if="publicTimelineVisible"
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
|
@ -40,9 +40,9 @@
|
|||
/>
|
||||
</router-link>
|
||||
<router-link
|
||||
v-if="federatedTimelineVisible"
|
||||
:to="{ name: 'public-external-timeline' }"
|
||||
class="nav-icon"
|
||||
v-if="federatedTimelineVisible"
|
||||
>
|
||||
<FAIcon
|
||||
fixed-width
|
||||
|
|
|
@ -66,7 +66,7 @@ export default {
|
|||
return this.user.id !== this.$store.state.users.currentUser.id
|
||||
},
|
||||
subscribeUrl () {
|
||||
// eslint-disable-next-line no-undef
|
||||
|
||||
const serverUrl = new URL(this.user.statusnet_profile_url)
|
||||
return `${serverUrl.protocol}//${serverUrl.host}/main/ostatus`
|
||||
},
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
placement="top"
|
||||
:offset="{ y: 5 }"
|
||||
>
|
||||
<template v-slot:trigger>
|
||||
<template #trigger>
|
||||
<slot />
|
||||
</template>
|
||||
<template v-slot:content>
|
||||
<template #content>
|
||||
<div class="user-list-popover">
|
||||
<template v-if="users.length">
|
||||
<div
|
||||
|
|
|
@ -121,8 +121,8 @@
|
|||
</FriendList>
|
||||
</div>
|
||||
<div
|
||||
key="tags"
|
||||
v-if="isUs"
|
||||
key="tags"
|
||||
:label="$t('user_card.followed_tags')"
|
||||
>
|
||||
<FollowedTagList
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<Modal
|
||||
v-if="isOpen"
|
||||
@backdropClicked="closeModal"
|
||||
@backdrop-clicked="closeModal"
|
||||
>
|
||||
<div class="user-reporting-panel panel">
|
||||
<div class="panel-heading">
|
||||
|
@ -45,7 +45,7 @@
|
|||
</div>
|
||||
<div class="user-reporting-panel-right">
|
||||
<List :items="statuses">
|
||||
<template v-slot:item="{item}">
|
||||
<template #item="{item}">
|
||||
<div class="status-fadein user-reporting-panel-sitem">
|
||||
<Status
|
||||
:in-conversation="false"
|
||||
|
|
|
@ -84,6 +84,7 @@
|
|||
"keep_open": "Mantindre el selector obert",
|
||||
"load_all": "Carregant tots els {emojiAmount} emoji",
|
||||
"load_all_hint": "Carregat el primer {saneAmount} emoji, carregar tots els emoji pot causar problemes de rendiment.",
|
||||
"recent": "Recents",
|
||||
"search_emoji": "Buscar un emoji",
|
||||
"stickers": "Adhesius",
|
||||
"unicode": "Emojis unicode"
|
||||
|
@ -254,6 +255,10 @@
|
|||
"hint": "Entra per a participar en la conversa",
|
||||
"login": "Inicia sessió",
|
||||
"logout": "Tanca la sessió",
|
||||
"logout_confirm": "Segur que vols tancar la sessió?",
|
||||
"logout_confirm_accept_button": "Surt",
|
||||
"logout_confirm_cancel_button": "Canceŀla",
|
||||
"logout_confirm_title": "Tanca la sessió",
|
||||
"password": "Contrasenya",
|
||||
"placeholder": "el meu nom d'usuari",
|
||||
"recovery_code": "Codi de recuperació",
|
||||
|
@ -266,6 +271,32 @@
|
|||
"next": "Següent",
|
||||
"previous": "Anterior"
|
||||
},
|
||||
"moderation": {
|
||||
"moderation": "Moderació",
|
||||
"reports": {
|
||||
"add_note": "Afegeix una nota",
|
||||
"close": "Tanca",
|
||||
"delete_note": "Esborra la nota",
|
||||
"delete_note_accept": "Sí, esborra-la",
|
||||
"delete_note_cancel": "No, conserva-la",
|
||||
"delete_note_confirm": "Segur que vols esborrar aquesta nota?",
|
||||
"delete_note_title": "Cal confirmació",
|
||||
"no_content": "Sense descripció",
|
||||
"no_reports": "No hi ha informes per mostrar",
|
||||
"note_placeholder": "Deixa una nota",
|
||||
"notes": "{ count } nota | { count } notes",
|
||||
"reopen": "Reobre",
|
||||
"report": "Denuncia-ho",
|
||||
"reports": "Denúncies",
|
||||
"resolve": "Resol",
|
||||
"show_closed": "Mostra les tancades",
|
||||
"statuses": "{ count } post| { count } posts",
|
||||
"tag_policy_notice": "Activa la restricció de publicacions segons la TagPolicy MRF",
|
||||
"tags": "Estableix restriccions a les publicacions"
|
||||
},
|
||||
"statuses": "Publicacions",
|
||||
"users": "Usuàries"
|
||||
},
|
||||
"nav": {
|
||||
"about": "Quant a",
|
||||
"administration": "Administració",
|
||||
|
@ -282,6 +313,7 @@
|
|||
"interactions": "Interaccions",
|
||||
"lists": "Llistes",
|
||||
"mentions": "Mencions",
|
||||
"moderation": "Moderació",
|
||||
"preferences": "Preferències",
|
||||
"public_timeline_description": "Apunts públics des d'aquesta instància",
|
||||
"public_tl": "Línia de temps Pública",
|
||||
|
@ -375,9 +407,12 @@
|
|||
"private": "Aquest apunt serà visible només per els teus seguidors",
|
||||
"public": "Aquest apunt serà visible per a tothom",
|
||||
"unlisted": "Aquest apunt no es veurà ni a la Línia de temps Pública ni a Tota la Xarxa Coneguda"
|
||||
}
|
||||
},
|
||||
"toggle_content_warning": "Des/activa l'avís de contingut"
|
||||
},
|
||||
"registration": {
|
||||
"awaiting_email_confirmation": "S'ha registrat el teu compte i s'ha enviat un correu a la teva adreça. Consulta el correu per completar el registre.",
|
||||
"awaiting_email_confirmation_title": "Pendent de confirmar l'adreça de correu",
|
||||
"bio": "Bio",
|
||||
"bio_placeholder": "p.e.\nHola! Benvingut a la meva bio.\nM'encanta veure anime i jugar a jocs. Espero que podrem ser amics!",
|
||||
"captcha": "CAPTCHA",
|
||||
|
@ -391,6 +426,8 @@
|
|||
"reason_placeholder": "Aquesta instància aprova els registres manualment.\nExplica a l'administració per què vols registrar-te.",
|
||||
"register": "Registre",
|
||||
"registration": "Registre",
|
||||
"request_sent": "La teva soŀlicitud de registre s'ha enviat. Rebràs un correu quan sigui aprovada.",
|
||||
"request_sent_title": "Soŀlicitud de registre",
|
||||
"token": "Codi d'invitació",
|
||||
"username_placeholder": "p. ex. akko",
|
||||
"validations": {
|
||||
|
@ -500,6 +537,8 @@
|
|||
"enable_web_push_notifications": "Habilitar notificacions del navegador",
|
||||
"enter_current_password_to_confirm": "Posa la teva contrasenya actual per a confirmar la teva identitat",
|
||||
"expert_mode": "Mostra avançat",
|
||||
"expire_posts_enabled": "Esborra les publicacions després d'un cert nombre de dies",
|
||||
"expire_posts_input_placeholder": "Nombre de dies",
|
||||
"export_theme": "Desa el tema",
|
||||
"file_export_import": {
|
||||
"backup_restore": "Còpia de seguretat de la configuració",
|
||||
|
@ -641,6 +680,7 @@
|
|||
"pad_emoji": "Acompanya els emojis amb espais al afegir-los des del selector",
|
||||
"panelRadius": "Panells",
|
||||
"pause_on_unfocused": "Pausa quan la pestanya perdi el focus",
|
||||
"permit_followback_description": "Aprova automàticament les soŀlicituds de seguiment que vinguin d'usuàries que ja segueixes",
|
||||
"play_videos_in_modal": "Reproduir vídeos en un marc emergent",
|
||||
"post_look_feel": "Aspecte i Sensació dels apunts",
|
||||
"post_status_content_type": "Tipus de contingut d'apunt predeterminat",
|
||||
|
@ -709,6 +749,7 @@
|
|||
"show_admin_badge": "Mostra l'insígnia \"Administrador\" en el meu perfil",
|
||||
"show_moderator_badge": "Mostra l'insígnia \"Moderador\" en el meu perfil",
|
||||
"show_nav_shortcuts": "Mostra els accessos directes addicionals en el panell superior",
|
||||
"show_page_backgrounds": "Mostra fons de pantalla específics de pàgines, com en les pàgines de perfil d'usuari",
|
||||
"show_panel_nav_shortcuts": "Mostra els accessos directes de navegació de la línia de temps en el panell superior",
|
||||
"show_scrollbars": "Mostra les barres de desplaçament de la columna lateral",
|
||||
"show_wider_shortcuts": "Mostra més separats els accessos directes del panell superior",
|
||||
|
@ -884,8 +925,13 @@
|
|||
"upload_a_photo": "Pujar una foto",
|
||||
"useStreamingApi": "Rebre apunts i notificacions en temps real",
|
||||
"useStreamingApiWarning": "És genial emprar-lo. Si es trenca, refresca, suposo?",
|
||||
"use_blurhash": "Fes borroses les miniatures d'imatges NSFW",
|
||||
"use_contain_fit": "No retallar els adjunts en miniatures",
|
||||
"use_one_click_nsfw": "Obre els adjunts NSFW amb només un clic",
|
||||
"user_accepts_direct_messages_from": "Accepta missatges directes de",
|
||||
"user_accepts_direct_messages_from_everybody": "Qualsevol",
|
||||
"user_accepts_direct_messages_from_nobody": "Ningú",
|
||||
"user_accepts_direct_messages_from_people_i_follow": "Comptes que segueixo",
|
||||
"user_mutes": "Usuaris",
|
||||
"user_profile_default_tab": "Pestanya per defecte en el Perfil d'Usuari",
|
||||
"user_profiles": "Perfils d'usuari",
|
||||
|
@ -1008,6 +1054,7 @@
|
|||
"collapse": "Replega",
|
||||
"conversation": "Conversa",
|
||||
"error": "Error carregant la línia de temps: {0}",
|
||||
"follow_tag": "Segueix l'etiqueta",
|
||||
"load_older": "Carrega apunts anteriors",
|
||||
"no_more_statuses": "No hi ha més apunts",
|
||||
"no_retweet_hint": "L'apunt és només per a seguidors o és \"directe\" i no es pot repetir o citar",
|
||||
|
@ -1017,6 +1064,7 @@
|
|||
"show_new": "Mostra els nous",
|
||||
"socket_broke": "Connexió a temps real perduda: codi CloseEvent {0}",
|
||||
"socket_reconnected": "Connexió a temps real establerta",
|
||||
"unfollow_tag": "Deixa de seguir l'etiqueta",
|
||||
"up_to_date": "Actualitzat"
|
||||
},
|
||||
"toast": {
|
||||
|
@ -1081,6 +1129,7 @@
|
|||
"block_confirm_title": "Bloqueja l'usuari",
|
||||
"block_progress": "Bloquejant…",
|
||||
"blocked": "Bloquejat!",
|
||||
"blocks_you": "Et té bloquejadi!",
|
||||
"bot": "Bot",
|
||||
"deactivated": "Desactivat",
|
||||
"deny": "Denega",
|
||||
|
@ -1095,7 +1144,10 @@
|
|||
"follow_cancel": "Cancel·la la sol·licitud",
|
||||
"follow_progress": "Sol·licitant…",
|
||||
"follow_sent": "Petició enviada!",
|
||||
"follow_tag": "Segueix l'etiqueta",
|
||||
"follow_unfollow": "Deixa de seguir",
|
||||
"followed_tags": "Etiquetes que segueixes",
|
||||
"followed_users": "Usuaris que segueixes",
|
||||
"followees": "Seguint",
|
||||
"followers": "Seguidors",
|
||||
"following": "Seguint!",
|
||||
|
@ -1120,12 +1172,14 @@
|
|||
"mute_domain": "Bloqueja el domini",
|
||||
"mute_progress": "Silenciant…",
|
||||
"muted": "Silenciat",
|
||||
"not_following_any_hashtags": "No estàs seguint cap etiqueta",
|
||||
"note": "Nota privada",
|
||||
"per_day": "per dia",
|
||||
"remote_follow": "Seguiment remot",
|
||||
"remove_follower": "Esborra seguidor",
|
||||
"replies": "Amb respostes",
|
||||
"report": "Informa",
|
||||
"requested_by": "Et vol seguir",
|
||||
"show_repeats": "Mostra les repeticions",
|
||||
"statuses": "Apunts",
|
||||
"subscribe": "Subscriu-te",
|
||||
|
@ -1135,11 +1189,13 @@
|
|||
"unfollow_confirm_accept_button": "Sí, deixa'l de seguir",
|
||||
"unfollow_confirm_cancel_button": "No, no el deixis de seguir",
|
||||
"unfollow_confirm_title": "Deixa de seguir l'usuari",
|
||||
"unfollow_tag": "Deixa de seguir l'etiqueta",
|
||||
"unmute": "Deixa de silenciar",
|
||||
"unmute_progress": "Deixant de silenciar…",
|
||||
"unsubscribe": "Anul·la la subscripció"
|
||||
},
|
||||
"user_profile": {
|
||||
"field_validated": "Enllaç verificat",
|
||||
"profile_does_not_exist": "Disculpes, aquest perfil no existeix.",
|
||||
"profile_loading_error": "Disculpes, hi ha hagut un error carregant aquest perfil.",
|
||||
"timeline_title": "Línia de temps del usuari"
|
||||
|
|
|
@ -684,6 +684,7 @@
|
|||
"play_videos_in_modal": "Play videos in a popup frame",
|
||||
"post_look_feel": "Posts Look & Feel",
|
||||
"post_status_content_type": "Default post content type",
|
||||
"post_language": "Default post language",
|
||||
"posts": "Posts",
|
||||
"preload_images": "Preload images",
|
||||
"presets": "Presets",
|
||||
|
|
|
@ -303,7 +303,7 @@
|
|||
"announcements": "Anuncios",
|
||||
"back": "Volver",
|
||||
"bookmarks": "Marcadores",
|
||||
"bubble_timeline": "Linea temporal burbuja",
|
||||
"bubble_timeline": "Línea temporal burbuja",
|
||||
"bubble_timeline_description": "Publicaciones de instancias cercanas a la tuya, recomendadas por los/las administradores/as",
|
||||
"chats": "Chats",
|
||||
"dms": "Mensajes directos",
|
||||
|
|
363
src/i18n/it.json
363
src/i18n/it.json
|
@ -503,7 +503,13 @@
|
|||
"columns": "Colonne",
|
||||
"composing": "Composizione",
|
||||
"confirm_new_password": "Conferma la nuova password",
|
||||
"conversation_display": "Stile di visualizzazione delle conversazioni",
|
||||
"conversation_display_linear": "Stile lineare",
|
||||
"conversation_display_tree": "Stile ad albero",
|
||||
"conversation_other_replies_button": "Mostra il bottone \"altre risposte\"",
|
||||
"conversation_other_replies_button_below": "Sotto i post",
|
||||
"current_avatar": "La tua icona attuale",
|
||||
"current_mascot": "La tua mascotte attuale",
|
||||
"current_password": "La tua password attuale",
|
||||
"data_import_export_tab": "Importa o esporta dati",
|
||||
"default_vis": "Visibilità predefinita dei messaggi",
|
||||
|
@ -511,11 +517,15 @@
|
|||
"delete_account_description": "Elimina definitivamente i tuoi dati e disattiva il tuo profilo.",
|
||||
"delete_account_error": "C'è stato un problema durante l'eliminazione del tuo profilo. Se il problema persiste contatta l'amministratore della tua stanza.",
|
||||
"delete_account_instructions": "Digita la tua password nel campo sottostante per eliminare il tuo profilo.",
|
||||
"disable_sticky_headers": "Non fissare i titoli delle colonne in cima allo schermo",
|
||||
"discoverable": "Permetti la scoperta di questo profilo a servizi di ricerca ed altro",
|
||||
"domain_mutes": "Domini",
|
||||
"download_backup": "Scarica",
|
||||
"email_language": "Lingua delle email ricevute dal server",
|
||||
"emoji_reactions_on_timeline": "Mostra reazioni nelle sequenze",
|
||||
"enable_web_push_notifications": "Abilita notifiche web push",
|
||||
"enter_current_password_to_confirm": "Inserisci la tua password per identificarti",
|
||||
"expert_mode": "Mostra avanzate",
|
||||
"export_theme": "Salva impostazioni",
|
||||
"file_export_import": {
|
||||
"backup_restore": "Archiviazione impostazioni",
|
||||
|
@ -543,18 +553,23 @@
|
|||
"hide_all_muted_posts": "Nascondi messaggi silenziati",
|
||||
"hide_attachments_in_convo": "Nascondi gli allegati presenti nelle conversazioni",
|
||||
"hide_attachments_in_tl": "Nascondi gli allegati presenti nelle sequenze",
|
||||
"hide_bot_indication": "Nascondi indicatore bot nei post",
|
||||
"hide_favorites_description": "Non mostrare la lista dei miei preferiti (gli utenti verranno comunque notificati)",
|
||||
"hide_filtered_statuses": "Nascondi messaggi filtrati",
|
||||
"hide_followers_count_description": "Non mostrare quanti seguaci ho",
|
||||
"hide_followers_description": "Non mostrare i miei seguaci",
|
||||
"hide_follows_count_description": "Non mostrare quanti utenti seguo",
|
||||
"hide_follows_description": "Non mostrare chi seguo",
|
||||
"hide_isp": "Nascondi pannello della stanza",
|
||||
"hide_list_aliases_error_action": "Chiudi",
|
||||
"hide_media_previews": "Nascondi anteprime",
|
||||
"hide_muted_posts": "Nascondi messaggi degli utenti silenziati",
|
||||
"hide_muted_threads": "Nascondi conversazioni silenziate",
|
||||
"hide_post_stats": "Nascondi statistiche dei messaggi (es. il numero di preferenze)",
|
||||
"hide_shoutbox": "Nascondi muro dei graffiti",
|
||||
"hide_user_stats": "Nascondi statistiche dell'utente (es. il numero di seguaci)",
|
||||
"hide_wallpaper": "Nascondi sfondo della stanza",
|
||||
"hide_wordfiltered_statuses": "Nascondi post filtrati per parola",
|
||||
"import_blocks_from_a_csv_file": "Importa blocchi da un file CSV",
|
||||
"import_followers_from_a_csv_file": "Importa una lista di chi segui da un file CSV",
|
||||
"import_mutes_from_a_csv_file": "Importa silenziati da un file CSV",
|
||||
|
@ -567,10 +582,14 @@
|
|||
"invalid_theme_imported": "Il file selezionato non è un tema supportato da Pleroma. Il tuo tema non è stato modificato.",
|
||||
"limited_availability": "Non disponibile nel tuo browser",
|
||||
"links": "Collegamenti",
|
||||
"list_aliases_error": "Errore nel recupero degli alias: {error}",
|
||||
"list_backups_error": "Errore nel recupero della lista dei backup: {error}",
|
||||
"lock_account_description": "Vaglia manualmente i nuovi seguaci",
|
||||
"loop_video": "Riproduci video in ciclo continuo",
|
||||
"loop_video_silent_only": "Riproduci solo video muti in ciclo continuo (es. le \"gif\" di Mastodon)",
|
||||
"mascot": "Mascotte di MastodonFE",
|
||||
"max_thumbnails": "Numero massimo di anteprime per messaggio",
|
||||
"mention_links": "Collegamenti delle menzioni",
|
||||
"mfa": {
|
||||
"authentication_methods": "Metodi di accesso",
|
||||
"confirm_and_enable": "Conferma ed abilita OTP",
|
||||
|
@ -594,6 +613,12 @@
|
|||
},
|
||||
"minimal_scopes_mode": "Riduci opzioni di visibilità",
|
||||
"more_settings": "Altre impostazioni",
|
||||
"move_account": "Sposta account",
|
||||
"move_account_error": "Errore nello spostamento dell'account: {error}",
|
||||
"move_account_notes": "Se vuoi spostare questo account da qualche altra parte, devi andare all'account di destinazione e aggiungere un alias che punta qui.",
|
||||
"move_account_target": "Account di destinazione (es. {example})",
|
||||
"moved_account": "Account spostato.",
|
||||
"mute_bot_posts": "Silenzia post dei bot",
|
||||
"mute_export": "Esporta silenziati",
|
||||
"mute_export_button": "Esporta i silenziati in un file CSV",
|
||||
"mute_import": "Carica silenziati",
|
||||
|
@ -603,6 +628,7 @@
|
|||
"mutes_tab": "Silenziati",
|
||||
"name": "Nome",
|
||||
"name_bio": "Nome ed introduzione",
|
||||
"new_alias_target": "Aggiungi nuovo alias (es. {example})",
|
||||
"new_email": "Nuova email",
|
||||
"new_password": "Nuova password",
|
||||
"no_blocks": "Nessun utente bloccato",
|
||||
|
@ -620,6 +646,7 @@
|
|||
"notification_visibility_likes": "Preferiti",
|
||||
"notification_visibility_mentions": "Menzioni",
|
||||
"notification_visibility_moves": "Migrazioni utenti",
|
||||
"notification_visibility_polls": "Termine dei poll in cui hai votato",
|
||||
"notification_visibility_repeats": "Condivisioni",
|
||||
"notifications": "Notifiche",
|
||||
"nsfw_clickthrough": "Fai click per visualizzare gli allegati offuscati",
|
||||
|
@ -628,7 +655,9 @@
|
|||
"panelRadius": "Pannelli",
|
||||
"pause_on_unfocused": "Interrompi l'aggiornamento continuo mentre la scheda è in secondo piano",
|
||||
"play_videos_in_modal": "Riproduci video in un riquadro a sbalzo",
|
||||
"post_look_feel": "Aspetto dei post",
|
||||
"post_status_content_type": "Tipo di contenuto dei messaggi",
|
||||
"posts": "Post",
|
||||
"preload_images": "Precarica immagini",
|
||||
"presets": "Valori predefiniti",
|
||||
"profile_background": "Sfondo del tuo profilo",
|
||||
|
@ -642,6 +671,8 @@
|
|||
"profile_tab": "Profilo",
|
||||
"radii_help": "Imposta il raggio degli angoli (in pixel)",
|
||||
"refresh_token": "Aggiorna token",
|
||||
"remove_alias": "Rimuovi questo alias",
|
||||
"remove_backup": "Elimina",
|
||||
"replies_in_timeline": "Risposte nelle sequenze",
|
||||
"reply_visibility_all": "Mostra tutte le risposte",
|
||||
"reply_visibility_following": "Mostra solo le risposte rivolte a me o agli utenti che seguo",
|
||||
|
@ -666,12 +697,15 @@
|
|||
"security_tab": "Sicurezza",
|
||||
"sensitive_by_default": "Tutti i miei messaggi sono scabrosi",
|
||||
"set_new_avatar": "Scegli una nuova icona",
|
||||
"set_new_mascot": "Imposta nuova mascotte",
|
||||
"set_new_profile_background": "Scegli un nuovo sfondo",
|
||||
"set_new_profile_banner": "Scegli un nuovo gonfalone",
|
||||
"setting_changed": "Valore personalizzato",
|
||||
"setting_server_side": "Questa impostazione è legata al tuo profilo e ha effetto su tutte le sessioni e tutti i client",
|
||||
"settings": "Impostazioni",
|
||||
"show_admin_badge": "Mostra l'insegna di amministratore sul mio profilo",
|
||||
"show_moderator_badge": "Mostra l'insegna di moderatore sul mio profilo",
|
||||
"show_scrollbars": "Mostra le barre di scorrimento delle colonne laterali",
|
||||
"stop_gifs": "Riproduci GIF al passaggio del cursore",
|
||||
"streaming": "Mostra automaticamente i nuovi messaggi quando sei in cima alla pagina",
|
||||
"style": {
|
||||
|
@ -780,66 +814,80 @@
|
|||
},
|
||||
"filter_hint": {
|
||||
"always_drop_shadow": "Attenzione: quest'ombra usa sempre {0} se il tuo browser lo supporta.",
|
||||
"avatar_inset": "Tieni presente che combinare ombre (sia incluse che non) sulle icone utente potrebbe dare risultati strani con quelle trasparenti.",
|
||||
"drop_shadow_syntax": "{0} non supporta il parametro {1} né la keyword {2}.",
|
||||
"inset_classic": "Le ombre incluse usano {0}",
|
||||
"spread_zero": "Lo spandimento maggiore di zero si azzera sulle ombre"
|
||||
"avatar_inset": "Tieni presente che combinare ombre (sia incavate che non) sulle icone utente potrebbe dare risultati strani con avatar trasparenti.",
|
||||
"drop_shadow_syntax": "{0} non supporta il parametro {1} con la keyword {2}.",
|
||||
"inset_classic": "Le ombre incavate usano {0}",
|
||||
"spread_zero": "Le ombre con espansione maggiore di zero appariranno come se l'espansione fosse zero"
|
||||
},
|
||||
"hintV3": "Per le ombre puoi anche usare la sintassi {0} per sfruttare il secondo colore.",
|
||||
"inset": "Includi",
|
||||
"override": "Sostituisci",
|
||||
"shadow_id": "Ombra numero {value}",
|
||||
"spread": "Spandi"
|
||||
"hintV3": "Per le ombre puoi anche usare la sintassi {0} per usare l'altro slot colore.",
|
||||
"inset": "Incavatura",
|
||||
"override": "Sovrascrivi",
|
||||
"shadow_id": "Ombra #{value}",
|
||||
"spread": "Espansione"
|
||||
},
|
||||
"switcher": {
|
||||
"clear_all": "Azzera tutto",
|
||||
"clear_opacity": "Rimuovi opacità",
|
||||
"clear_opacity": "Azzera opacità",
|
||||
"help": {
|
||||
"fe_downgraded": "L'interfaccia è stata portata ad una versione precedente.",
|
||||
"fe_upgraded": "Lo schema dei temi è stato aggiornato insieme all'interfaccia.",
|
||||
"future_version_imported": "Il tema importato è stato creato per una versione più recente dell'interfaccia.",
|
||||
"migration_napshot_gone": "Anteprima del tema non trovata, non tutto potrebbe essere come ricordi.",
|
||||
"migration_snapshot_ok": "Ho caricato l'anteprima del tema. Puoi provare a caricarne i contenuti.",
|
||||
"older_version_imported": "Il tema importato è stato creato per una versione precedente dell'interfaccia.",
|
||||
"snapshot_missing": "Il tema non è provvisto di anteprima, quindi potrebbe essere diverso da come appare.",
|
||||
"fe_downgraded": "La versione di PleromaFE è riportata ad una versione precedente.",
|
||||
"fe_upgraded": "Il motore dei temi di PleromaFE è stato aggiornato insieme all'interfaccia.",
|
||||
"future_version_imported": "Il tema importato è stato creato per una versione più nuova del frontend.",
|
||||
"migration_napshot_gone": "Per qualche motivo non è stata trovata l'anteprima del tema, non tutto potrebbe essere come ricordi.",
|
||||
"migration_snapshot_ok": "Per sicurezza, è stata caricata l'anteprima del tema. Puoi provare a caricarne i contenuti.",
|
||||
"older_version_imported": "Il file importato è stato creato per una versione precedente del frontend.",
|
||||
"snapshot_missing": "Il file non è provvisto di anteprima, quindi potrebbe essere diverso da come appare.",
|
||||
"snapshot_present": "Tutti i valori sono sostituiti dall'anteprima del tema. Puoi invece caricare i suoi contenuti.",
|
||||
"snapshot_source_mismatch": "Conflitto di versione: probabilmente l'interfaccia è stata portata indietro e poi aggiornata di nuovo. Se hai modificato il tema con una vecchia versione usa il tema precedente, altrimenti puoi usare il nuovo.",
|
||||
"upgraded_from_v2": "L'interfaccia è stata aggiornata, il tema potrebbe essere diverso da come lo ricordi.",
|
||||
"v2_imported": "Il tema importato è stato creato per una vecchia interfaccia. Non tutto potrebbe essere come inteso."
|
||||
"snapshot_source_mismatch": "Conflitto di versione: probabilmente il frontend è stato deaggiornato e poi aggiornato di nuovo. Se hai modificato il tema con una vecchia versione usa il tema precedente, altrimenti usa quello nuovo.",
|
||||
"upgraded_from_v2": "PleromaFE è stato aggiornato, il tema potrebbe essere un pochino diverso da come lo ricordi.",
|
||||
"v2_imported": "Il file importato è stato creato per un vecchio frontend. Cerchiamo di massimizzare la compatibilità, ma potrebbero esserci inconsistenze."
|
||||
},
|
||||
"keep_as_is": "Mantieni tal quale",
|
||||
"keep_as_is": "Mantieni com'è",
|
||||
"keep_color": "Mantieni colori",
|
||||
"keep_fonts": "Mantieni font",
|
||||
"keep_opacity": "Mantieni opacità",
|
||||
"keep_roundness": "Mantieni vertici",
|
||||
"keep_shadows": "Mantieni ombre",
|
||||
"load_theme": "Carica tema",
|
||||
"reset": "Reimposta",
|
||||
"reset": "Azzera",
|
||||
"save_load_hint": "Le opzioni \"mantieni\" conservano le impostazioni correnti quando selezioni o carichi un tema, e le salvano quando ne esporti uno. Quando nessuna casella è selezionata, tutte le impostazioni correnti saranno salvate nel tema.",
|
||||
"use_snapshot": "Versione precedente",
|
||||
"use_source": "Nuova versione"
|
||||
}
|
||||
},
|
||||
"subject_input_always_show": "Mostra sempre il campo Oggetto",
|
||||
"subject_line_behavior": "Copia oggetto quando rispondi",
|
||||
"subject_line_email": "Come nelle email: \"re: oggetto\"",
|
||||
"subject_line_mastodon": "Come in Mastodon: copia tal quale",
|
||||
"subject_input_always_show": "Mostra sempre il campo avvertenza sul contenuto",
|
||||
"subject_line_behavior": "Copia avvertenza sul contenuto quando rispondi",
|
||||
"subject_line_email": "Come nelle email: \"re: avvertenza\"",
|
||||
"subject_line_mastodon": "Come su Mastodon: copia com'è",
|
||||
"subject_line_noop": "Non copiare",
|
||||
"text": "Testo",
|
||||
"theme": "Tema",
|
||||
"theme_help": "Usa colori esadecimali (#rrggbb) per personalizzare il tuo schema di colori.",
|
||||
"theme_help_v2_1": "Puoi anche forzare colore ed opacità di alcuni elementi selezionando la casella. Usa il pulsante \"Azzera\" per azzerare tutte le forzature.",
|
||||
"theme_help_v2_2": "Le icone vicino alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se usani trasparenze, questi indicatori mostrano il peggior caso possibile.",
|
||||
"theme_help": "Usa colori esadecimali (#rrvvbb) per personalizzare il tuo tema colori.",
|
||||
"theme_help_v2_1": "Puoi anche sovrascrivere colore ed opacità di alcuni elementi spuntando la casella. Usa il pulsante \"Azzera\" per azzerare tutte le sovrascritture.",
|
||||
"theme_help_v2_2": "Le icone vicino alcuni elementi sono indicatori del contrasto fra testo e sfondo, passaci sopra col puntatore per ulteriori informazioni. Se usano la trasparenza, questi indicatori mostrano come sarebbero nel peggior caso possibile.",
|
||||
"third_column_mode": "Quando c'è abbastanza spazio, mostra una terza colonna contenente",
|
||||
"third_column_mode_none": "Non mostrare proprio la terza colonna",
|
||||
"third_column_mode_notifications": "Colonna notifiche",
|
||||
"third_column_mode_postform": "Modulo post principale e navigazione",
|
||||
"token": "Token",
|
||||
"tooltipRadius": "Suggerimenti/avvisi",
|
||||
"tooltipRadius": "Suggerimenti/allerte",
|
||||
"translation_language": "Lingua finale di traduzione automatica",
|
||||
"tree_advanced": "Mostra bottoni aggiuntivi per aprire e chiudere catene di risposte nelle conversazioni",
|
||||
"tree_fade_ancestors": "Mostra antenati del post corrente in testo semitrasparente",
|
||||
"type_domains_to_mute": "Cerca domini da silenziare",
|
||||
"upload_a_photo": "Carica un'immagine",
|
||||
"upload_a_photo": "Carica una foto",
|
||||
"useStreamingApi": "Ricevi messaggi e notifiche in tempo reale",
|
||||
"useStreamingApiWarning": "(Sconsigliato, sperimentale, può saltare messaggi)",
|
||||
"useStreamingApiWarning": "",
|
||||
"use_blurhash": "Usa blurhash per anteprime NSFW",
|
||||
"use_contain_fit": "Non ritagliare le anteprime degli allegati",
|
||||
"use_one_click_nsfw": "Apri media offuscati con un solo click",
|
||||
"use_one_click_nsfw": "Apri allegati NSFW con un solo click",
|
||||
"user_accepts_direct_messages_from": "Accetta post «diretti» da",
|
||||
"user_accepts_direct_messages_from_everybody": "Tutti",
|
||||
"user_accepts_direct_messages_from_nobody": "Nessuno",
|
||||
"user_accepts_direct_messages_from_people_i_follow": "Persone che seguo",
|
||||
"user_mutes": "Utenti",
|
||||
"user_settings": "Impostazioni Utente",
|
||||
"user_profile_default_tab": "Scheda predefinita sul profilo degli utenti",
|
||||
"user_profiles": "Profili utente",
|
||||
"user_settings": "Impostazioni utente",
|
||||
"valid_until": "Valido fino a",
|
||||
"values": {
|
||||
"false": "no",
|
||||
|
@ -847,86 +895,141 @@
|
|||
},
|
||||
"version": {
|
||||
"backend_version": "Versione backend",
|
||||
"frontend_version": "Versione interfaccia",
|
||||
"frontend_version": "Versione frontend",
|
||||
"title": "Versione"
|
||||
},
|
||||
"virtual_scrolling": "Velocizza l'elaborazione delle sequenze",
|
||||
"word_filter": "Parole filtrate"
|
||||
"virtual_scrolling": "Velocizza rendering sequenze",
|
||||
"word_filter": "Filtro per parola",
|
||||
"wordfilter": "Filtro per parola"
|
||||
},
|
||||
"settings_profile": {
|
||||
"creating": "Creazione del nuovo profilo di impostazioni \"{profile}\"…",
|
||||
"synchronization_error": "Non è stato possibile sincronizzare le impostazioni: {err}",
|
||||
"synchronized": "Impostazioni sincronizzate!",
|
||||
"synchronizing": "Sincronizzazione del profilo di impostazioni \"{profile}\"…"
|
||||
},
|
||||
"status": {
|
||||
"ancestor_follow": "Vedi {numReplies} altra risposta sotto questo post | Vedi {numReplies} altre risposte sotto questo post",
|
||||
"ancestor_follow_with_icon": "{icon} {text}",
|
||||
"attachment_stop_flash": "Ferma Flash player",
|
||||
"bookmark": "Aggiungi segnalibro",
|
||||
"copy_link": "Copia collegamento",
|
||||
"delete": "Elimina messaggio",
|
||||
"delete_confirm": "Vuoi veramente eliminare questo messaggio?",
|
||||
"collapse_attachments": "Riduci allegati",
|
||||
"copy_link": "Copia collegamento al post",
|
||||
"delete": "Elimina post",
|
||||
"delete_confirm": "Vuoi davvero eliminare questo post?",
|
||||
"delete_confirm_accept_button": "Sì, eliminalo",
|
||||
"delete_confirm_cancel_button": "No, tienilo",
|
||||
"delete_confirm_title": "Conferma eliminazione",
|
||||
"edit": "Modifica",
|
||||
"edit_history": "Cronologia modifiche",
|
||||
"edit_history_modal_title": "Modificato {historyCount} volta | Modificato {historyCount} volte",
|
||||
"edited_at": "Modificato {time}",
|
||||
"expand": "Espandi",
|
||||
"external_source": "Vai all'origine",
|
||||
"external_source": "Fonte originale",
|
||||
"favorites": "Preferiti",
|
||||
"hide_content": "Nascondi contenuti",
|
||||
"hide_full_subject": "Nascondi oggetto intero",
|
||||
"hide_attachment": "Nascondi allegato",
|
||||
"hide_content": "Nascondi contenuto",
|
||||
"hide_full_subject": "Nascondi avvertenza sul contenuto intera",
|
||||
"many_attachments": "Il post ha {number} allegato | Il post ha {number} allegati",
|
||||
"mentions": "Menzioni",
|
||||
"move_down": "Muovi allegato a destra",
|
||||
"move_up": "Muovi allegato a sinistra",
|
||||
"mute_conversation": "Silenzia conversazione",
|
||||
"nsfw": "DISDICEVOLE",
|
||||
"pin": "Intesta al profilo",
|
||||
"pinned": "Intestato",
|
||||
"nsfw": "NSFW",
|
||||
"open_gallery": "Apri galleria",
|
||||
"override_translation_source_language": "Sovrascrivi lingua di origine",
|
||||
"pin": "Fissa in cima al profilo",
|
||||
"pinned": "Fissato",
|
||||
"plus_more": "+{number} altri",
|
||||
"repeats": "Condivisi",
|
||||
"redraft": "Elimina e correggi",
|
||||
"redraft_confirm": "Vuoi davvero eliminare e correggere questo post? Le interazioni al post originale non saranno mantenute.",
|
||||
"redraft_confirm_accept_button": "Sì, elimina e correggi",
|
||||
"redraft_confirm_cancel_button": "No, tieni l'originale",
|
||||
"redraft_confirm_title": "Conferma elimina e correggi",
|
||||
"remove_attachment": "Rimuovi allegato",
|
||||
"repeat_confirm": "Vuoi davvero condividere questo post?",
|
||||
"repeat_confirm_accept_button": "Sì, condividilo",
|
||||
"repeat_confirm_cancel_button": "No, non condividere",
|
||||
"repeat_confirm_title": "Conferma condivisione",
|
||||
"repeats": "Condivisioni",
|
||||
"replies_list": "Risposte:",
|
||||
"replies_list_with_others": "Mostra {numReplies} altra risposta | Mostra {numReplies} altre risposte",
|
||||
"reply_to": "In risposta a",
|
||||
"show_content": "Mostra contenuti",
|
||||
"show_full_subject": "Mostra oggetto intero",
|
||||
"status_deleted": "Questo messagio è stato cancellato",
|
||||
"status_unavailable": "Messaggio non disponibile",
|
||||
"thread_muted": "Discussione silenziata",
|
||||
"show_all_attachments": "Mostra tutti gli allegati",
|
||||
"show_all_conversation": "Mostra conversazione intera ({numStatus} altro post) | Mostra conversazione intera ({numStatus} altri post)",
|
||||
"show_all_conversation_with_icon": "{icon} {text}",
|
||||
"show_attachment_description": "Anteprima descrizione (apri l'allegato per la descrizione intera)",
|
||||
"show_attachment_in_modal": "Mostra allegato in una finestra",
|
||||
"show_content": "Mostra contenuto",
|
||||
"show_full_subject": "Mostra tutta l'avvertenza sul contenuto",
|
||||
"show_only_conversation_under_this": "Mostra solo le risposte a questo post",
|
||||
"status_deleted": "Questo post è stato eliminato",
|
||||
"status_unavailable": "Post non disponibile",
|
||||
"thread_follow": "Visualizza {numStatus} altra risposta | Visualizza {numStatus} altre risposte",
|
||||
"thread_follow_with_icon": "{icon} {text}",
|
||||
"thread_hide": "Nascondi questa conversazione",
|
||||
"thread_muted": "Conversazione silenziata",
|
||||
"thread_muted_and_words": ", contiene:",
|
||||
"thread_show": "Mostra questa conversazione",
|
||||
"thread_show_full": "Mostra {numStatus} risposta | Mostra tutte e {numStatus} le risposte",
|
||||
"thread_show_full_with_icon": "{icon} {text}",
|
||||
"translate": "Traduci",
|
||||
"translated_from": "Tradotto da {language}",
|
||||
"unbookmark": "Rimuovi segnalibro",
|
||||
"unmute_conversation": "Riabilita conversazione",
|
||||
"unpin": "De-intesta",
|
||||
"unmute_conversation": "Desilenzia conversazione",
|
||||
"unpin": "Rimuovi dalla cima del profilo",
|
||||
"you": "(Tu)"
|
||||
},
|
||||
"time": {
|
||||
"in_future": "fra {0}",
|
||||
"in_past": "{0} fa",
|
||||
"now": "adesso",
|
||||
"now_short": "adesso",
|
||||
"now": "proprio adesso",
|
||||
"now_short": "ora",
|
||||
"unit": {
|
||||
"days": "{0} giorni",
|
||||
"days": "{0} giorno | {0} giorni",
|
||||
"days_short": "{0} g",
|
||||
"hours": "{0} ore",
|
||||
"hours_short": "{0} h",
|
||||
"minutes": "{0} minuti",
|
||||
"hours": "{0} ora | {0} ore",
|
||||
"hours_short": "{0} ora | {0} ore",
|
||||
"minutes": "{0} minuto | {0} minuti",
|
||||
"minutes_short": "{0} min",
|
||||
"months": "{0} mesi",
|
||||
"months_short": "{0} mes",
|
||||
"seconds": "{0} secondi",
|
||||
"months": "{0} mese | {0} mesi",
|
||||
"months_short": "{0} mese | {0} mesi",
|
||||
"seconds": "{0} secondo | {0} secondi",
|
||||
"seconds_short": "{0} sec",
|
||||
"weeks": "{0} settimane",
|
||||
"weeks_short": "{0} stm",
|
||||
"years": "{0} anni",
|
||||
"weeks": "{0} settimana | {0} settimane",
|
||||
"weeks_short": "{0} sett",
|
||||
"years": "{0} anno | {0} anni",
|
||||
"years_short": "{0} a"
|
||||
}
|
||||
},
|
||||
"timeline": {
|
||||
"collapse": "Ripiega",
|
||||
"collapse": "Riduci",
|
||||
"conversation": "Conversazione",
|
||||
"error": "Errore nel caricare la sequenza: {0}",
|
||||
"load_older": "Carica messaggi precedenti",
|
||||
"no_more_statuses": "Fine dei messaggi",
|
||||
"no_retweet_hint": "Il messaggio è diretto o solo per seguaci e non può essere condiviso",
|
||||
"no_statuses": "Nessun messaggio",
|
||||
"follow_tag": "Segui hashtag",
|
||||
"load_older": "Carica post precedenti",
|
||||
"no_more_statuses": "Non ci sono altri post",
|
||||
"no_retweet_hint": "Il messaggio è «solo per follower» o «diretto», quindi non può essere condiviso",
|
||||
"no_statuses": "Nessun post",
|
||||
"reload": "Ricarica",
|
||||
"repeated": "ha condiviso",
|
||||
"show_new": "Mostra nuovi",
|
||||
"socket_broke": "Connessione tempo reale interrotta: codice {0}",
|
||||
"socket_broke": "Connessione tempo reale interrotta: CloseEvent codice {0}",
|
||||
"socket_reconnected": "Connesso in tempo reale",
|
||||
"unfollow_tag": "Smetti di seguire hashtag",
|
||||
"up_to_date": "Aggiornato"
|
||||
},
|
||||
"toast": {
|
||||
"no_translation_target_set": "Nessuna lingua finale di traduzione impostata: la traduzione potrebbe fallire. Imposta una lingua finale di traduzione nelle tue impostazioni."
|
||||
},
|
||||
"tool_tip": {
|
||||
"accept_follow_request": "Accetta seguace",
|
||||
"add_reaction": "Reagisci",
|
||||
"accept_follow_request": "Accetta richiesta di follow",
|
||||
"add_reaction": "Aggiungi reazione",
|
||||
"bookmark": "Aggiungi segnalibro",
|
||||
"favorite": "Gradisci",
|
||||
"media_upload": "Carica allegati",
|
||||
"reject_follow_request": "Rifiuta seguace",
|
||||
"favorite": "Rendi preferito",
|
||||
"media_upload": "Carica media",
|
||||
"quote": "Cita",
|
||||
"reject_follow_request": "Rifiuta richiesta di follow",
|
||||
"repeat": "Condividi",
|
||||
"reply": "Rispondi",
|
||||
"user_settings": "Impostazioni utente"
|
||||
|
@ -934,7 +1037,7 @@
|
|||
"upload": {
|
||||
"error": {
|
||||
"base": "Caricamento fallito.",
|
||||
"default": "Riprova in seguito",
|
||||
"default": "Riprova più tardi",
|
||||
"file_too_big": "File troppo pesante [{filesize}{filesizeunit} / {allowedsize}{allowedsizeunit}]",
|
||||
"message": "Caricamento fallito: {0}"
|
||||
},
|
||||
|
@ -948,79 +1051,115 @@
|
|||
},
|
||||
"user_card": {
|
||||
"admin_menu": {
|
||||
"activate_account": "Attiva profilo",
|
||||
"deactivate_account": "Disattiva profilo",
|
||||
"delete_account": "Elimina profilo",
|
||||
"activate_account": "Riattiva account",
|
||||
"deactivate_account": "Disattiva account",
|
||||
"delete_account": "Elimina account",
|
||||
"delete_user": "Elimina utente",
|
||||
"disable_any_subscription": "Rendi utente non seguibile",
|
||||
"disable_remote_subscription": "Blocca i tentativi di seguirlo da altre stanze",
|
||||
"force_nsfw": "Oscura tutti i messaggi",
|
||||
"force_unlisted": "Nascondi tutti i messaggi",
|
||||
"grant_admin": "Crea Amministratore",
|
||||
"grant_moderator": "Crea Moderatore",
|
||||
"delete_user_data_and_deactivate_confirmation": "Questo eliminerà permanentemente i dati dall'account e lo disattiverà. Sei sicuro al 100%?",
|
||||
"disable_any_subscription": "Proibisci a tutti di seguire l'utente",
|
||||
"disable_remote_subscription": "Proibisci ad istanze remote di seguire l'utente",
|
||||
"force_nsfw": "Marca tutti i post come NSFW",
|
||||
"force_unlisted": "Rendi tutti i post «non in elenco»",
|
||||
"grant_admin": "Rendi amministratore",
|
||||
"grant_moderator": "Rendi moderatore",
|
||||
"moderation": "Moderazione",
|
||||
"quarantine": "I messaggi non arriveranno alle altre stanze",
|
||||
"revoke_admin": "Divesti Amministratore",
|
||||
"revoke_moderator": "Divesti Moderatore",
|
||||
"sandbox": "Rendi tutti i messaggi solo per seguaci",
|
||||
"strip_media": "Rimuovi ogni allegato ai messaggi"
|
||||
"quarantine": "Impedisci la federazione dei post degli utenti",
|
||||
"revoke_admin": "Rimuovi da amministratore",
|
||||
"revoke_moderator": "Rimuovi da moderatore",
|
||||
"sandbox": "Rendi tutti i messaggi \"solo per follower\"",
|
||||
"strip_media": "Rimuovi media dai messaggi"
|
||||
},
|
||||
"approve": "Approva",
|
||||
"approve": "Accetta",
|
||||
"approve_confirm": "Sei sicuro di voler permettere a questo utente di seguirti?",
|
||||
"approve_confirm_accept_button": "Sì, accetta",
|
||||
"approve_confirm_cancel_button": "No, annulla",
|
||||
"approve_confirm_title": "Accetta richiesta di follow",
|
||||
"block": "Blocca",
|
||||
"block_confirm": "Sei sicuro di voler bloccare {user}?",
|
||||
"block_confirm_accept_button": "Sì, blocca",
|
||||
"block_confirm_cancel_button": "No, non bloccare",
|
||||
"block_confirm_title": "Blocca utente",
|
||||
"block_progress": "Blocco…",
|
||||
"blocked": "Bloccato!",
|
||||
"blocks_you": "Ti blocca!",
|
||||
"bot": "Bot",
|
||||
"deny": "Nega",
|
||||
"deactivated": "Disattivato",
|
||||
"deny": "Rifiuta",
|
||||
"deny_confirm": "Sei sicuro di voler rifiutare la richiesta di follow di questo utente?",
|
||||
"deny_confirm_accept_button": "Sì, rifiuta",
|
||||
"deny_confirm_cancel_button": "No, annulla",
|
||||
"deny_confirm_title": "Rifiuta richiesta di follow",
|
||||
"domain_muted": "Sblocca dominio",
|
||||
"edit_profile": "Modifica profilo",
|
||||
"favorites": "Preferiti",
|
||||
"follow": "Segui",
|
||||
"follow_cancel": "Annulla richiesta",
|
||||
"follow_progress": "Richiedo…",
|
||||
"follow_sent": "Richiesta inviata!",
|
||||
"follow_unfollow": "Disconosci",
|
||||
"followees": "Segue",
|
||||
"followers": "Seguaci",
|
||||
"following": "Seguìto!",
|
||||
"follow_tag": "Segui l'hashtag",
|
||||
"follow_unfollow": "Smetti di seguire",
|
||||
"followed_tags": "Hashtag seguiti",
|
||||
"followed_users": "Utenti seguiti",
|
||||
"followees": "Seguiti",
|
||||
"followers": "Follower",
|
||||
"following": "Seguito!",
|
||||
"follows_you": "Ti segue!",
|
||||
"hidden": "Nascosto",
|
||||
"hide_repeats": "Nascondi condivisioni",
|
||||
"highlight": {
|
||||
"disabled": "Nessun risalto",
|
||||
"side": "Nastro a lato",
|
||||
"solid": "Un colore",
|
||||
"striped": "A righe"
|
||||
"disabled": "Nessuno sfondo",
|
||||
"side": "Striscia laterale",
|
||||
"solid": "Sfondo monocolore",
|
||||
"striped": "Sfondo a righe"
|
||||
},
|
||||
"its_you": "Sei tu!",
|
||||
"media": "Media",
|
||||
"mention": "Menziona",
|
||||
"message": "Contatta",
|
||||
"mute": "Silenzia",
|
||||
"mute_progress": "Silenzio…",
|
||||
"mute_confirm": "Sei sicuro di voler silenziare {user}?",
|
||||
"mute_confirm_accept_button": "Sì, silenzia",
|
||||
"mute_confirm_cancel_button": "No, non silenziare",
|
||||
"mute_confirm_title": "Silenzia utente",
|
||||
"mute_domain": "Blocca dominio",
|
||||
"mute_progress": "Silenziando…",
|
||||
"muted": "Silenziato",
|
||||
"not_following_any_hashtags": "Non stai seguendo nessun hashtag",
|
||||
"note": "Nota privata",
|
||||
"per_day": "al giorno",
|
||||
"remote_follow": "Segui da remoto",
|
||||
"remove_follower": "Rimuovi follower",
|
||||
"replies": "Con risposte",
|
||||
"report": "Segnala",
|
||||
"requested_by": "Ha chiesto di seguirti",
|
||||
"show_repeats": "Mostra condivisioni",
|
||||
"statuses": "Messaggi",
|
||||
"subscribe": "Abbònati",
|
||||
"statuses": "Post",
|
||||
"subscribe": "Iscriviti",
|
||||
"unblock": "Sblocca",
|
||||
"unblock_progress": "Sblocco…",
|
||||
"unmute": "Riabilita",
|
||||
"unmute_progress": "Riabilito…",
|
||||
"unsubscribe": "Disdici"
|
||||
"unfollow_confirm": "Sei sicuro di voler smettere di seguire {user}?",
|
||||
"unfollow_confirm_accept_button": "Sì, smetti di seguire",
|
||||
"unfollow_confirm_cancel_button": "No, non smettere di seguire",
|
||||
"unfollow_confirm_title": "Smetti di seguire l'utente",
|
||||
"unfollow_tag": "Smetti di seguire l'hashtag",
|
||||
"unmute": "Desilenzia",
|
||||
"unmute_progress": "Desilenziamento…",
|
||||
"unsubscribe": "Disiscriviti"
|
||||
},
|
||||
"user_profile": {
|
||||
"field_validated": "Collegamento verificato",
|
||||
"profile_does_not_exist": "Spiacente, questo profilo non esiste.",
|
||||
"profile_loading_error": "Spiacente, c'è stato un errore nel caricamento del profilo.",
|
||||
"timeline_title": "Sequenza dell'utente"
|
||||
},
|
||||
"user_reporting": {
|
||||
"add_comment_description": "La segnalazione sarà inviata ai moderatori della tua stanza. Puoi motivarla qui sotto:",
|
||||
"additional_comments": "Osservazioni accessorie",
|
||||
"forward_description": "Il profilo appartiene ad un'altra stanza. Inviare la segnalazione anche a quella?",
|
||||
"add_comment_description": "La segnalazione sarà inviata ai moderatori della tua istanza. Puoi fornire una motivazione per cui stai segnalando questo account qui sotto:",
|
||||
"additional_comments": "Commenti aggiuntivi",
|
||||
"forward_description": "Il profilo appartiene ad un altro server. Inviare la segnalazione anche a quello?",
|
||||
"forward_to": "Inoltra a {0}",
|
||||
"generic_error": "C'è stato un errore nell'elaborazione della tua richiesta.",
|
||||
"submit": "Invia",
|
||||
"title": "Segnalo {0}"
|
||||
"title": "Segnala {0}"
|
||||
},
|
||||
"who_to_follow": {
|
||||
"more": "Altro",
|
||||
|
|
124
src/i18n/lt.json
Normal file
124
src/i18n/lt.json
Normal file
|
@ -0,0 +1,124 @@
|
|||
{
|
||||
"about": {
|
||||
"bubble_instances": "Vietiniai burbulo serveriai",
|
||||
"bubble_instances_description": "Administratorių parinkti serveriai, kurie atstovauja šios serverio vietinę teritoriją",
|
||||
"mrf": {
|
||||
"federation": "Federacija",
|
||||
"keyword": {
|
||||
"ftl_removal": "Pašalinimas iš „Viso žinomo tinklo“ laiko skalės",
|
||||
"is_replaced_by": "→",
|
||||
"keyword_policies": "Raktažodžių politika",
|
||||
"reject": "Atmesti",
|
||||
"replace": "Pakeisti"
|
||||
},
|
||||
"mrf_policies": "Įjungta MRF politika",
|
||||
"mrf_policies_desc": "MRF politika valdo serverio federacijos elgseną. Įjungtos toliau nurodytos politikos:",
|
||||
"simple": {
|
||||
"accept": "Priimti",
|
||||
"accept_desc": "Šis serveris priima žinutes tik iš toliau nurodytų serverių:",
|
||||
"ftl_removal": "Pašalinimas iš „Žinomo tinklo“ laiko skalės",
|
||||
"ftl_removal_desc": "Šis serveris pašalina šiuos serverius iš „Žinomo tinklo“ laiko skalės:",
|
||||
"instance": "Serveris",
|
||||
"media_nsfw": "Medija priverstinai nustatyta kaip jautri",
|
||||
"media_nsfw_desc": "Šis serveris priverčia nustatyti mediją kaip jautrią toliau nurodytų serverių įrašuose:",
|
||||
"media_removal": "Medijos pašalinimas",
|
||||
"media_removal_desc": "Šis serveris pašalina mediją iš toliau nurodytų serverių įrašų:",
|
||||
"not_applicable": "Nėra",
|
||||
"quarantine": "Karantinas",
|
||||
"quarantine_desc": "Šis serveris nesiųs įrašų į toliau nurodytus serverius:",
|
||||
"reason": "Priežastis",
|
||||
"reject": "Atmesti",
|
||||
"reject_desc": "Šis serveris nepriims žinučių iš toliau nurodytų serverių:",
|
||||
"simple_policies": "Konkretaus serverio politika"
|
||||
}
|
||||
},
|
||||
"staff": "Personalas"
|
||||
},
|
||||
"announcements": {
|
||||
"all_day_prompt": "Tai – visos dienos renginys",
|
||||
"cancel_edit_action": "Atsisakyti",
|
||||
"close_error": "Užverti",
|
||||
"delete_action": "Ištrinti",
|
||||
"edit_action": "Redaguoti",
|
||||
"end_time_display": "Pasibaigia {time}",
|
||||
"end_time_prompt": "Pabaigos laikas: ",
|
||||
"inactive_message": "Šis skelbimas neaktyvus",
|
||||
"mark_as_read_action": "Žymėti kaip skaitytą",
|
||||
"page_header": "Skelbimai",
|
||||
"post_action": "Siųsti",
|
||||
"post_error": "Klaida: {error}",
|
||||
"post_form_header": "Skelbti skelbimą"
|
||||
},
|
||||
"chats": {
|
||||
"chats": "Pokalbiai",
|
||||
"delete": "Ištrinti",
|
||||
"more": "Daugiau",
|
||||
"new": "Naujas pokalbis",
|
||||
"you": "Jūs:"
|
||||
},
|
||||
"display_date": {
|
||||
"today": "Šiandien"
|
||||
},
|
||||
"domain_mute_card": {
|
||||
"mute": "Nutildyti",
|
||||
"mute_progress": "Nutildoma…",
|
||||
"unmute": "Atšaukti nutildymą",
|
||||
"unmute_progress": "Atšaukiamas nutildymas…"
|
||||
},
|
||||
"emoji": {
|
||||
"add_emoji": "Įterpti jaustuką",
|
||||
"custom": "Pasirinktinis jaustukas",
|
||||
"emoji": "Jaustukas",
|
||||
"stickers": "Lipdukai",
|
||||
"unicode": "Unikodo jaustukas"
|
||||
},
|
||||
"exporter": {
|
||||
"export": "Eksportuoti"
|
||||
},
|
||||
"file_type": {
|
||||
"audio": "Garso įrašas",
|
||||
"file": "Failas",
|
||||
"image": "Vaizdas",
|
||||
"video": "Vaizdo įrašas"
|
||||
},
|
||||
"general": {
|
||||
"more": "Daugiau",
|
||||
"scope_in_timeline": {
|
||||
"direct": "Tiesioginis",
|
||||
"local": "Vietinis – šį įrašą gali matyti tik jūsų serveris",
|
||||
"private": "Tik sekėjams",
|
||||
"public": "Vieša",
|
||||
"unlisted": "Neįtrauktas į sąrašą"
|
||||
},
|
||||
"show_less": "Rodyti mažiau",
|
||||
"show_more": "Rodyti daugiau",
|
||||
"submit": "Pateikti",
|
||||
"verify": "Patvirtinti"
|
||||
},
|
||||
"image_cropper": {
|
||||
"cancel": "Atšaukti"
|
||||
},
|
||||
"importer": {
|
||||
"submit": "Pateikti"
|
||||
},
|
||||
"user_card": {
|
||||
"follow_tag": "Sekti saitažodį",
|
||||
"not_following_any_hashtags": "Nesekate jokių saitažodžių.",
|
||||
"unfollow_confirm_accept_button": "Taip, nebesekti",
|
||||
"unfollow_confirm_cancel_button": "Ne, nenaikinti sekimą",
|
||||
"unfollow_confirm_title": "Nebesekti naudotoją",
|
||||
"unfollow_tag": "Nebesekti saitažodį"
|
||||
},
|
||||
"user_reporting": {
|
||||
"additional_comments": "Papildomi komentarai",
|
||||
"forward_description": "Paskyra yra iš kito serverio. Siųsti ataskaitos kopiją ir ten?",
|
||||
"forward_to": "Persiųsti į {0}",
|
||||
"generic_error": "Įvyko klaida apdorojant jūsų užklausą.",
|
||||
"submit": "Pateikti",
|
||||
"title": "Pranešama apie {0}"
|
||||
},
|
||||
"who_to_follow": {
|
||||
"more": "Daugiau",
|
||||
"who_to_follow": "Ką sekti"
|
||||
}
|
||||
}
|
|
@ -599,7 +599,7 @@
|
|||
"links": "Łącza",
|
||||
"list_aliases_error": "Błąd pobierania aliasów: {error}",
|
||||
"list_backups_error": "Błąd pobierania listy kopii zapasowych: {error}",
|
||||
"lock_account_description": "Spraw, by konto mogli wyświetlać tylko zatwierdzeni obserwujący",
|
||||
"lock_account_description": "Wymagaj potwierdzenia nowych śledzących",
|
||||
"loop_video": "Zapętlaj filmy",
|
||||
"loop_video_silent_only": "Zapętlaj tylko filmy bez dźwięku (np. mastodonowe „gify”)",
|
||||
"mascot": "Maskotka Mastodon FE",
|
||||
|
@ -679,6 +679,7 @@
|
|||
"pad_emoji": "Dodaj odstęp z obu stron emoji podczas dodawania selektorem",
|
||||
"panelRadius": "Panele",
|
||||
"pause_on_unfocused": "Wstrzymuj strumieniowanie kiedy karta nie jest aktywna",
|
||||
"permit_followback_description": "Automatycznie potwierdź śledzenie przez użytkowników którch już śledzisz",
|
||||
"play_videos_in_modal": "Odtwarzaj filmy bezpośrednio w przeglądarce mediów",
|
||||
"post_look_feel": "Wygląd wpisów",
|
||||
"post_status_content_type": "Domyślny typ zawartości wpisów",
|
||||
|
@ -1148,7 +1149,7 @@
|
|||
"followed_users": "Śledzeni użytkownicy",
|
||||
"followees": "Obserwowani",
|
||||
"followers": "Obserwujący",
|
||||
"following": "Obserwowany!",
|
||||
"following": "Obserwujesz!",
|
||||
"follows_you": "Obserwuje cię!",
|
||||
"hidden": "Ukryte",
|
||||
"hide_repeats": "Ukryj powtórzenia",
|
||||
|
@ -1174,7 +1175,7 @@
|
|||
"note": "Prywatna notatka",
|
||||
"per_day": "dziennie",
|
||||
"remote_follow": "Zdalna obserwacja",
|
||||
"remove_follower": "Zdalny śledzący",
|
||||
"remove_follower": "Usuń śledzenie",
|
||||
"replies": "Z odpowiedziami",
|
||||
"report": "Zgłoś",
|
||||
"requested_by": "Chce cię śledzić",
|
||||
|
|
446
src/i18n/pt.json
446
src/i18n/pt.json
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"about": {
|
||||
"bubble_instances": "Instâncias Bubble Locais",
|
||||
"bubble_instances_description": "Instâncias escolhidas pelos administradores para representar a área local dessa instância",
|
||||
"mrf": {
|
||||
"federation": "Federação",
|
||||
"keyword": {
|
||||
|
@ -23,7 +25,7 @@
|
|||
"media_removal_desc": "Este domínio remove multimédia das publicações dos seguintes domínios:",
|
||||
"not_applicable": "N/A",
|
||||
"quarantine": "Quarentena",
|
||||
"quarantine_desc": "Este domínio apenas irá publicar nos seguintes domínios:",
|
||||
"quarantine_desc": "Esta instância não irá enviar posts para as seguintes instâncias:",
|
||||
"reason": "Razão",
|
||||
"reject": "Rejeitar",
|
||||
"reject_desc": "Este domínio não aceitará mensagens dos seguintes domínios:",
|
||||
|
@ -39,6 +41,7 @@
|
|||
"delete_action": "Apagar",
|
||||
"edit_action": "Editar",
|
||||
"end_time_display": "Termina às {time}",
|
||||
"end_time_prompt": "Tempo final: ",
|
||||
"inactive_message": "Este anúncio está inativo",
|
||||
"mark_as_read_action": "Marcar como lido",
|
||||
"page_header": "Anúncios",
|
||||
|
@ -120,6 +123,9 @@
|
|||
"dismiss": "Ignorar",
|
||||
"enable": "Ativar",
|
||||
"error_retry": "Por favor, tenta novamente",
|
||||
"flash_content": "Clique para mostrar o conteúdo Flash usando Ruffle (Experimental, talvez não funcione).",
|
||||
"flash_fail": "Falha ao carregar conteúdo flash, veja o console para detalhes.",
|
||||
"flash_security": "Note que isso pode ser potencialmente perigoso dado que conteúdos Flash ainda são código arbitrário.",
|
||||
"generic_error": "Ocorreu um erro",
|
||||
"loading": "A carregar…",
|
||||
"more": "Mais",
|
||||
|
@ -130,6 +136,13 @@
|
|||
"admin": "Admin",
|
||||
"moderator": "Moderador"
|
||||
},
|
||||
"scope_in_timeline": {
|
||||
"direct": "Direto",
|
||||
"local": "Local - apenas a sua instância pode ver esse post",
|
||||
"private": "Apenas para seguidores",
|
||||
"public": "Público",
|
||||
"unlisted": "Não-listado"
|
||||
},
|
||||
"show_less": "Mostrar menos",
|
||||
"show_more": "Mostrar mais",
|
||||
"submit": "Enviar",
|
||||
|
@ -152,6 +165,84 @@
|
|||
"load_older": "Carregar interações mais antigas",
|
||||
"moves": "O utilizador migra"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "Árabe",
|
||||
"az": "Azerbaijano",
|
||||
"bg": "Búlgaro",
|
||||
"cs": "Checo",
|
||||
"da": "Dinamarquês",
|
||||
"de": "Alemão",
|
||||
"el": "Grego",
|
||||
"en": "Inglês",
|
||||
"eo": "Esperanto",
|
||||
"es": "Espanhol",
|
||||
"fa": "Persa",
|
||||
"fi": "Finlandês",
|
||||
"fr": "Francês",
|
||||
"ga": "Irlandês",
|
||||
"he": "Hebreu",
|
||||
"hi": "Hindu",
|
||||
"hu": "Húngaro",
|
||||
"id": "Indonésio",
|
||||
"it": "Italiano",
|
||||
"ja": "Japonês",
|
||||
"ko": "Coreano",
|
||||
"lt": "Lituano",
|
||||
"lv": "Letão",
|
||||
"nl": "Holandês",
|
||||
"pl": "Polonês",
|
||||
"pt": "Português",
|
||||
"ru": "Russo",
|
||||
"sk": "Eslovaco",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"translated_from": {
|
||||
"ar": "Traduzido de @:languages.ar",
|
||||
"az": "Traduzido de @:languages.az",
|
||||
"bg": "Traduzido de @:languages.bg",
|
||||
"cs": "Traduzido de @:languages.cs",
|
||||
"da": "Traduzido de @:languages.da",
|
||||
"de": "Traduzido de @:languages.de",
|
||||
"el": "Traduzido de @:languages.el",
|
||||
"en": "Traduzido de @:languages.en",
|
||||
"eo": "Traduzido de @:languages.eo",
|
||||
"es": "Traduzido de @:languages.es",
|
||||
"fa": "Traduzido de @:languages.fa",
|
||||
"fi": "Traduzido de @:languages.fi",
|
||||
"fr": "Traduzido de @:languages.fr",
|
||||
"ga": "Traduzido de @:languages.ga",
|
||||
"he": "Traduzido de @:languages.he",
|
||||
"hi": "Traduzido de @:languages.hi",
|
||||
"hu": "Traduzido de @:languages.hu",
|
||||
"id": "Traduzido de @:languages.id",
|
||||
"it": "Traduzido de @:languages.it",
|
||||
"ja": "Traduzido de @:languages.ja",
|
||||
"ko": "Traduzido de @:languages.ko",
|
||||
"lt": "Traduzido de @:languages.lt",
|
||||
"lv": "Traduzido de @:languages.lv",
|
||||
"nl": "Traduzido de @:languages.nl",
|
||||
"pl": "Traduzido de @:languages.pl",
|
||||
"pt": "Traduzido de @:languages.pt",
|
||||
"ru": "Traduzido de @:languages.ru",
|
||||
"sk": "Traduzido de @:languages.sk",
|
||||
"sv": "Traduzido de @:languages.sv",
|
||||
"tr": "Traduzido de @:languages.tr",
|
||||
"uk": "Traduzido de @:languages.uk",
|
||||
"zh": "Traduzido de @:languages.zh"
|
||||
},
|
||||
"uk": "Ucraniano",
|
||||
"zh": "Chinês"
|
||||
},
|
||||
"lists": {
|
||||
"create": "Criar",
|
||||
"delete": "Apagar lista",
|
||||
"following_only": "Limitar aos seguidores",
|
||||
"lists": "Listas",
|
||||
"new": "Nova Lista",
|
||||
"save": "Salvar mudanças",
|
||||
"search": "Procurar usuários",
|
||||
"title": "Título da lista"
|
||||
},
|
||||
"login": {
|
||||
"authentication_code": "Código de autenticação",
|
||||
"description": "Iniciar sessão com OAuth",
|
||||
|
@ -164,48 +255,90 @@
|
|||
"hint": "Entra para participar na discussão",
|
||||
"login": "Iniciar Sessão",
|
||||
"logout": "Terminar sessão",
|
||||
"logout_confirm": "Você tem certeza que deseja sair?",
|
||||
"logout_confirm_accept_button": "Sair",
|
||||
"logout_confirm_cancel_button": "Cancelar",
|
||||
"logout_confirm_title": "Sair",
|
||||
"password": "Palavra-passe",
|
||||
"placeholder": "ex. lain",
|
||||
"placeholder": "meunomedeusuario",
|
||||
"recovery_code": "Código de recuperação",
|
||||
"register": "Registrar",
|
||||
"username": "Nome de Utilizador"
|
||||
},
|
||||
"media_modal": {
|
||||
"counter": "{current} / {total}",
|
||||
"hide": "Fechar visualizador de mídia",
|
||||
"next": "Próximo",
|
||||
"previous": "Anterior"
|
||||
},
|
||||
"moderation": {
|
||||
"moderation": "Moderação",
|
||||
"reports": {
|
||||
"add_note": "Adicionar nota",
|
||||
"close": "Fechar",
|
||||
"delete_note": "Apagar",
|
||||
"delete_note_accept": "Sim, apague isso",
|
||||
"delete_note_cancel": "Não, mantenha isso",
|
||||
"delete_note_confirm": "Você tem certeza que deseja apagar essa nota?",
|
||||
"delete_note_title": "Confirmar exclusão",
|
||||
"no_content": "Nenhuma descrição dada",
|
||||
"no_reports": "Nenhum relatório a ser mostrado",
|
||||
"note_placeholder": "Deixar uma nota",
|
||||
"notes": "{ count } nota | {count } notas",
|
||||
"reopen": "Reabrir",
|
||||
"report": "Reportar",
|
||||
"reports": "Relatórios",
|
||||
"resolve": "Resolver",
|
||||
"show_closed": "Mostrar fechadas",
|
||||
"statuses": "{ count } publicação | { count } publicações",
|
||||
"tag_policy_notice": "Ativar a TagPolicy MRF para ativar as restrições de publicação",
|
||||
"tags": "Definir restrições de publicação"
|
||||
},
|
||||
"statuses": "Publicações",
|
||||
"users": "Usuários"
|
||||
},
|
||||
"nav": {
|
||||
"about": "Sobre",
|
||||
"administration": "Administração",
|
||||
"announcements": "Anúncios",
|
||||
"back": "Voltar",
|
||||
"bookmarks": "Itens Guardados",
|
||||
"bubble_timeline": "Linha de tempo Bubble",
|
||||
"bubble_timeline_description": "Publicações de instâncias perto da sua, como recomendado pelos administradores",
|
||||
"chats": "Salas de Chat",
|
||||
"dms": "Mensagens Diretas",
|
||||
"friend_requests": "Pedidos de seguidores",
|
||||
"home_timeline": "Linha de tempo pessoal",
|
||||
"home_timeline_description": "Publicações de pessoas que você segue",
|
||||
"interactions": "Interações",
|
||||
"lists": "Listas",
|
||||
"mentions": "Menções",
|
||||
"moderation": "Moderação",
|
||||
"preferences": "Preferências",
|
||||
"public_timeline_description": "Publicações públicas dessa instância",
|
||||
"public_tl": "Cronologia Pública",
|
||||
"search": "Pesquisar",
|
||||
"timeline": "Cronologia",
|
||||
"timelines": "Cronologias",
|
||||
"twkn": "Rede conhecida",
|
||||
"twkn_timeline_description": "Publicações de toda a rede",
|
||||
"user_search": "Pesquisa por Utilizadores",
|
||||
"who_to_follow": "Quem seguir"
|
||||
},
|
||||
"notifications": {
|
||||
"broken_favorite": "Publicação desconhecida, a procurar…",
|
||||
"broken_favorite": "Publicação desconhecida, procurando por isso…",
|
||||
"error": "Erro ao obter notificações: {0}",
|
||||
"favorited_you": "gostou do teu post",
|
||||
"favorited_you": "favoritou sua publicação",
|
||||
"follow_request": "quer seguir-te",
|
||||
"followed_you": "seguiu-te",
|
||||
"load_older": "Carregar notificações antigas",
|
||||
"migrated_to": "migrou para",
|
||||
"no_more_notifications": "Sem mais notificações",
|
||||
"notifications": "Notificações",
|
||||
"poll_ended": "enquete foi finalizada",
|
||||
"reacted_with": "reagiu com {0}",
|
||||
"read": "Lido!",
|
||||
"repeated_you": "partilhou o teu post"
|
||||
"repeated_you": "repostou a sua publicação"
|
||||
},
|
||||
"password_reset": {
|
||||
"check_email": "Verifica o teu endereço de e-mail para obter um link para repor a tua palavra-passe.",
|
||||
|
@ -228,10 +361,12 @@
|
|||
"multiple_choices": "Escolha múltipla",
|
||||
"not_enough_options": "Demasiado poucas opções únicas na sondagem",
|
||||
"option": "Opção",
|
||||
"people_voted_count": "{count} pessoa votou | {count} pessoas votaram",
|
||||
"single_choice": "Escolha única",
|
||||
"type": "Tipo de sondagem",
|
||||
"vote": "Vota",
|
||||
"votes": "votos"
|
||||
"votes": "votos",
|
||||
"votes_count": "{count} voto | {count} votos"
|
||||
},
|
||||
"post_status": {
|
||||
"account_not_locked_warning": "A sua conta não é {0}. Qualquer pessoa pode seguir-te e ver os seus posts privados (só para seguidores).",
|
||||
|
@ -241,43 +376,60 @@
|
|||
"text/bbcode": "BBCode",
|
||||
"text/html": "HTML",
|
||||
"text/markdown": "Remarcação",
|
||||
"text/plain": "Texto puro"
|
||||
"text/plain": "Texto puro",
|
||||
"text/x.misskeymarkdown": "MFM"
|
||||
},
|
||||
"content_warning": "Assunto (opcional)",
|
||||
"content_warning": "Aviso de Conteúdo (opcional)",
|
||||
"default": "Acabei de chegar em",
|
||||
"direct_warning_to_all": "Esta publicação será visível para todos os utilizadores mencionados.",
|
||||
"direct_warning_to_first_only": "Esta publicação só será visível para os utilizadores mencionados no início da mensagem.",
|
||||
"empty_status_error": "Não consegues publicar um post vazio e sem ficheiros",
|
||||
"edit_remote_warning": "Mudanças feitas na publicação talvez não sejam visíveis em algumas instâncias!",
|
||||
"edit_status": "Editar Status",
|
||||
"edit_unsupported_warning": "Enquetes e menções não mudarão ao editar.",
|
||||
"empty_status_error": "Não pode enviar uma publicação sem conteúdo ou arquivos",
|
||||
"media_description": "Descrição da multimédia",
|
||||
"media_description_error": "Falha ao atualizar ficheiro, tente novamente",
|
||||
"new_status": "Publicar nova publicação",
|
||||
"media_not_sensitive_warning": "Você tem um Aviso de Conteúdo, mas os anexos não estão marcados como sensíveis!",
|
||||
"new_status": "Nova publicação",
|
||||
"post": "Publicação",
|
||||
"posting": "A publicar",
|
||||
"preview": "Pré-visualização",
|
||||
"preview_empty": "Vazio",
|
||||
"scope": {
|
||||
"direct": "Direto - Enviar somente aos usuários mencionados",
|
||||
"local": "Local - não federar essa publicação",
|
||||
"private": "Apenas para seguidores - Enviar apenas para seguidores",
|
||||
"public": "Público - Publicar em cronologias públicas",
|
||||
"unlisted": "Não listado - Não exibir em cronologias públicas"
|
||||
},
|
||||
"scope_notice": {
|
||||
"local": "Essa publicação não estará visível em outras instâncias",
|
||||
"private": "Esta publicação será apenas visível para os teus seguidores",
|
||||
"public": "Esta publicação será visível para todos",
|
||||
"unlisted": "Esta publicação não será visível na Cronologia pública e na Rede conhecida por todos"
|
||||
}
|
||||
},
|
||||
"toggle_content_warning": "Alternar aviso de conteúdo"
|
||||
},
|
||||
"registration": {
|
||||
"awaiting_email_confirmation": "Sua conta foi registrada e um email foi enviado para o seu endereço. Por favor, verifique o email para completar o registro.",
|
||||
"awaiting_email_confirmation_title": "Aguardando confirmação de email",
|
||||
"bio": "Biografia",
|
||||
"bio_placeholder": "Ex.:\nBem-vindo a minha bio.\nEu amo assistir anime e jogar. Eu espero que possamos ser amigos!",
|
||||
"captcha": "CAPTCHA",
|
||||
"email": "Endereço de e-mail",
|
||||
"email_language": "Em qual linguagem você quer receber os emails do servidor?",
|
||||
"fullname": "Nome para exibição",
|
||||
"fullname_placeholder": "ex. Lain Iwakura",
|
||||
"fullname_placeholder": "ex. Atsuko Kagari",
|
||||
"new_captcha": "Clique na imagem para carregar um novo captcha",
|
||||
"password_confirm": "Confirmação de palavra-passe",
|
||||
"reason": "Razão do registro",
|
||||
"reason_placeholder": "Essa instância aprova os registros manualmente\nPermita ao administrador saber porque você deseja se registrar.",
|
||||
"register": "Registrar",
|
||||
"registration": "Registo",
|
||||
"request_sent": "Seu pedido de registro foi enviado para aprovação. Você irá receber um email quando a sua conta for aprovada.",
|
||||
"request_sent_title": "Pedido de registro enviado",
|
||||
"token": "Código do convite",
|
||||
"username_placeholder": "ex. lain",
|
||||
"username_placeholder": "ex. akko",
|
||||
"validations": {
|
||||
"email_required": "não pode ser deixado em branco",
|
||||
"fullname_required": "não pode ser deixado em branco",
|
||||
|
@ -304,7 +456,19 @@
|
|||
},
|
||||
"settings": {
|
||||
"accent": "Destaque",
|
||||
"account_alias": "Apelidos de conta",
|
||||
"account_alias_table_head": "Apelido",
|
||||
"account_backup": "Backup de conta",
|
||||
"account_backup_description": "Isso permite a você baixar um arquivo das informações da sua conta e as suas publicações, mas eles ainda não podem ser importados para uma conta do Akkoma.",
|
||||
"account_backup_table_head": "Backup",
|
||||
"account_privacy": "Privacidade",
|
||||
"add_alias_error": "Erro ao adicionar apelido: {error}",
|
||||
"add_backup": "Criar novo backup",
|
||||
"add_backup_error": "Erro ao adicionar um novo backup: {error}",
|
||||
"added_alias": "Apelido foi adicionado.",
|
||||
"added_backup": "Adicionou um novo backup.",
|
||||
"allow_following_move": "Permitir seguimento automático quando a conta for migrada para outra instância",
|
||||
"always_show_post_button": "Sempre mostrar o botão flutuante de Nova Publicação",
|
||||
"app_name": "Nome da aplicação",
|
||||
"attachmentRadius": "Anexos",
|
||||
"attachments": "Anexos",
|
||||
|
@ -314,6 +478,7 @@
|
|||
"avatarRadius": "Avatares",
|
||||
"avatar_size_instruction": "O tamanho mínimo recomendado para imagens de avatar é 150x150 pixels.",
|
||||
"background": "Imagem de Fundo",
|
||||
"backup_not_ready": "Esse backup não está pronto ainda.",
|
||||
"bio": "Biografia",
|
||||
"block_export": "Exportar utilizadores bloqueados",
|
||||
"block_export_button": "Exporta a tua lista de utilizadores bloqueados para um ficheiro csv",
|
||||
|
@ -335,10 +500,27 @@
|
|||
"changed_password": "Palavra-passe modificada com sucesso!",
|
||||
"chatMessageRadius": "Mensagem de texto",
|
||||
"checkboxRadius": "Caixas de seleção",
|
||||
"collapse_subject": "Esconder posts com assunto",
|
||||
"collapse_subject": "Colapsar publicações com aviso de conteúdo",
|
||||
"columns": "Colunas",
|
||||
"composing": "Escrita",
|
||||
"confirm_dialogs": "Necessita de confirmação para:",
|
||||
"confirm_dialogs_approve_follow": "Aceitar um pedido para seguir",
|
||||
"confirm_dialogs_block": "Bloqueando alguém",
|
||||
"confirm_dialogs_delete": "Apagar um post",
|
||||
"confirm_dialogs_deny_follow": "Rejeitando um pedido de seguir",
|
||||
"confirm_dialogs_mute": "Silenciando alguém",
|
||||
"confirm_dialogs_repeat": "Repetindo um post",
|
||||
"confirm_dialogs_unfollow": "Deixando de seguir alguém",
|
||||
"confirm_new_password": "Confirmar nova palavra-passe",
|
||||
"confirmation_dialogs": "Opções de confirmação",
|
||||
"conversation_display": "Estilo de mostrador de conversa",
|
||||
"conversation_display_linear": "Estilo-linear",
|
||||
"conversation_display_tree": "Estilo em árvore",
|
||||
"conversation_other_replies_button": "Mostrar o botão de \"outras respostas\"",
|
||||
"conversation_other_replies_button_below": "Abaixo das publicações",
|
||||
"conversation_other_replies_button_inside": "Dentro das publicações",
|
||||
"current_avatar": "Seu avatar atual",
|
||||
"current_mascot": "Seu mascote atual",
|
||||
"current_password": "Palavra-passe atual",
|
||||
"data_import_export_tab": "Importação/exportação de dados",
|
||||
"default_vis": "Opção de privacidade padrão",
|
||||
|
@ -346,14 +528,32 @@
|
|||
"delete_account_description": "Apagar os seus dados permanentemente e desativar a sua conta.",
|
||||
"delete_account_error": "Ocorreu um erro ao remover a sua conta. Se este persistir, por favor entre em contato com o/a administrador/a da instância.",
|
||||
"delete_account_instructions": "Escreva a sua palavra-passe no campo abaixo para confirmar a remoção da conta.",
|
||||
"disable_sticky_headers": "Não fixe o cabeçalho das colunas no topo da tela",
|
||||
"discoverable": "Permitir a descoberta desta conta em resultados de busca e outros serviços",
|
||||
"domain_mutes": "Domínios",
|
||||
"download_backup": "Baixar",
|
||||
"email_language": "Idioma para receber emails do servidor",
|
||||
"emoji_reactions_on_timeline": "Mostrar reações de emoji na timeline",
|
||||
"enable_web_push_notifications": "Habilitar notificações web push",
|
||||
"enter_current_password_to_confirm": "Introduza a sua palavra-passe atual para confirmar a sua identidade",
|
||||
"expert_mode": "Mostrar avançado",
|
||||
"expire_posts_enabled": "Apagar publicações depois de certos dias",
|
||||
"expire_posts_input_placeholder": "Número de dias",
|
||||
"export_theme": "Guardar predefinições",
|
||||
"file_export_import": {
|
||||
"backup_restore": "Backup de configurações",
|
||||
"backup_settings": "Fazer backup das configurações para um arquivo",
|
||||
"backup_settings_theme": "Fazer backup das configurações e do tema em um arquivo",
|
||||
"errors": {
|
||||
"file_slightly_new": "A versão secundária do arquivo é diferente, algumas configurações podem não carregar",
|
||||
"file_too_new": "Versão principal incompatível: {fileMajor}, esse PleromaFE (versão {feMajor}) é muito antigo para manipulá-lo",
|
||||
"file_too_old": "Versão principal incompatível: {fileMajor}, a versão do arquivo é muito antiga e não é suportada (versão mínima {feMajor})",
|
||||
"invalid_file": "O arquivo selecionado não é um arquivo de backup de configurações suportado pelo Pleroma. Nenhuma mudança foi feita."
|
||||
},
|
||||
"restore_settings": "Restaurar configurações de um arquivo"
|
||||
},
|
||||
"filtering": "Filtragem",
|
||||
"filtering_explanation": "Todas as publicações que contenham estas palavras serão silenciadas; uma palavra por linha",
|
||||
"filtering_explanation": "Todas as publicações que contenham estas palavras serão silenciadas, uma por linha",
|
||||
"follow_export": "Exportar quem você segue",
|
||||
"follow_export_button": "Exportar quem você segue para um arquivo CSV",
|
||||
"follow_import": "Importar quem você segue",
|
||||
|
@ -363,18 +563,29 @@
|
|||
"fun": "Divertido",
|
||||
"general": "Geral",
|
||||
"greentext": "Texto verde (meme arrows)",
|
||||
"hide_all_muted_posts": "Ocultar publicações silenciadas",
|
||||
"hide_attachments_in_convo": "Ocultar anexos em conversas",
|
||||
"hide_attachments_in_tl": "Ocultar anexos na cronologia",
|
||||
"hide_bot_indication": "Ocultar indicador de bots na publicação",
|
||||
"hide_favorites_description": "Não mostrar a lista dos meus favoritos (as pessoas ainda serão notificadas)",
|
||||
"hide_filtered_statuses": "Esconder posts filtrados",
|
||||
"hide_followers_count_description": "Não mostrar o número de seguidores",
|
||||
"hide_followers_description": "Não mostrar quem me segue",
|
||||
"hide_follows_count_description": "Não mostrar o número de contas seguidas",
|
||||
"hide_follows_description": "Não mostrar quem estou seguindo",
|
||||
"hide_isp": "Esconder painel específico da instância",
|
||||
"hide_list_aliases_error_action": "Fechar",
|
||||
"hide_media_previews": "Ocultar pré-visualização de mídia",
|
||||
"hide_muted_posts": "Esconder posts de utilizadores silenciados",
|
||||
"hide_muted_threads": "Ocultar fios silenciados",
|
||||
"hide_post_stats": "Esconder estatísticas de posts (p. ex. número de favoritos)",
|
||||
"hide_shoutbox": "Ocultar instâncias do shoutbox",
|
||||
"hide_site_favicon": "Ocultar o favicon da instância no painel de topo",
|
||||
"hide_site_name": "Ocultar nome da instância no painel de topo",
|
||||
"hide_threads_with_blocked_users": "Ocultar fios mencionando usuários bloqueados",
|
||||
"hide_user_stats": "Esconder estatísticas do usuário (p. ex. número de seguidores)",
|
||||
"hide_wallpaper": "Esconder papel de parede da instância",
|
||||
"hide_wordfiltered_statuses": "Ocultar publicações com palavras-filtradas",
|
||||
"import_blocks_from_a_csv_file": "Importar bloqueados a partir de um arquivo CSV",
|
||||
"import_followers_from_a_csv_file": "Importe seguidores a partir de um arquivo CSV",
|
||||
"import_mutes_from_a_csv_file": "Importar silenciados de um ficheiro csv",
|
||||
|
@ -387,10 +598,23 @@
|
|||
"invalid_theme_imported": "O arquivo selecionado não é um tema compatível com o Pleroma. Nenhuma mudança no tema foi feita.",
|
||||
"limited_availability": "Indisponível para seu navegador",
|
||||
"links": "Links",
|
||||
"list_aliases_error": "Erro ao buscar por apelido: {error}",
|
||||
"list_backups_error": "Erro ao buscar por lista de backup: {error}",
|
||||
"lock_account_description": "Restringir sua conta a seguidores aprovados",
|
||||
"loop_video": "Repetir vídeos",
|
||||
"loop_video_silent_only": "Repetir apenas vídeos sem som (como os \"gifs\" do Mastodon)",
|
||||
"mascot": "Mascote do Mastodon FE",
|
||||
"max_depth_in_thread": "Número máximo de níveis de um fio a serem mostrados por padrão",
|
||||
"max_thumbnails": "Número máximo de miniaturas por post",
|
||||
"mention_link_bolden_you": "Destaque suas menções quando você for mencionado",
|
||||
"mention_link_display": "Mostre o link das menções",
|
||||
"mention_link_display_full": "sempre como nomes completos (ex: {'@'}foo{'@'}example.org)",
|
||||
"mention_link_display_full_for_remote": "como nomes completos para usuários remotos (ex: {'@'}foo{'@'}example.org)",
|
||||
"mention_link_display_short": "sempre como nomes curtos (ex: {'@'}foo)",
|
||||
"mention_link_fade_domain": "Renomear domínios (ex: {'@'}example.org em {'@'}foo{'@'}example.org)",
|
||||
"mention_link_show_avatar": "Mostrar o avatar do usuário ao lado do link",
|
||||
"mention_link_show_tooltip": "Mostrar o nome completo dos usuários como dica aos usuários remotos",
|
||||
"mention_links": "Links de menções",
|
||||
"mfa": {
|
||||
"authentication_methods": "Métodos de autenticação",
|
||||
"confirm_and_enable": "Confirmar e ativar a palavra-passe de utilização única",
|
||||
|
@ -413,6 +637,13 @@
|
|||
"warning_of_generate_new_codes": "Quando gera novos códigos de recuperação, os antigos deixam de funcionar."
|
||||
},
|
||||
"minimal_scopes_mode": "Minimizar as opções de publicação",
|
||||
"more_settings": "Mais configurações",
|
||||
"move_account": "Mover conta",
|
||||
"move_account_error": "Erro ao mover conta: {error}",
|
||||
"move_account_notes": "Se você deseja mover a sua conta para outro lugar, você deve ir à sua conta alvo e adicionar um apelido apontando para cá.",
|
||||
"move_account_target": "Conta alvo (ex:. {example})",
|
||||
"moved_account": "Conta foi movida.",
|
||||
"mute_bot_posts": "Silenciar publicações de bots",
|
||||
"mute_export": "Exportar silenciados",
|
||||
"mute_export_button": "Exporta os silenciados para um ficheiro csv",
|
||||
"mute_import": "Importar silenciados",
|
||||
|
@ -422,6 +653,7 @@
|
|||
"mutes_tab": "Silenciados",
|
||||
"name": "Nome",
|
||||
"name_bio": "Nome & Biografia",
|
||||
"new_alias_target": "Adicionar um novo apelido (ex: {example})",
|
||||
"new_email": "Novo endereço de e-mail",
|
||||
"new_password": "Nova palavra-passe",
|
||||
"no_blocks": "Sem bloqueios",
|
||||
|
@ -431,6 +663,7 @@
|
|||
"notification_mutes": "Para deixar de receber notificações de um utilizador específico, silencia-o.",
|
||||
"notification_setting_block_from_strangers": "Bloqueia as notificações de utilizadores que não segues",
|
||||
"notification_setting_filters": "Filtros",
|
||||
"notification_setting_hide_if_cw": "Ocultar o conteúdo de uma notificação de push se estiver sob um Aviso de Conteúdo",
|
||||
"notification_setting_hide_notification_contents": "Ocultar o remetente e o conteúdo das notificações push",
|
||||
"notification_setting_privacy": "Privacidade",
|
||||
"notification_visibility": "Tipos de notificação para mostrar",
|
||||
|
@ -439,6 +672,7 @@
|
|||
"notification_visibility_likes": "Favoritos",
|
||||
"notification_visibility_mentions": "Menções",
|
||||
"notification_visibility_moves": "Utilizador Migrado",
|
||||
"notification_visibility_polls": "Finais de enquetes nas quais você votou",
|
||||
"notification_visibility_repeats": "Partilhas",
|
||||
"notifications": "Notificações",
|
||||
"nsfw_clickthrough": "Ativar clique em anexos e pré-visualizações de links para ocultar anexos NSFW",
|
||||
|
@ -446,8 +680,11 @@
|
|||
"pad_emoji": "Preencher espaços ao adicionar emojis do seletor",
|
||||
"panelRadius": "Paineis",
|
||||
"pause_on_unfocused": "Parar transmissão quando a aba não estiver em primeiro plano",
|
||||
"permit_followback_description": "Automaticamente aprove pedidos de usuários já seguidos",
|
||||
"play_videos_in_modal": "Reproduzir vídeos diretamente no visualizador de multimédia",
|
||||
"post_status_content_type": "Tipo de conteúdo do status",
|
||||
"post_look_feel": "Aspecto das publicações",
|
||||
"post_status_content_type": "Formato padrão da publicações",
|
||||
"posts": "Publicações",
|
||||
"preload_images": "Pré-carregar imagens",
|
||||
"presets": "Predefinições",
|
||||
"profile_background": "Pano de fundo de perfil",
|
||||
|
@ -461,10 +698,16 @@
|
|||
"profile_tab": "Perfil",
|
||||
"radii_help": "Arredondar arestas da interface (em pixel)",
|
||||
"refresh_token": "Atualizar Token",
|
||||
"remove_alias": "Remover esse apelido",
|
||||
"remove_backup": "Remover",
|
||||
"render_mfm": "Renderizar Misskey do Markdown",
|
||||
"render_mfm_on_hover": "Pausar animações MFM enquanto se rola a publicação",
|
||||
"replies_in_timeline": "Respostas na cronologia",
|
||||
"reply_visibility_all": "Mostrar todas as respostas",
|
||||
"reply_visibility_following": "Só mostrar respostas direcionadas a mim ou a usuários que sigo",
|
||||
"reply_visibility_following_short": "Mostrar respostas aos meus seguidores",
|
||||
"reply_visibility_self": "Só mostrar respostas direcionadas a mim",
|
||||
"reply_visibility_self_short": "Mostrar respostas apenas pra mim",
|
||||
"reset_avatar": "Redefinir avatar",
|
||||
"reset_avatar_confirm": "Tens a certeza que desejas redefinir o avatar?",
|
||||
"reset_background_confirm": "Tens a certeza que desejas redefinir o fundo?",
|
||||
|
@ -472,6 +715,8 @@
|
|||
"reset_profile_background": "Redefinir fundo de perfil",
|
||||
"reset_profile_banner": "Redefinir imagem do cabeçalho do perfil",
|
||||
"revoke_token": "Revogar",
|
||||
"right_sidebar": "Reverter a ordem das colunas",
|
||||
"save": "Salvas mudanças",
|
||||
"saving_err": "Erro ao salvar configurações",
|
||||
"saving_ok": "Configurações salvas",
|
||||
"scope_copy": "Copiar opções de privacidade ao responder (Mensagens diretas sempre copiam)",
|
||||
|
@ -479,12 +724,36 @@
|
|||
"search_user_to_mute": "Pesquisar utilizadores que pretende silenciar",
|
||||
"security": "Segurança",
|
||||
"security_tab": "Segurança",
|
||||
"sensitive_by_default": "Marcas as publicações como sensíveis por padrão",
|
||||
"sensitive_if_subject": "Automaticamente marque as imagens como sensíveis se um aviso de conteúdo é especificado",
|
||||
"set_new_avatar": "Alterar avatar",
|
||||
"set_new_mascot": "Definir novo mascote",
|
||||
"set_new_profile_background": "Alterar o pano de fundo de perfil",
|
||||
"set_new_profile_banner": "Alterar capa de perfil",
|
||||
"setting_changed": "As configurações estão diferentes do padrão",
|
||||
"setting_server_side": "Essas configurações estão vinculadas ao seu perfil e afetarão todas as sessões e clientes",
|
||||
"settings": "Configurações",
|
||||
"settings_profile": "Perfis de Configurações",
|
||||
"settings_profile_creation": "Criar novo perfil",
|
||||
"settings_profile_creation_new_name_label": "Nome",
|
||||
"settings_profile_creation_submit": "Criar",
|
||||
"settings_profile_currently": "Atualmente usando {name} (versão: {version})",
|
||||
"settings_profile_delete": "Apagar",
|
||||
"settings_profile_delete_confirm": "Você realmente quer apagar esse perfil?",
|
||||
"settings_profile_force_sync": "Sincronizar",
|
||||
"settings_profile_in_use": "Em uso",
|
||||
"settings_profile_use": "Usar",
|
||||
"settings_profiles_refresh": "Recarregar perfis de configuração",
|
||||
"settings_profiles_show": "Mostrar todos os perfis de configuração",
|
||||
"settings_profiles_unshow": "Esconder todos os perfis de configuração",
|
||||
"show_admin_badge": "Mostrar título de Administrador em meu perfil",
|
||||
"show_moderator_badge": "Mostrar título de Moderador em meu perfil",
|
||||
"show_nav_shortcuts": "Mostrar atalhos de navegação extras no painel de topo",
|
||||
"show_page_backgrounds": "Mostrar imagens de fundo específicas por página, por exemplo: para perfis de usuários",
|
||||
"show_panel_nav_shortcuts": "Mostrar atalhos de navegação da linha do tempo no painel de topo",
|
||||
"show_scrollbars": "Mostrar barras de rolamento na coluna lateral",
|
||||
"show_wider_shortcuts": "Mostrar espaçamento mais largo entre atalhos no painel de topo",
|
||||
"show_yous": "Mostrar (seu)s",
|
||||
"stop_gifs": "Reproduzir GIFs ao passar o cursor",
|
||||
"streaming": "Habilitar o fluxo automático de postagens no topo da página",
|
||||
"style": {
|
||||
|
@ -633,9 +902,9 @@
|
|||
"use_source": "Nova versão"
|
||||
}
|
||||
},
|
||||
"subject_input_always_show": "Sempre mostrar campo de assunto",
|
||||
"subject_line_behavior": "Copiar assunto ao responder",
|
||||
"subject_line_email": "Como num e-mail: \"re: assunto\"",
|
||||
"subject_input_always_show": "Sempre mostrar o campo de alerta de conteúdo",
|
||||
"subject_line_behavior": "Copiar o aviso de conteúdo ao responder",
|
||||
"subject_line_email": "Como email: \"re: aviso\"",
|
||||
"subject_line_mastodon": "Como o Mastodon: copiar como está",
|
||||
"subject_line_noop": "Não copiar",
|
||||
"text": "Texto",
|
||||
|
@ -643,15 +912,29 @@
|
|||
"theme_help": "Use cores em código hexadecimal (#rrggbb) para personalizar seu esquema de cores.",
|
||||
"theme_help_v2_1": "Você também pode sobrescrever as cores e opacidade de alguns componentes ao modificar o checkbox, use \"Limpar todos\" para limpar todas as modificações.",
|
||||
"theme_help_v2_2": "Alguns ícones em registo são indicadores de fundo/contraste de textos, passe por cima para obter informações detalhadas. Tenha em atenção que os indicadores de contraste não funcionam muito bem com transparência.",
|
||||
"third_column_mode": "Quando há espaço suficiente, mostrar a terceira coluna",
|
||||
"third_column_mode_none": "Não mostre a terceira coluna de forma alguma",
|
||||
"third_column_mode_notifications": "Coluna de notificações",
|
||||
"third_column_mode_postform": "Formulário principal para publicações e navegação",
|
||||
"token": "Token",
|
||||
"tooltipRadius": "Dicas/alertas",
|
||||
"translation_language": "Linguagem Automática para Tradução",
|
||||
"tree_advanced": "Mostrar botões extras para abrir e fechar cadeias de respostas em fios",
|
||||
"tree_fade_ancestors": "Mostrar ancestrais da publicação atual em texto fraco",
|
||||
"type_domains_to_mute": "Pesquisar domínios para silenciar",
|
||||
"upload_a_photo": "Enviar uma foto",
|
||||
"useStreamingApi": "Receber publicações e notificações em tempo real",
|
||||
"useStreamingApiWarning": "É legal usar isso. Se der algum problema, atualize, eu acho?",
|
||||
"use_blurhash": "Usar miniaturas borradas para imagens NSFW",
|
||||
"use_contain_fit": "Não cortar o anexo na miniatura",
|
||||
"use_one_click_nsfw": "Abrir anexos sensíveis com um clique",
|
||||
"user_accepts_direct_messages_from": "Aceitar DMs De",
|
||||
"user_accepts_direct_messages_from_everybody": "Todos",
|
||||
"user_accepts_direct_messages_from_nobody": "Ninguém",
|
||||
"user_accepts_direct_messages_from_people_i_follow": "Pessoas que eu sigo",
|
||||
"user_mutes": "Utilizadores",
|
||||
"user_profile_default_tab": "Aba Padrão no Perfil de Usuário",
|
||||
"user_profiles": "Perfis de Usuários",
|
||||
"user_settings": "Configurações de Usuário",
|
||||
"valid_until": "Válido até",
|
||||
"values": {
|
||||
|
@ -663,34 +946,87 @@
|
|||
"frontend_version": "Versão do Frontend",
|
||||
"title": "Versão"
|
||||
},
|
||||
"virtual_scrolling": "Otimizar a apresentação da cronologia"
|
||||
"virtual_scrolling": "Otimizar a apresentação da cronologia",
|
||||
"word_filter": "Filtro de palavras",
|
||||
"wordfilter": "Filtro de palavras"
|
||||
},
|
||||
"settings_profile": {
|
||||
"creating": "Criando novo perfil de configurações \"{profile}\"...",
|
||||
"synchronization_error": "Não foi possível sincronizar as configurações : {err}",
|
||||
"synchronized": "Configurações sincronizadas!",
|
||||
"synchronizing": "Sincronizando perfil de configurações \"{profile}\"..."
|
||||
},
|
||||
"status": {
|
||||
"ancestor_follow": "Veja mais {numReplies} outra resposta abaixo dessa publicação | Veja mais {numReplies} outras respostas abaixo dessa publicação",
|
||||
"ancestor_follow_with_icon": "{icon} {text}",
|
||||
"attachment_stop_flash": "Parar Flash Player",
|
||||
"bookmark": "Guardar",
|
||||
"copy_link": "Copiar o link do post",
|
||||
"delete": "Eliminar publicação",
|
||||
"delete_confirm": "Tens a certeza que desejas apagar a publicação?",
|
||||
"collapse_attachments": "Colapsar anexos",
|
||||
"copy_link": "Copiar link para publicação",
|
||||
"delete": "Apagar publicação",
|
||||
"delete_confirm": "Você realmente deseja apagar essa publicação?",
|
||||
"delete_confirm_accept_button": "Sim, apague-a",
|
||||
"delete_confirm_cancel_button": "Não, mantenha-a",
|
||||
"delete_confirm_title": "Confirmar exclusão",
|
||||
"edit": "Editar",
|
||||
"edit_history": "Editar Histórico",
|
||||
"edit_history_modal_title": "Editado {historyCount} vez | Editado {historyCount} vezes",
|
||||
"edited_at": "Editado {time}",
|
||||
"expand": "Expandir",
|
||||
"external_source": "Fonte externa",
|
||||
"favorites": "Favoritos",
|
||||
"hide_attachment": "Esconder anexo",
|
||||
"hide_content": "Ocultar o conteúdo",
|
||||
"hide_full_subject": "Ocultar o assunto completo",
|
||||
"hide_full_subject": "Ocultar todo o aviso de conteúdo",
|
||||
"many_attachments": "A publicação tem {number} anexo | A publicação tem {number} anexos",
|
||||
"mentions": "Menções",
|
||||
"move_down": "Deslocar anexo à direita",
|
||||
"move_up": "Deslocar anexo à esquerda",
|
||||
"mute_conversation": "Silenciar a conversação",
|
||||
"nsfw": "NSFW (Não apropriado para trabalho)",
|
||||
"open_gallery": "Abrir galeria",
|
||||
"override_translation_source_language": "Sobrepor a língua de origem",
|
||||
"pin": "Fixar no perfil",
|
||||
"pinned": "Afixado",
|
||||
"plus_more": "+{number} mais",
|
||||
"redraft": "Apagar & Reformar",
|
||||
"redraft_confirm": "Você realmente deseja apagar e refazer essa publicação? Interações com a publicação original não serão preservadas.",
|
||||
"redraft_confirm_accept_button": "Sim, apague e reformule",
|
||||
"redraft_confirm_cancel_button": "Não, mantenha o original",
|
||||
"redraft_confirm_title": "Confirmar exclusão & refatoração",
|
||||
"remove_attachment": "Remover anexo",
|
||||
"repeat_confirm": "Você realmente deseja repetir essa publicação?",
|
||||
"repeat_confirm_accept_button": "Sim, repita-a",
|
||||
"repeat_confirm_cancel_button": "Não, não repita",
|
||||
"repeat_confirm_title": "Confirmar repetição",
|
||||
"repeats": "Partilhados",
|
||||
"replies_list": "Respostas:",
|
||||
"replies_list_with_others": "Ver mais {numReplies} resposta | Veja mais {numReplies} respostas",
|
||||
"reply_to": "Responder a",
|
||||
"show_all_attachments": "Mostrar todos os anexos",
|
||||
"show_all_conversation": "Mostrar toda a conversa ({numStatus} outra publicação) | Mostrar toda a conversa ({numStatus} outras publicações)",
|
||||
"show_all_conversation_with_icon": "{icon} {text}",
|
||||
"show_attachment_description": "Prever a descrição (abra o anexo para a descrição completa)",
|
||||
"show_attachment_in_modal": "Mostrar anexos em uma janela",
|
||||
"show_content": "Mostrar o conteúdo",
|
||||
"show_full_subject": "Mostrar o assunto completo",
|
||||
"show_full_subject": "Mostra todo o aviso de conteúdo",
|
||||
"show_only_conversation_under_this": "Mostrar apenas as respostas para essa publicação",
|
||||
"status_deleted": "Esta publicação foi apagada",
|
||||
"status_unavailable": "Publicação indisponível",
|
||||
"thread_follow": "Ver mais {numStatus} resposta | Ver mais {numStatus} respostas",
|
||||
"thread_follow_with_icon": "{icon} {text}",
|
||||
"thread_hide": "Esconder esse fio",
|
||||
"thread_muted": "Conversação silenciada",
|
||||
"thread_muted_and_words": ", contém:",
|
||||
"thread_show": "Mostrar esse fio",
|
||||
"thread_show_full": "Mostrar {numStatus} resposta | Mostrar todas as {numStatus} respostas",
|
||||
"thread_show_full_with_icon": "{icon} {text}",
|
||||
"translate": "Traduzir",
|
||||
"translated_from": "Traduzir de {language}",
|
||||
"unbookmark": "Remover post dos Items Guardados",
|
||||
"unmute_conversation": "Mostrar a conversação",
|
||||
"unpin": "Desafixar do perfil"
|
||||
"unpin": "Desafixar do perfil",
|
||||
"you": "(Você)"
|
||||
},
|
||||
"time": {
|
||||
"in_future": "em {0}",
|
||||
|
@ -718,21 +1054,29 @@
|
|||
"collapse": "Esconder",
|
||||
"conversation": "Conversa",
|
||||
"error": "Erro a obter a cronologia: {0}",
|
||||
"load_older": "Carregar postagens antigas",
|
||||
"follow_tag": "Seguir hashtag",
|
||||
"load_older": "Carregar publicações antigas",
|
||||
"no_more_statuses": "Sem mais posts",
|
||||
"no_retweet_hint": "Posts apenas para seguidores ou diretos não podem ser partilhados",
|
||||
"no_statuses": "Sem posts",
|
||||
"no_statuses": "Sem publicações",
|
||||
"reload": "Recarregar",
|
||||
"repeated": "partilhado",
|
||||
"show_new": "Mostrar novas",
|
||||
"socket_broke": "Conexão em tempo real perdida : CloseEvent código {0}",
|
||||
"socket_reconnected": "Conexão em tempo-real estabelecida",
|
||||
"unfollow_tag": "Deixar de seguir hashtag",
|
||||
"up_to_date": "Atualizado"
|
||||
},
|
||||
"toast": {
|
||||
"no_translation_target_set": "Linguagem alvo para tradução não definida - isso pode falhar. Por favor, defina uma linguagem alvo nas suas configurações."
|
||||
},
|
||||
"tool_tip": {
|
||||
"accept_follow_request": "Aceitar o pedido de seguimento",
|
||||
"add_reaction": "Adicionar Reação",
|
||||
"bookmark": "Guardar",
|
||||
"favorite": "Favoritar",
|
||||
"media_upload": "Envio de multimédia",
|
||||
"quote": "Citação",
|
||||
"reject_follow_request": "Rejeitar o pedido de seguimento",
|
||||
"repeat": "Partilhar",
|
||||
"reply": "Responder",
|
||||
|
@ -759,6 +1103,7 @@
|
|||
"deactivate_account": "Desativar conta",
|
||||
"delete_account": "Eliminar Conta",
|
||||
"delete_user": "Eliminar utilizador",
|
||||
"delete_user_data_and_deactivate_confirmation": "Isso irá permanentemente apagar os dados dessa conta e a desativar. Você tem certeza disso?",
|
||||
"disable_any_subscription": "Não permitir que nenhum utilizador te siga",
|
||||
"disable_remote_subscription": "Não permitir seguidores de instâncias remotas",
|
||||
"force_nsfw": "Marcar todas as publicações como NSFW (não apropriado para o trabalho)",
|
||||
|
@ -773,41 +1118,84 @@
|
|||
"strip_media": "Eliminar ficheiros multimédia das publicações"
|
||||
},
|
||||
"approve": "Aprovar",
|
||||
"approve_confirm": "Você tem certeza que deseja permitir que esse usuário lhe siga?",
|
||||
"approve_confirm_accept_button": "Sim, aceitar",
|
||||
"approve_confirm_cancel_button": "No, cancelar",
|
||||
"approve_confirm_title": "Aprovar pedido para seguir",
|
||||
"block": "Bloquear",
|
||||
"block_confirm": "Você tem certeza que deseja bloquear {user}?",
|
||||
"block_confirm_accept_button": "Sim, bloquear",
|
||||
"block_confirm_cancel_button": "Não, não bloqueie",
|
||||
"block_confirm_title": "Bloquear usuário",
|
||||
"block_progress": "A bloquear…",
|
||||
"blocked": "Bloqueado!",
|
||||
"blocks_you": "Bloqueia você!",
|
||||
"bot": "Bot",
|
||||
"deactivated": "Desativado",
|
||||
"deny": "Negar",
|
||||
"deny_confirm": "Você tem certeza que deseja negar o pedido de te seguir desse usuário?",
|
||||
"deny_confirm_accept_button": "Sim, negar",
|
||||
"deny_confirm_cancel_button": "Não, cancelar",
|
||||
"deny_confirm_title": "Negar pedido para seguir",
|
||||
"domain_muted": "Desbloquear domínio",
|
||||
"edit_profile": "Editar perfil",
|
||||
"favorites": "Favoritos",
|
||||
"follow": "Seguir",
|
||||
"follow_cancel": "Cancelar pedido",
|
||||
"follow_progress": "Enviando…",
|
||||
"follow_sent": "Pedido enviado!",
|
||||
"follow_tag": "Seguir hashtag",
|
||||
"follow_unfollow": "Deixar de seguir",
|
||||
"followed_tags": "Hashtags seguidas",
|
||||
"followed_users": "Usuários seguidos",
|
||||
"followees": "Seguindo",
|
||||
"followers": "Seguidores",
|
||||
"following": "Seguindo!",
|
||||
"follows_you": "Segue você!",
|
||||
"hidden": "Ocultar",
|
||||
"hide_repeats": "Ocultar partilhas",
|
||||
"highlight": {
|
||||
"disabled": "Sem destaques",
|
||||
"side": "Faixa lateral",
|
||||
"solid": "Fundo sólido",
|
||||
"striped": "Fundo listrado"
|
||||
},
|
||||
"its_you": "É você!",
|
||||
"media": "Multimédia",
|
||||
"mention": "Mencionar",
|
||||
"message": "Mensagem",
|
||||
"mute": "Silenciar",
|
||||
"mute_confirm": "Você tem certeza que deseja silenciar {user}?",
|
||||
"mute_confirm_accept_button": "Sim, silenciar",
|
||||
"mute_confirm_cancel_button": "Não, não silenciar",
|
||||
"mute_confirm_title": "Silenciar usuário",
|
||||
"mute_domain": "Bloquear domínio",
|
||||
"mute_progress": "A silenciar…",
|
||||
"muted": "Silenciado",
|
||||
"not_following_any_hashtags": "Você não está seguindo nenhuma hashtag",
|
||||
"note": "Nota privada",
|
||||
"per_day": "por dia",
|
||||
"remote_follow": "Seguir remotamente",
|
||||
"remove_follower": "Remover seguidor",
|
||||
"replies": "Com Respostas",
|
||||
"report": "Denunciar",
|
||||
"requested_by": "Pediu para te seguir",
|
||||
"show_repeats": "Mostrar partilhas",
|
||||
"statuses": "Postagens",
|
||||
"statuses": "Publicações",
|
||||
"subscribe": "Subscrever",
|
||||
"unblock": "Desbloquear",
|
||||
"unblock_progress": "A desbloquear…",
|
||||
"unfollow_confirm": "Você tem certeza que deseja deixar de seguir {user}?",
|
||||
"unfollow_confirm_accept_button": "Sim, deixar de seguir",
|
||||
"unfollow_confirm_cancel_button": "Não, não deixe de seguir",
|
||||
"unfollow_confirm_title": "Deixar de seguir usuário",
|
||||
"unfollow_tag": "Deixar de seguir hashtag",
|
||||
"unmute": "Retirar silêncio",
|
||||
"unmute_progress": "A retirar silêncio…",
|
||||
"unsubscribe": "Retirar subscrição"
|
||||
},
|
||||
"user_profile": {
|
||||
"field_validated": "Link Verificado",
|
||||
"profile_does_not_exist": "Desculpe, este perfil não existe.",
|
||||
"profile_loading_error": "Desculpe, houve um erro ao carregar este perfil.",
|
||||
"timeline_title": "Cronologia do Utilizador"
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
/* eslint-disable import/no-webpack-loader-syntax */
|
||||
// This module exports only the notification part of the i18n,
|
||||
// which is useful for the service worker
|
||||
|
||||
|
|
|
@ -872,8 +872,8 @@
|
|||
"subject_input_always_show": "Luôn hiện hộp nhập cảnh báo nội dung",
|
||||
"subject_line_behavior": "Chép cảnh báo về nội dung khi trả lời",
|
||||
"subject_line_email": "Như email: \"re: cảnh báo\"",
|
||||
"subject_line_mastodon": "Giống Mastodon: copy as is",
|
||||
"subject_line_noop": "Đừng chép",
|
||||
"subject_line_mastodon": "Giống Mastodon: giữ nguyên",
|
||||
"subject_line_noop": "Không chép",
|
||||
"text": "Văn bản",
|
||||
"theme": "Theme",
|
||||
"theme_help": "Dùng mã màu hex (#rrggbb) để tự chế theme.",
|
||||
|
|
|
@ -407,7 +407,8 @@
|
|||
"private": "此帖文仅对你的关注者可见",
|
||||
"public": "此帖文对所有人可见",
|
||||
"unlisted": "此帖文在公共时间线和所有已知网络上均不可见"
|
||||
}
|
||||
},
|
||||
"toggle_content_warning": "切换内容警告"
|
||||
},
|
||||
"registration": {
|
||||
"awaiting_email_confirmation": "你的账号已被注册,一封电子邮件已发到你的地址。请检查电子邮件以完成注册。",
|
||||
|
@ -679,6 +680,7 @@
|
|||
"pad_emoji": "从表情符号选择器插入表情符号时,在表情两侧插入空格",
|
||||
"panelRadius": "面板",
|
||||
"pause_on_unfocused": "在离开页面时暂停时间线推送",
|
||||
"permit_followback_description": "自动批准已关注用户的关注请求",
|
||||
"play_videos_in_modal": "在弹出框内播放视频",
|
||||
"post_look_feel": "文章的样子跟感受",
|
||||
"post_status_content_type": "默认发布的内容类型",
|
||||
|
@ -747,6 +749,7 @@
|
|||
"show_admin_badge": "在我的个人资料中显示“管理员”徽章",
|
||||
"show_moderator_badge": "在我的个人资料中显示“监察员”徽章",
|
||||
"show_nav_shortcuts": "在顶部面板中显示额外的导航快捷键",
|
||||
"show_page_backgrounds": "显示特定页面的背景,例如用户个人资料页",
|
||||
"show_panel_nav_shortcuts": "在面板顶部显示时间线导航快捷键",
|
||||
"show_scrollbars": "显示侧栏的滚动条",
|
||||
"show_wider_shortcuts": "在顶部面板快捷键之间显示更宽的间隙",
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"about": {
|
||||
"bubble_instances": "本地局域實例",
|
||||
"bubble_instances_description": "管理員推薦的實例",
|
||||
"mrf": {
|
||||
"federation": "聯邦",
|
||||
"keyword": {
|
||||
|
@ -16,12 +18,15 @@
|
|||
"accept_desc": "本實例只接收來自下列實例的消息:",
|
||||
"ftl_removal": "從所有已知網路中移除",
|
||||
"ftl_removal_desc": "這個實例在所有已知網絡中移除下列實例:",
|
||||
"instance": "實例",
|
||||
"media_nsfw": "媒體強制設定為敏感",
|
||||
"media_nsfw_desc": "這個實例強迫以下實例的帖子媒體設定為敏感:",
|
||||
"media_nsfw_desc": "這個實例把以下實例的貼文媒體強制設定為敏感:",
|
||||
"media_removal": "移除媒體",
|
||||
"media_removal_desc": "這個實例移除以下實例的帖子媒體:",
|
||||
"media_removal_desc": "這個實例移除以下實例的貼文媒體:",
|
||||
"not_applicable": "無",
|
||||
"quarantine": "隔離",
|
||||
"quarantine_desc": "本實例只會把公開發文發送到下列實例:",
|
||||
"quarantine_desc": "本實例不會向下列實例發佈貼文:",
|
||||
"reason": "理由",
|
||||
"reject": "拒絕",
|
||||
"reject_desc": "本實例不會接收來自下列實例的消息:",
|
||||
"simple_policies": "站規"
|
||||
|
@ -29,6 +34,27 @@
|
|||
},
|
||||
"staff": "職員"
|
||||
},
|
||||
"announcements": {
|
||||
"all_day_prompt": "這是一個全天事件",
|
||||
"cancel_edit_action": "取消",
|
||||
"close_error": "關閉",
|
||||
"delete_action": "刪除",
|
||||
"edit_action": "編輯",
|
||||
"end_time_display": "結束於 {time}",
|
||||
"end_time_prompt": "結束時間: ",
|
||||
"inactive_message": "此公告處於非活躍狀態",
|
||||
"mark_as_read_action": "標爲已讀",
|
||||
"page_header": "公告",
|
||||
"post_action": "發佈",
|
||||
"post_error": "錯誤:{error}",
|
||||
"post_form_header": "發佈公告",
|
||||
"post_placeholder": "公告內容",
|
||||
"published_time_display": "發表於 {time}",
|
||||
"start_time_display": "開始於 {time}",
|
||||
"start_time_prompt": "開始時間: ",
|
||||
"submit_edit_action": "提交",
|
||||
"title": "公告"
|
||||
},
|
||||
"chats": {
|
||||
"chats": "聊天",
|
||||
"delete": "刪除",
|
||||
|
@ -58,6 +84,7 @@
|
|||
"keep_open": "選擇器保持打開",
|
||||
"load_all": "加載所有繪文字(共 {emojiAmount} 個)",
|
||||
"load_all_hint": "最先加載的 {saneAmount} ,加載全部繪文字可能會帶來性能問題。",
|
||||
"recent": "最近使用",
|
||||
"search_emoji": "搜索繪文字",
|
||||
"stickers": "貼紙",
|
||||
"unicode": "統一碼繪文字"
|
||||
|
@ -71,10 +98,10 @@
|
|||
},
|
||||
"features_panel": {
|
||||
"media_proxy": "媒體代理",
|
||||
"scope_options": "可見範圍設置",
|
||||
"scope_options": "貼文可見範圍設置",
|
||||
"text_limit": "文字數量限制",
|
||||
"title": "特色",
|
||||
"upload_limit": "上傳限制",
|
||||
"title": "功能",
|
||||
"upload_limit": "上傳大小限制",
|
||||
"who_to_follow": "推薦關注"
|
||||
},
|
||||
"file_type": {
|
||||
|
@ -109,6 +136,13 @@
|
|||
"admin": "管理員",
|
||||
"moderator": "主持人"
|
||||
},
|
||||
"scope_in_timeline": {
|
||||
"direct": "私信",
|
||||
"local": "本地 - 僅你所在的實例能看到此貼文",
|
||||
"private": "僅關注者",
|
||||
"public": "公開",
|
||||
"unlisted": "不公開"
|
||||
},
|
||||
"show_less": "收起",
|
||||
"show_more": "展開",
|
||||
"submit": "提交",
|
||||
|
@ -131,6 +165,84 @@
|
|||
"load_older": "載入更早的互動",
|
||||
"moves": "用戶遷移"
|
||||
},
|
||||
"languages": {
|
||||
"ar": "阿拉伯文",
|
||||
"az": "阿塞拜疆語",
|
||||
"bg": "保加利亞語",
|
||||
"cs": "捷克語",
|
||||
"da": "丹麥語",
|
||||
"de": "德語",
|
||||
"el": "希臘語",
|
||||
"en": "英語",
|
||||
"eo": "世界語",
|
||||
"es": "西班牙語",
|
||||
"fa": "波斯語",
|
||||
"fi": "芬蘭語",
|
||||
"fr": "法語",
|
||||
"ga": "愛爾蘭語",
|
||||
"he": "希伯來語",
|
||||
"hi": "印地語",
|
||||
"hu": "匈牙利語",
|
||||
"id": "印度尼西亞語",
|
||||
"it": "義大利語",
|
||||
"ja": "日語",
|
||||
"ko": "韓語",
|
||||
"lt": "立陶宛語",
|
||||
"lv": "拉脫維亞語",
|
||||
"nl": "荷蘭語",
|
||||
"pl": "波蘭語",
|
||||
"pt": "葡萄牙語",
|
||||
"ru": "俄語",
|
||||
"sk": "斯洛伐克語",
|
||||
"sv": "瑞典語",
|
||||
"tr": "土耳其語",
|
||||
"translated_from": {
|
||||
"ar": "翻譯自 @:languages.ar",
|
||||
"az": "翻譯自 @:languages.az",
|
||||
"bg": "翻譯自 @:languages.bg",
|
||||
"cs": "翻譯自 @:languages.cs",
|
||||
"da": "翻譯自 @:languages.da",
|
||||
"de": "翻譯自 @:languages.de",
|
||||
"el": "翻譯自 @:languages.el",
|
||||
"en": "翻譯自 @:languages.en",
|
||||
"eo": "翻譯自 @:languages.eo",
|
||||
"es": "翻譯自 @:languages.es",
|
||||
"fa": "翻譯自 @:languages.fa",
|
||||
"fi": "翻譯自 @:languages.fi",
|
||||
"fr": "翻譯自 @:languages.fr",
|
||||
"ga": "翻譯自 @:languages.ga",
|
||||
"he": "翻譯自 @:languages.he",
|
||||
"hi": "翻譯自 @:languages.hi",
|
||||
"hu": "翻譯自 @:languages.hu",
|
||||
"id": "翻譯自 @:languages.id",
|
||||
"it": "翻譯自 @:languages.it",
|
||||
"ja": "翻譯自 @:languages.ja",
|
||||
"ko": "翻譯自 @:languages.ko",
|
||||
"lt": "翻譯自 @:languages.lt",
|
||||
"lv": "翻譯自 @:languages.lv",
|
||||
"nl": "翻譯自 @:languages.nl",
|
||||
"pl": "翻譯自 @:languages.pl",
|
||||
"pt": "翻譯自 @:languages.pt",
|
||||
"ru": "翻譯自 @:languages.ru",
|
||||
"sk": "翻譯自 @:languages.sk",
|
||||
"sv": "翻譯自 @:languages.sv",
|
||||
"tr": "翻譯自 @:languages.tr",
|
||||
"uk": "翻譯自 @:languages.uk",
|
||||
"zh": "翻譯自 @:languages.zh"
|
||||
},
|
||||
"uk": "烏克蘭語",
|
||||
"zh": "中文"
|
||||
},
|
||||
"lists": {
|
||||
"create": "創建",
|
||||
"delete": "刪除列表",
|
||||
"following_only": "只限於關注中的用戶",
|
||||
"lists": "列表",
|
||||
"new": "新建列表",
|
||||
"save": "保存更改",
|
||||
"search": "搜索用戶",
|
||||
"title": "列表標題"
|
||||
},
|
||||
"login": {
|
||||
"authentication_code": "驗證碼",
|
||||
"description": "用 OAuth 登入",
|
||||
|
@ -143,54 +255,95 @@
|
|||
"hint": "登錄後加入討論",
|
||||
"login": "登入",
|
||||
"logout": "登出",
|
||||
"logout_confirm": "你確定要登出嗎?",
|
||||
"logout_confirm_accept_button": "登出",
|
||||
"logout_confirm_cancel_button": "取消",
|
||||
"logout_confirm_title": "登出",
|
||||
"password": "密碼",
|
||||
"placeholder": "例:鈴音",
|
||||
"placeholder": "我的用户名",
|
||||
"recovery_code": "恢復碼",
|
||||
"register": "註冊",
|
||||
"username": "用戶名"
|
||||
},
|
||||
"media_modal": {
|
||||
"counter": "{current} / {total}",
|
||||
"hide": "關閉媒體閱讀器",
|
||||
"next": "往後",
|
||||
"previous": "往前"
|
||||
},
|
||||
"moderation": {
|
||||
"moderation": "審核",
|
||||
"reports": {
|
||||
"add_note": "添加備註",
|
||||
"close": "關閉",
|
||||
"delete_note": "删除",
|
||||
"delete_note_accept": "是,確認刪除",
|
||||
"delete_note_cancel": "否,保留它",
|
||||
"delete_note_confirm": "你確定要刪除此備註嗎?",
|
||||
"delete_note_title": "確認刪除",
|
||||
"no_content": "沒有給出描述",
|
||||
"no_reports": "沒有舉報可顯示",
|
||||
"note_placeholder": "留下備註",
|
||||
"notes": "{ count } 條備註",
|
||||
"reopen": "重新處理",
|
||||
"report": "舉報於",
|
||||
"reports": "舉報",
|
||||
"resolve": "解決",
|
||||
"show_closed": "顯示已解決的舉報",
|
||||
"statuses": "{ count } 則貼文",
|
||||
"tag_policy_notice": "啟用 TagPolicy MRF 來設置貼文限制",
|
||||
"tags": "設置貼文限制"
|
||||
},
|
||||
"statuses": "貼文",
|
||||
"users": "用户"
|
||||
},
|
||||
"nav": {
|
||||
"about": "關於",
|
||||
"administration": "管理員",
|
||||
"announcements": "公告",
|
||||
"back": "後退",
|
||||
"bookmarks": "書籤",
|
||||
"bubble_timeline": "局域時間線",
|
||||
"bubble_timeline_description": "由管理員推薦,來自你所在實例相近的實例的貼文",
|
||||
"chats": "聊天",
|
||||
"dms": "私信",
|
||||
"friend_requests": "關注請求",
|
||||
"home_timeline": "家時間線",
|
||||
"home_timeline_description": "來自你所關注的人的貼文",
|
||||
"interactions": "互動",
|
||||
"lists": "列表",
|
||||
"mentions": "提及",
|
||||
"moderation": "審核",
|
||||
"preferences": "偏好設置",
|
||||
"public_timeline_description": "來自此實例的公開貼文",
|
||||
"public_tl": "公共時間線",
|
||||
"search": "搜索",
|
||||
"timeline": "時間線",
|
||||
"timelines": "時間線",
|
||||
"twkn": "已知網絡",
|
||||
"twkn_timeline_description": "來自整個網絡的貼文",
|
||||
"user_search": "用戶搜索",
|
||||
"who_to_follow": "推薦關注"
|
||||
},
|
||||
"notifications": {
|
||||
"broken_favorite": "未知的狀態,正在搜索中…",
|
||||
"broken_favorite": "未知帖文,搜索中…",
|
||||
"error": "獲取通知錯誤:{0}",
|
||||
"favorited_you": "喜歡了你的發文",
|
||||
"favorited_you": "喜歡了你的帖文",
|
||||
"follow_request": "想要關注你",
|
||||
"followed_you": "關注了你",
|
||||
"load_older": "載入更早的通知",
|
||||
"migrated_to": "遷移到",
|
||||
"no_more_notifications": "沒有更多的通知",
|
||||
"notifications": "通知",
|
||||
"poll_ended": "投票已結束",
|
||||
"reacted_with": "作出了 {0} 的反應",
|
||||
"read": "已閱!",
|
||||
"repeated_you": "轉發了你的發文"
|
||||
"repeated_you": "轉發了你的帖文"
|
||||
},
|
||||
"password_reset": {
|
||||
"check_email": "檢查你的郵箱,會有一個鏈接用於重置密碼。",
|
||||
"check_email": "請檢查你的郵箱,將會發送用於重置密碼的鏈結。",
|
||||
"forgot_password": "忘記密碼了?",
|
||||
"instruction": "輸入你的電郵地址或者用戶名,我們將發送一個鏈接到你的郵箱,用於重置密碼。",
|
||||
"instruction": "輸入你的電郵地址或者用戶名,我們將發送一個鏈結到你的郵箱,用於重置密碼。",
|
||||
"password_reset": "重置密碼",
|
||||
"password_reset_disabled": "密碼重置已經被禁用。請聯繫你的實例管理員。",
|
||||
"password_reset_required": "您必須重置密碼才能登陸。",
|
||||
|
@ -223,47 +376,60 @@
|
|||
"text/bbcode": "BBCode",
|
||||
"text/html": "HTML",
|
||||
"text/markdown": "Markdown",
|
||||
"text/plain": "純文本"
|
||||
"text/plain": "純文本",
|
||||
"text/x.misskeymarkdown": "MFM"
|
||||
},
|
||||
"content_warning": "主題(可選)",
|
||||
"content_warning": "內容警告(可選)",
|
||||
"default": "剛剛抵達洛杉磯。",
|
||||
"direct_warning_to_all": "本條內容只有被提及的用戶能夠看到。",
|
||||
"direct_warning_to_first_only": "本條內容只有被在消息開始處提及的用戶能夠看到。",
|
||||
"empty_status_error": "不能發布沒有內容,沒有附件的發文",
|
||||
"edit_remote_warning": "對帖文所做的更改在某些實例上可能不可見!",
|
||||
"edit_status": "編輯狀態",
|
||||
"edit_unsupported_warning": "投票和提及不會因編輯而更改。",
|
||||
"empty_status_error": "不能發佈沒有內容或附件的帖文",
|
||||
"media_description": "媒體描述",
|
||||
"media_description_error": "無法更新媒體,請重試",
|
||||
"new_status": "發佈新發文",
|
||||
"media_not_sensitive_warning": "你有標記內容警告,但附件沒有被標記爲敏感內容!",
|
||||
"new_status": "發佈新帖文",
|
||||
"post": "發送",
|
||||
"posting": "正在發送",
|
||||
"preview": "預覽",
|
||||
"preview_empty": "空的",
|
||||
"scope": {
|
||||
"direct": "私信 - 只發送給被提及的用戶",
|
||||
"local": "本地 - 不會向其它實例發佈此帖文",
|
||||
"private": "僅關注者 - 只有關注了你的人能看到",
|
||||
"public": "公共 - 發送到公共時間軸",
|
||||
"unlisted": "不公開 - 不會發送到公共時間軸"
|
||||
},
|
||||
"scope_notice": {
|
||||
"local": "此帖文在其它實例中不可見",
|
||||
"private": "關注你的人才能看到本條內容",
|
||||
"public": "本條帖子可以被所有人看到",
|
||||
"public": "本貼文可以被所有人看到",
|
||||
"unlisted": "本條內容既不在公共時間線,也不會在所有已知網絡上可見"
|
||||
}
|
||||
},
|
||||
"toggle_content_warning": "切換內容警告"
|
||||
},
|
||||
"registration": {
|
||||
"awaiting_email_confirmation": "你的帳號已成功申請註冊,一封註冊用的電子郵件已發到你的地址。請檢查電子郵件以完成註冊。",
|
||||
"awaiting_email_confirmation_title": "等待確認郵箱中",
|
||||
"bio": "簡介",
|
||||
"bio_placeholder": "例如:\n你好,我是玲音。\n我是一個住在日本郊區的動畫少女。你可能在 Wired 見過我。",
|
||||
"bio_placeholder": "例如:\n嗨!歡迎來查看我的簡介。\n我喜歡看動畫片和玩遊戲。希望我們能成爲朋友!",
|
||||
"captcha": "CAPTCHA",
|
||||
"email": "電子郵箱",
|
||||
"email_language": "你想從服務器接收到什麼語言的郵件?",
|
||||
"fullname": "顯示名稱",
|
||||
"fullname_placeholder": "例如:岩倉玲音",
|
||||
"fullname_placeholder": "例如:亞可·卡嘉莉",
|
||||
"new_captcha": "點擊圖片獲取新的驗證碼",
|
||||
"password_confirm": "確認密碼",
|
||||
"reason": "註冊理由",
|
||||
"reason_placeholder": "此實例的註冊需要手動批准。\n請讓管理知道您為什麼想要註冊。",
|
||||
"register": "註冊",
|
||||
"registration": "註冊",
|
||||
"request_sent": "你的註冊請求已被送去審核。當你的帳號被批准時,你會收到一封電子郵件。",
|
||||
"request_sent_title": "註冊請求已發送",
|
||||
"token": "邀請碼",
|
||||
"username_placeholder": "例如:lain",
|
||||
"username_placeholder": "例如:akko",
|
||||
"validations": {
|
||||
"email_required": "不能留空",
|
||||
"fullname_required": "不能留空",
|
||||
|
@ -290,16 +456,29 @@
|
|||
},
|
||||
"settings": {
|
||||
"accent": "強調色",
|
||||
"allow_following_move": "正在關注的賬號遷移時自動重新關注",
|
||||
"account_alias": "帳號別名",
|
||||
"account_alias_table_head": "別名",
|
||||
"account_backup": "帳號備份",
|
||||
"account_backup_description": "這個允許你下載一份帳號信息和文章的存檔,但是現在還不能導入到 Akkoma 帳號裏。",
|
||||
"account_backup_table_head": "備份",
|
||||
"account_privacy": "隱私",
|
||||
"add_alias_error": "添加別名時出錯:{error}",
|
||||
"add_backup": "創建一個新備份",
|
||||
"add_backup_error": "添加新備份時出錯:{error}",
|
||||
"added_alias": "别名已添加。",
|
||||
"added_backup": "已創建一個新備份。",
|
||||
"allow_following_move": "正在關注的帳號遷移時自動重新關注",
|
||||
"always_show_post_button": "始終顯示浮動的“發佈新帖文”按鈕",
|
||||
"app_name": "App 名稱",
|
||||
"attachmentRadius": "附件",
|
||||
"attachments": "附件",
|
||||
"autohide_floating_post_button": "自動隱藏新帖子的按鈕(移動設備)",
|
||||
"autohide_floating_post_button": "自動隱藏新貼文的按鈕(移動設備)",
|
||||
"avatar": "頭像",
|
||||
"avatarAltRadius": "頭像(通知)",
|
||||
"avatarRadius": "頭像",
|
||||
"avatar_size_instruction": "推薦的頭像圖片最小的尺寸是 150x150 像素。",
|
||||
"background": "背景",
|
||||
"backup_not_ready": "備份還沒準備好。",
|
||||
"bio": "簡介",
|
||||
"block_export": "封鎖黑名單導出",
|
||||
"block_export_button": "導出你的封鎖黑名單到一個 csv 文件",
|
||||
|
@ -307,7 +486,7 @@
|
|||
"block_import_error": "導入封鎖黑名單出錯",
|
||||
"blocks_imported": "封鎖黑名單導入成功!需要一點時間來處理。",
|
||||
"blocks_tab": "封鎖",
|
||||
"bot": "這是一個機器人賬號",
|
||||
"bot": "這是一個機器人帳號",
|
||||
"btnRadius": "按鈕",
|
||||
"cBlue": "藍色(回覆,關注)",
|
||||
"cGreen": "綠色(轉發)",
|
||||
|
@ -321,9 +500,27 @@
|
|||
"changed_password": "成功修改了密碼!",
|
||||
"chatMessageRadius": "聊天訊息",
|
||||
"checkboxRadius": "複選框",
|
||||
"collapse_subject": "摺疊帶標題的內容",
|
||||
"collapse_subject": "摺疊帶內容警告的帖文",
|
||||
"columns": "側欄",
|
||||
"composing": "寫作設置",
|
||||
"confirm_dialogs": "需要確認當:",
|
||||
"confirm_dialogs_approve_follow": "接受關注請求",
|
||||
"confirm_dialogs_block": "封鎖某人",
|
||||
"confirm_dialogs_delete": "删除帖文",
|
||||
"confirm_dialogs_deny_follow": "拒絕關注請求",
|
||||
"confirm_dialogs_mute": "靜音某人",
|
||||
"confirm_dialogs_repeat": "轉發帖文",
|
||||
"confirm_dialogs_unfollow": "取消關注某人",
|
||||
"confirm_new_password": "確認新密碼",
|
||||
"confirmation_dialogs": "確認選項",
|
||||
"conversation_display": "對話顯示樣式",
|
||||
"conversation_display_linear": "線性樣式",
|
||||
"conversation_display_tree": "樹狀樣式",
|
||||
"conversation_other_replies_button": "顯示 “其它回覆” 按鈕",
|
||||
"conversation_other_replies_button_below": "在貼文下方",
|
||||
"conversation_other_replies_button_inside": "在貼文中",
|
||||
"current_avatar": "當前頭像",
|
||||
"current_mascot": "你當前的吉祥物",
|
||||
"current_password": "當前密碼",
|
||||
"data_import_export_tab": "數據導入/導出",
|
||||
"default_vis": "默認可見性範圍",
|
||||
|
@ -331,11 +528,17 @@
|
|||
"delete_account_description": "永久刪除你的帳號和所有數據。",
|
||||
"delete_account_error": "刪除賬戶時發生錯誤,如果一直刪除不了,請聯繫實例管理員。",
|
||||
"delete_account_instructions": "在下面輸入密碼,以確認刪除帳戶。",
|
||||
"discoverable": "允許通過搜索檢索等服務找到此賬號",
|
||||
"disable_sticky_headers": "不要把側欄的頂欄固定在屏幕的頂部",
|
||||
"discoverable": "允許通過搜索檢索等服務找到此帳號",
|
||||
"domain_mutes": "域名",
|
||||
"download_backup": "下載",
|
||||
"email_language": "從服務器收取郵件的語言",
|
||||
"emoji_reactions_on_timeline": "在時間線上顯示繪文字互動",
|
||||
"enable_web_push_notifications": "啟用 web 推送通知",
|
||||
"enter_current_password_to_confirm": "輸入你當前密碼來確認你的身份",
|
||||
"expert_mode": "顯示進階設定",
|
||||
"expire_posts_enabled": "在設定的天數後刪除帖文",
|
||||
"expire_posts_input_placeholder": "天數",
|
||||
"export_theme": "導出預置主題",
|
||||
"file_export_import": {
|
||||
"backup_restore": "設定備份",
|
||||
|
@ -344,13 +547,13 @@
|
|||
"errors": {
|
||||
"file_slightly_new": "檔案的小版本不同,有些設置可能無法載入",
|
||||
"file_too_new": "不兼容的主版本:{fileMajor},此 PleromaFE(設置版本 {feMajor})過舊,無法處理",
|
||||
"file_too_old": "不兼容的主版本:{fileMajor},文件版本過舊,不受支持(最小設置版本 {feMajor})",
|
||||
"file_too_old": "主版本不兼容:設置文件 v{fileMajor} 版本過舊,Pleroma-fe v{feMajor} 無法導入",
|
||||
"invalid_file": "所選文件不是受支持的Pleroma設置備份。 沒有進行任何更改。"
|
||||
},
|
||||
"restore_settings": "從文件還原設置"
|
||||
},
|
||||
"filtering": "過濾",
|
||||
"filtering_explanation": "所有包含以下詞彙的內容都會被隱藏,一行一個",
|
||||
"filtering_explanation": "所有包含以下詞彙的內容都會被隱藏。一行一個詞彙",
|
||||
"follow_export": "導出關注",
|
||||
"follow_export_button": "將關注導出成 csv 文件",
|
||||
"follow_import": "導入關注",
|
||||
|
@ -360,21 +563,29 @@
|
|||
"fun": "有趣",
|
||||
"general": "通用",
|
||||
"greentext": "前文箭頭",
|
||||
"hide_all_muted_posts": "不顯示已隱藏的帖子",
|
||||
"hide_all_muted_posts": "不顯示已隱藏的貼文",
|
||||
"hide_attachments_in_convo": "在對話中隱藏附件",
|
||||
"hide_attachments_in_tl": "在時間線上隱藏附件",
|
||||
"hide_filtered_statuses": "隱藏過濾的發文",
|
||||
"hide_bot_indication": "隱藏帖文中的機器人標示",
|
||||
"hide_favorites_description": "隱藏我的喜歡列表(對方仍然會收到通知)",
|
||||
"hide_filtered_statuses": "隱藏過濾了的貼文",
|
||||
"hide_followers_count_description": "不顯示關注者數量",
|
||||
"hide_followers_description": "不要顯示關注我的人",
|
||||
"hide_follows_count_description": "不顯示關注數",
|
||||
"hide_follows_description": "不要顯示我所關注的人",
|
||||
"hide_isp": "隱藏指定實例的面板",
|
||||
"hide_list_aliases_error_action": "關閉",
|
||||
"hide_media_previews": "隱藏媒體預覽",
|
||||
"hide_muted_posts": "不顯示被靜音的用戶的帖子",
|
||||
"hide_post_stats": "隱藏帖子的統計數據(例如:收藏的次數)",
|
||||
"hide_muted_posts": "不顯示被靜音的用戶的貼文",
|
||||
"hide_muted_threads": "隱藏已靜音的對話",
|
||||
"hide_post_stats": "隱藏貼文的統計數據(例如:收藏的次數)",
|
||||
"hide_shoutbox": "隱藏實例留言框",
|
||||
"hide_site_favicon": "隱藏頂部面板中的實例圖標",
|
||||
"hide_site_name": "隱藏頂部面板中的實例圖標",
|
||||
"hide_threads_with_blocked_users": "隱藏提及到被封鎖用戶的貼文",
|
||||
"hide_user_stats": "隱藏用戶的統計數據(例如:關注者的數量)",
|
||||
"hide_wallpaper": "隱藏實例桌布",
|
||||
"hide_wordfiltered_statuses": "隱藏經過詞語過濾的封鎖",
|
||||
"import_blocks_from_a_csv_file": "從 csv 文件中導入封鎖黑名單名單",
|
||||
"import_followers_from_a_csv_file": "從 csv 文件中導入關注",
|
||||
"import_mutes_from_a_csv_file": "從CSV文件導入靜音",
|
||||
|
@ -386,18 +597,31 @@
|
|||
"interfaceLanguage": "界面語言",
|
||||
"invalid_theme_imported": "您所選擇的主題文件不被 Pleroma 支持,因此主題未被修改。",
|
||||
"limited_availability": "在您的瀏覽器中無法使用",
|
||||
"links": "鏈接",
|
||||
"links": "鏈結",
|
||||
"list_aliases_error": "獲取別名時出錯:{error}",
|
||||
"list_backups_error": "獲取備份列表出錯:{error}",
|
||||
"lock_account_description": "你需要手動審核關注請求",
|
||||
"loop_video": "循環視頻",
|
||||
"loop_video_silent_only": "只循環沒有聲音的視頻(例如:Mastodon 裡的“GIF”)",
|
||||
"max_thumbnails": "最多每個帖子所能顯示的縮略圖數量",
|
||||
"mascot": "Mastodon FE 吉祥物",
|
||||
"max_depth_in_thread": "默認顯示對話中的最大層數",
|
||||
"max_thumbnails": "最多每個貼文所能顯示的縮略圖數量",
|
||||
"mention_link_bolden_you": "當你被提及時,突出顯示該提及",
|
||||
"mention_link_display": "顯示提及鏈結",
|
||||
"mention_link_display_full": "始終以全名的形式出現(例如:{'@'}foo{'@'}example.org)",
|
||||
"mention_link_display_full_for_remote": "僅遠程實例用戶以全名的形式出現(例如:{'@'}foo{'@'}example.org)",
|
||||
"mention_link_display_short": "始終以簡稱的形式出現(例如:{'@'}foo)",
|
||||
"mention_link_fade_domain": "淡化顯示域名(例如:{'@'}example.org 中的 {'@'}foo{'@'}example.org)",
|
||||
"mention_link_show_avatar": "在鏈結旁邊顯示用戶頭像",
|
||||
"mention_link_show_tooltip": "為遠程實例用戶顯示完整的用戶名(用戶名和網域)作爲 tooltip",
|
||||
"mention_links": "提及鏈結",
|
||||
"mfa": {
|
||||
"authentication_methods": "身份驗證方法",
|
||||
"confirm_and_enable": "確認並啟用OTP",
|
||||
"generate_new_recovery_codes": "生成新的恢復碼",
|
||||
"otp": "OTP",
|
||||
"recovery_codes": "恢復碼。",
|
||||
"recovery_codes_warning": "抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app,也丟失了你的恢復碼,你的賬號就再也無法登錄了。",
|
||||
"recovery_codes_warning": "抄寫這些號碼,或者保存在安全的地方。這些號碼不會再次顯示。如果你無法訪問你的 2FA app,也丟失了你的恢復碼,你的帳號就再也無法登錄了。",
|
||||
"scan": {
|
||||
"desc": "使用你的雙因素驗證 app,掃瞄這個二維碼,或者輸入這些文字密鑰:",
|
||||
"secret_code": "密鑰",
|
||||
|
@ -412,8 +636,14 @@
|
|||
"waiting_a_recovery_codes": "正在接收備份碼…",
|
||||
"warning_of_generate_new_codes": "當你生成新的恢復碼時,你的舊恢復碼就失效了。"
|
||||
},
|
||||
"minimal_scopes_mode": "最小發文範圍",
|
||||
"minimal_scopes_mode": "使發佈可見範圍的選項最少化",
|
||||
"more_settings": "更多設置",
|
||||
"move_account": "遷移帳號",
|
||||
"move_account_error": "遷移帳號時出錯:{error}",
|
||||
"move_account_notes": "如果你想把帳號遷移到別的地方,你必須前去你的目標帳號然後添加一個指向此處的別名。",
|
||||
"move_account_target": "目標帳號(例如 {example})",
|
||||
"moved_account": "帳號已遷移。",
|
||||
"mute_bot_posts": "靜音機器人的帖文",
|
||||
"mute_export": "靜音導出",
|
||||
"mute_export_button": "將靜音導出到csv文件",
|
||||
"mute_import": "靜音導入",
|
||||
|
@ -423,6 +653,7 @@
|
|||
"mutes_tab": "靜音",
|
||||
"name": "名字",
|
||||
"name_bio": "名字及簡介",
|
||||
"new_alias_target": "添加一個新別名(例如 {example})",
|
||||
"new_email": "新電郵",
|
||||
"new_password": "新密碼",
|
||||
"no_blocks": "沒有封鎖",
|
||||
|
@ -430,8 +661,9 @@
|
|||
"no_rich_text_description": "不顯示富文本格式",
|
||||
"notification_blocks": "封鎖一個用戶會停掉所有他的通知,等同於取消關注。",
|
||||
"notification_mutes": "要停止收到某個指定的用戶的通知,請使用靜音功能。",
|
||||
"notification_setting_block_from_strangers": "屏蔽來自你沒有關注的用戶的通知",
|
||||
"notification_setting_block_from_strangers": "封鎖來自你沒有關注的用戶的通知",
|
||||
"notification_setting_filters": "過濾器",
|
||||
"notification_setting_hide_if_cw": "如果帖文包含內容警告,隱藏推送通知",
|
||||
"notification_setting_hide_notification_contents": "隱藏推送通知中的發送者與內容信息",
|
||||
"notification_setting_privacy": "隱私",
|
||||
"notification_visibility": "要顯示的通知類型",
|
||||
|
@ -440,15 +672,19 @@
|
|||
"notification_visibility_likes": "喜歡",
|
||||
"notification_visibility_mentions": "提及",
|
||||
"notification_visibility_moves": "用戶遷移",
|
||||
"notification_visibility_polls": "你所投的投票的結束於",
|
||||
"notification_visibility_repeats": "轉發",
|
||||
"notifications": "通知",
|
||||
"nsfw_clickthrough": "將敏感附件和鏈接隱藏,點擊才能打開",
|
||||
"nsfw_clickthrough": "將敏感附件和鏈結隱藏,點擊才能打開",
|
||||
"oauth_tokens": "OAuth代幣",
|
||||
"pad_emoji": "從繪文字選擇器插入繪文字時,在繪文字兩側插入空格",
|
||||
"panelRadius": "面板",
|
||||
"pause_on_unfocused": "在離開頁面時暫停時間線推送",
|
||||
"permit_followback_description": "自動批准已關注用戶的關注請求",
|
||||
"play_videos_in_modal": "在彈出框內播放視頻",
|
||||
"post_status_content_type": "發文內容類型",
|
||||
"post_look_feel": "貼文的外觀",
|
||||
"post_status_content_type": "默認貼文內容類型",
|
||||
"posts": "貼文",
|
||||
"preload_images": "預載圖片",
|
||||
"presets": "預置",
|
||||
"profile_background": "配置文件背景圖",
|
||||
|
@ -462,6 +698,10 @@
|
|||
"profile_tab": "個人資料",
|
||||
"radii_help": "設置界面邊緣的圓角 (單位:像素)",
|
||||
"refresh_token": "刷新token",
|
||||
"remove_alias": "移除此别名",
|
||||
"remove_backup": "移除",
|
||||
"render_mfm": "渲染 Misskey Markdown",
|
||||
"render_mfm_on_hover": "停止播放 MFM 動畫,除了在滑鼠懸停於帖文時",
|
||||
"replies_in_timeline": "時間線中的回覆",
|
||||
"reply_visibility_all": "顯示所有回覆",
|
||||
"reply_visibility_following": "只顯示發送給我的回覆/發送給我關注的用戶的回覆",
|
||||
|
@ -475,23 +715,45 @@
|
|||
"reset_profile_background": "重置個人資料背景圖",
|
||||
"reset_profile_banner": "重置橫幅圖片",
|
||||
"revoke_token": "撤消",
|
||||
"right_sidebar": "在右側顯示側邊欄",
|
||||
"right_sidebar": "在右側顯示側欄",
|
||||
"save": "保存更改",
|
||||
"saving_err": "保存設置時發生錯誤",
|
||||
"saving_ok": "設置已保存",
|
||||
"scope_copy": "回覆時的複製範圍(私信是總是複製的)",
|
||||
"search_user_to_block": "搜索你想屏蔽的用戶",
|
||||
"search_user_to_block": "搜索你想封鎖的用戶",
|
||||
"search_user_to_mute": "搜索你想要隱藏的用戶",
|
||||
"security": "安全",
|
||||
"security_tab": "安全",
|
||||
"sensitive_by_default": "默認標記發文為敏感內容",
|
||||
"sensitive_by_default": "默認標記貼文為敏感內容",
|
||||
"sensitive_if_subject": "如果內容警告已指定,自動將圖像標記爲敏感內容",
|
||||
"set_new_avatar": "設置新頭像",
|
||||
"set_new_mascot": "設置新吉祥物",
|
||||
"set_new_profile_background": "設置新的個人背景",
|
||||
"set_new_profile_banner": "設置新的個人橫幅",
|
||||
"setting_changed": "與默認設置不同",
|
||||
"setting_server_side": "這個設置是捆綁到你的個人資料的,會反映於所有會話和用戶端",
|
||||
"settings": "設置",
|
||||
"settings_profile": "設置配置文件",
|
||||
"settings_profile_creation": "創建新的配置文件",
|
||||
"settings_profile_creation_new_name_label": "名稱",
|
||||
"settings_profile_creation_submit": "創建",
|
||||
"settings_profile_currently": "目前使用 {name}(版本:{version})",
|
||||
"settings_profile_delete": "删除",
|
||||
"settings_profile_delete_confirm": "你確定要刪除此配置文件嗎?",
|
||||
"settings_profile_force_sync": "同步",
|
||||
"settings_profile_in_use": "使用中",
|
||||
"settings_profile_use": "使用",
|
||||
"settings_profiles_refresh": "重新載入設置配置文件",
|
||||
"settings_profiles_show": "顯示所有設置配置文件",
|
||||
"settings_profiles_unshow": "隱藏所有設置配置文件",
|
||||
"show_admin_badge": "顯示管理徽章",
|
||||
"show_moderator_badge": "顯示主持人徽章",
|
||||
"show_nav_shortcuts": "在頂部面板中顯示額外的導航快捷鍵",
|
||||
"show_page_backgrounds": "顯示特定頁面專用的背景,例如用戶自定義的背景",
|
||||
"show_panel_nav_shortcuts": "在面板頂部顯示時間線導航快捷鍵",
|
||||
"show_scrollbars": "顯示側欄的捲軸",
|
||||
"show_wider_shortcuts": "在頂部面板快捷鍵之間顯示更寬的間隙",
|
||||
"show_yous": "被提及時在貼文顯示「(你)」",
|
||||
"stop_gifs": "鼠標懸停時播放GIF",
|
||||
"streaming": "開啟滾動到頂部時的自動推送",
|
||||
"style": {
|
||||
|
@ -518,10 +780,10 @@
|
|||
"panel_header": "面板標題",
|
||||
"poll": "投票統計圖",
|
||||
"popover": "提示框,菜單,彈出框",
|
||||
"post": "帖子/用戶簡介",
|
||||
"post": "貼文/用戶簡介",
|
||||
"pressed": "按下",
|
||||
"selectedMenu": "選中的菜單項",
|
||||
"selectedPost": "選中的帖子",
|
||||
"selectedPost": "選中的貼文",
|
||||
"tabs": "標籤",
|
||||
"toggled": "切換",
|
||||
"top_bar": "頂欄",
|
||||
|
@ -555,8 +817,8 @@
|
|||
"components": {
|
||||
"input": "輸入框",
|
||||
"interface": "界面",
|
||||
"post": "發帖文字",
|
||||
"postCode": "帖子中使用等間距文字(富文本)"
|
||||
"post": "貼文文字",
|
||||
"postCode": "貼文中使用等間距文字(富文本)"
|
||||
},
|
||||
"custom": "自選",
|
||||
"family": "字體名稱",
|
||||
|
@ -574,7 +836,7 @@
|
|||
"header": "預覽",
|
||||
"header_faint": "這很正常",
|
||||
"input": "剛剛抵達洛杉磯.",
|
||||
"link": "一個很好的小鏈接",
|
||||
"link": "一個很好的小鏈結",
|
||||
"mono": "內容",
|
||||
"text": "有堆 {0} 和 {1}"
|
||||
},
|
||||
|
@ -587,7 +849,7 @@
|
|||
"component": "組件",
|
||||
"components": {
|
||||
"avatar": "用戶頭像(在個人資料欄)",
|
||||
"avatarStatus": "用戶頭像(在帖子顯示欄)",
|
||||
"avatarStatus": "用戶頭像(在貼文顯示欄)",
|
||||
"button": "按鈕",
|
||||
"buttonHover": "按鈕(懸停)",
|
||||
"buttonPressed": "按鈕(按下)",
|
||||
|
@ -640,9 +902,9 @@
|
|||
"use_source": "新版本"
|
||||
}
|
||||
},
|
||||
"subject_input_always_show": "總是顯示主題框",
|
||||
"subject_line_behavior": "回覆時複製主題",
|
||||
"subject_line_email": "比如電郵: \"re: 主題\"",
|
||||
"subject_input_always_show": "總是顯示內容警告框",
|
||||
"subject_line_behavior": "回覆時複製內容警告",
|
||||
"subject_line_email": "類似電子郵件:\"re: 警告\"",
|
||||
"subject_line_mastodon": "比如mastodon: copy as is",
|
||||
"subject_line_noop": "不要複製",
|
||||
"text": "文本",
|
||||
|
@ -650,15 +912,29 @@
|
|||
"theme_help": "使用十六進制代碼(#rrggbb)來設置主題顏色。",
|
||||
"theme_help_v2_1": "你也可以通過切換複選框來覆蓋某些組件的顏色和透明。使用“清除所有”來清楚所有覆蓋設置。",
|
||||
"theme_help_v2_2": "某些條目下的圖標是背景或文本對比指示器,鼠標懸停可以獲取詳細信息。請記住,使用透明度來顯示最差的情況。",
|
||||
"third_column_mode": "當有足夠的空間時,顯示第三欄包含",
|
||||
"third_column_mode_none": "不要顯示第三欄",
|
||||
"third_column_mode_notifications": "通知欄",
|
||||
"third_column_mode_postform": "主要投稿窗口和導覽",
|
||||
"token": "代幣",
|
||||
"tooltipRadius": "提醒",
|
||||
"translation_language": "自動翻譯語言",
|
||||
"tree_advanced": "顯示用來打開和關閉對話中的回覆鏈的按鈕",
|
||||
"tree_fade_ancestors": "以淡色文字顯示當前貼文的上文",
|
||||
"type_domains_to_mute": "搜索需要隱藏的域名",
|
||||
"upload_a_photo": "上傳照片",
|
||||
"useStreamingApi": "實時接收發佈以及通知",
|
||||
"useStreamingApiWarning": "(不推薦使用,實驗性的,已知跳過文章)",
|
||||
"use_blurhash": "對 NSFW 的縮略圖使用模糊處理",
|
||||
"use_contain_fit": "生成縮略圖時不要裁剪附件",
|
||||
"use_one_click_nsfw": "點擊一次以打開工作場所不適宜的附件",
|
||||
"user_accepts_direct_messages_from": "允許私信自",
|
||||
"user_accepts_direct_messages_from_everybody": "所有人",
|
||||
"user_accepts_direct_messages_from_nobody": "沒有人",
|
||||
"user_accepts_direct_messages_from_people_i_follow": "我關注的人",
|
||||
"user_mutes": "用户",
|
||||
"user_profile_default_tab": "用戶資料中的默認頁面",
|
||||
"user_profiles": "用戶資料",
|
||||
"user_settings": "用戶設置",
|
||||
"valid_until": "有效期至",
|
||||
"values": {
|
||||
|
@ -671,38 +947,90 @@
|
|||
"title": "版本"
|
||||
},
|
||||
"virtual_scrolling": "優化時間線渲染",
|
||||
"word_filter": "詞過濾"
|
||||
"word_filter": "詞過濾",
|
||||
"wordfilter": "詞語過濾器"
|
||||
},
|
||||
"settings_profile": {
|
||||
"creating": "正在創建新的設置配置文件 \"{profile}\" 中...",
|
||||
"synchronization_error": "無法同步設置:{err}",
|
||||
"synchronized": "設置已同步!",
|
||||
"synchronizing": "正在同步新的設置配置文件 \"{profile}\" 中..."
|
||||
},
|
||||
"status": {
|
||||
"ancestor_follow": "查看此貼文下其它 {numReplies} 條回覆",
|
||||
"ancestor_follow_with_icon": "{icon} {text}",
|
||||
"attachment_stop_flash": "停止 Flash 播放器",
|
||||
"bookmark": "書籤",
|
||||
"copy_link": "複製發文鏈接",
|
||||
"delete": "刪除發文",
|
||||
"delete_confirm": "你真的想要刪除這條發文嗎?",
|
||||
"collapse_attachments": "折起附件",
|
||||
"copy_link": "複製貼文鏈結",
|
||||
"delete": "刪除貼文",
|
||||
"delete_confirm": "你真的想要刪除這則貼文嗎?",
|
||||
"delete_confirm_accept_button": "是,删除它",
|
||||
"delete_confirm_cancel_button": "否,保留它",
|
||||
"delete_confirm_title": "確認刪除",
|
||||
"edit": "編輯",
|
||||
"edit_history": "編輯歷史",
|
||||
"edit_history_modal_title": "已編輯 {historyCount} 次",
|
||||
"edited_at": "編輯於 {time}",
|
||||
"expand": "展开",
|
||||
"external_source": "外部來源",
|
||||
"favorites": "喜歡",
|
||||
"hide_attachment": "隱藏附件",
|
||||
"hide_content": "隱藏內容",
|
||||
"hide_full_subject": "隱藏完整標題",
|
||||
"hide_full_subject": "隱藏全部內容警告",
|
||||
"many_attachments": "貼文有 {number} 個附件",
|
||||
"mentions": "提及",
|
||||
"move_down": "把附件右移",
|
||||
"move_up": "把附件左移",
|
||||
"mute_conversation": "靜音對話",
|
||||
"nsfw": "工作不安全",
|
||||
"open_gallery": "打開圖庫",
|
||||
"override_translation_source_language": "覆蓋源語言",
|
||||
"pin": "在個人資料置頂",
|
||||
"pinned": "置頂",
|
||||
"plus_more": "還有 {number} 個",
|
||||
"redraft": "刪除並編緝",
|
||||
"redraft_confirm": "你確定要刪除並編緝此帖文嗎?與原帖文的互動將不會被保留。",
|
||||
"redraft_confirm_accept_button": "是,刪除並編緝",
|
||||
"redraft_confirm_cancel_button": "否,保持原樣",
|
||||
"redraft_confirm_title": "確認刪除並編緝",
|
||||
"remove_attachment": "移除附件",
|
||||
"repeat_confirm": "你確定要轉發此貼文嗎?",
|
||||
"repeat_confirm_accept_button": "是,轉發它",
|
||||
"repeat_confirm_cancel_button": "否,不要轉發",
|
||||
"repeat_confirm_title": "確認轉發",
|
||||
"repeats": "轉發",
|
||||
"replies_list": "回覆:",
|
||||
"replies_list_with_others": "查看 {numReplies} 條回復",
|
||||
"reply_to": "回覆",
|
||||
"show_all_attachments": "顯示所有附件",
|
||||
"show_all_conversation": "顯示全部對話(還有其它 {numStatus} 條貼文)",
|
||||
"show_all_conversation_with_icon": "{icon} {text}",
|
||||
"show_attachment_description": "預覽描述(打開附件能看完整描述)",
|
||||
"show_attachment_in_modal": "在窗口中顯示附件",
|
||||
"show_content": "顯示內容",
|
||||
"show_full_subject": "顯示完整標題",
|
||||
"show_full_subject": "顯示完整内容警告",
|
||||
"show_only_conversation_under_this": "僅顯示此帖文的回覆",
|
||||
"status_deleted": "該帖已被刪除",
|
||||
"status_unavailable": "發文不可取得",
|
||||
"status_unavailable": "貼文已不可用",
|
||||
"thread_follow": "查看 {numStatus} 條更多回復",
|
||||
"thread_follow_with_icon": "{icon} {text}",
|
||||
"thread_hide": "隱藏此對話",
|
||||
"thread_muted": "静音線程",
|
||||
"thread_muted_and_words": ",有这些字:",
|
||||
"thread_show": "顯示這個對話",
|
||||
"thread_show_full": "顯示 {numStatus} 條回覆 | 顯示全部 {numStatus} 條回覆",
|
||||
"thread_show_full_with_icon": "{icon} {text}",
|
||||
"translate": "翻譯",
|
||||
"translated_from": "翻譯自 {language}",
|
||||
"unbookmark": "取消書籤",
|
||||
"unmute_conversation": "對話取消靜音",
|
||||
"unpin": "取消在個人資料置頂"
|
||||
"unpin": "取消在個人資料置頂",
|
||||
"you": "(你)"
|
||||
},
|
||||
"time": {
|
||||
"in_future": "還有 {0}",
|
||||
"in_past": "{0} 之前",
|
||||
"in_past": "{0}前",
|
||||
"now": "剛剛",
|
||||
"now_short": "剛剛",
|
||||
"unit": {
|
||||
|
@ -726,23 +1054,29 @@
|
|||
"collapse": "摺疊",
|
||||
"conversation": "對話",
|
||||
"error": "取得時間線時發生錯誤:{0}",
|
||||
"load_older": "載入更早的發文",
|
||||
"no_more_statuses": "没有更多發文",
|
||||
"follow_tag": "關注話題標籤",
|
||||
"load_older": "載入更早的貼文",
|
||||
"no_more_statuses": "没有更多貼文",
|
||||
"no_retweet_hint": "這條內容僅關注者可見,或者是私信,因此不能轉發",
|
||||
"no_statuses": "没有發文",
|
||||
"no_statuses": "没有貼文",
|
||||
"reload": "重新載入",
|
||||
"repeated": "已轉發",
|
||||
"show_new": "顯示新內容",
|
||||
"socket_broke": "丟失實時連接:CloseEvent代碼{0}",
|
||||
"socket_reconnected": "已建立實時連接",
|
||||
"unfollow_tag": "取消關注話題標籤",
|
||||
"up_to_date": "已是最新"
|
||||
},
|
||||
"toast": {
|
||||
"no_translation_target_set": "沒有設置翻譯目標語言 - 這可能會失敗。請在你的設置中設置目標語言。"
|
||||
},
|
||||
"tool_tip": {
|
||||
"accept_follow_request": "接受關注請求",
|
||||
"add_reaction": "添加互動",
|
||||
"bookmark": "書籤",
|
||||
"favorite": "喜歡",
|
||||
"media_upload": "上傳多媒體",
|
||||
"quote": "引用",
|
||||
"reject_follow_request": "拒絕關注請求",
|
||||
"repeat": "轉發",
|
||||
"reply": "回覆",
|
||||
|
@ -765,35 +1099,55 @@
|
|||
},
|
||||
"user_card": {
|
||||
"admin_menu": {
|
||||
"activate_account": "啟用賬號",
|
||||
"deactivate_account": "關閉賬號",
|
||||
"delete_account": "刪除賬號",
|
||||
"activate_account": "啟用帳號",
|
||||
"deactivate_account": "停用帳號",
|
||||
"delete_account": "刪除帳號",
|
||||
"delete_user": "刪除用戶",
|
||||
"delete_user_data_and_deactivate_confirmation": "這將永久刪除該帳號的數據並停用該帳號。你完全確定嗎?",
|
||||
"disable_any_subscription": "完全禁止關注用戶",
|
||||
"disable_remote_subscription": "禁止從遠程實例關注用戶",
|
||||
"force_nsfw": "標記所有的帖子都是工作場合不適",
|
||||
"force_unlisted": "強制帖子為不公開",
|
||||
"force_nsfw": "標記所有的貼文為工作場合不適(NSFW)",
|
||||
"force_unlisted": "強制使貼文為不公開",
|
||||
"grant_admin": "賦予管理權限",
|
||||
"grant_moderator": "賦予主持人權限",
|
||||
"moderation": "調停",
|
||||
"quarantine": "從聯合實例中禁止用戶帖子",
|
||||
"quarantine": "從聯合實例中禁止用戶貼文",
|
||||
"revoke_admin": "撤銷管理權限",
|
||||
"revoke_moderator": "撤銷主持人權限",
|
||||
"sandbox": "強制帖子為只有關注者可看",
|
||||
"strip_media": "從帖子裡刪除媒體文件"
|
||||
"sandbox": "強制貼文為只有關注者可看",
|
||||
"strip_media": "從貼文裡刪除媒體文件"
|
||||
},
|
||||
"approve": "批准",
|
||||
"approve_confirm": "你確定要讓此用戶關注你嗎?",
|
||||
"approve_confirm_accept_button": "是,接受",
|
||||
"approve_confirm_cancel_button": "否,取消",
|
||||
"approve_confirm_title": "通過關注請求",
|
||||
"block": "封鎖",
|
||||
"block_confirm": "你確定要封鎖 {user} 嗎?",
|
||||
"block_confirm_accept_button": "是,封鎖",
|
||||
"block_confirm_cancel_button": "否,不要封鎖",
|
||||
"block_confirm_title": "封鎖用戶",
|
||||
"block_progress": "封鎖中…",
|
||||
"blocked": "已封鎖!",
|
||||
"blocks_you": "封鎖了你!",
|
||||
"bot": "機器人",
|
||||
"deactivated": "已停用",
|
||||
"deny": "拒絕",
|
||||
"deny_confirm": "你確定要拒絕此用戶的關注請求嗎?",
|
||||
"deny_confirm_accept_button": "是,拒絕",
|
||||
"deny_confirm_cancel_button": "否,取消",
|
||||
"deny_confirm_title": "拒絕關注請求",
|
||||
"domain_muted": "取消封鎖域名",
|
||||
"edit_profile": "編輯個人資料",
|
||||
"favorites": "喜歡",
|
||||
"follow": "關注",
|
||||
"follow_cancel": "取消請求",
|
||||
"follow_progress": "請求中…",
|
||||
"follow_sent": "請求已發送!",
|
||||
"follow_tag": "關注話題標籤",
|
||||
"follow_unfollow": "取消關注",
|
||||
"followed_tags": "已關注的話題標籤",
|
||||
"followed_users": "已關注用戶",
|
||||
"followees": "正在關注",
|
||||
"followers": "關注者",
|
||||
"following": "正在關注!",
|
||||
|
@ -811,21 +1165,37 @@
|
|||
"mention": "提及",
|
||||
"message": "消息",
|
||||
"mute": "靜音",
|
||||
"mute_confirm": "你確定要靜音 {user} 嗎?",
|
||||
"mute_confirm_accept_button": "是,靜音",
|
||||
"mute_confirm_cancel_button": "否,不要靜音",
|
||||
"mute_confirm_title": "靜音用戶",
|
||||
"mute_domain": "封鎖域名",
|
||||
"mute_progress": "靜音中…",
|
||||
"muted": "已靜音",
|
||||
"not_following_any_hashtags": "你沒有關注任何話題標籤",
|
||||
"note": "私人備注",
|
||||
"per_day": "每天",
|
||||
"remote_follow": "跨站關注",
|
||||
"remove_follower": "移除關注者",
|
||||
"replies": "貼文和回覆",
|
||||
"report": "報告",
|
||||
"requested_by": "已請求關注你",
|
||||
"show_repeats": "顯示轉發",
|
||||
"statuses": "發文",
|
||||
"statuses": "貼文",
|
||||
"subscribe": "訂閱",
|
||||
"unblock": "取消封鎖",
|
||||
"unblock_progress": "取消封鎖中…",
|
||||
"unfollow_confirm": "你確定要取消關注 {user} 嗎?",
|
||||
"unfollow_confirm_accept_button": "是,取消關注",
|
||||
"unfollow_confirm_cancel_button": "否,不要取消關注",
|
||||
"unfollow_confirm_title": "取消關注用戶",
|
||||
"unfollow_tag": "取消關注話題標籤",
|
||||
"unmute": "取消靜音",
|
||||
"unmute_progress": "取消靜音中…",
|
||||
"unsubscribe": "退訂"
|
||||
},
|
||||
"user_profile": {
|
||||
"field_validated": "鏈結已驗證",
|
||||
"profile_does_not_exist": "抱歉,此個人資料不存在。",
|
||||
"profile_loading_error": "抱歉,載入個人資料時出錯。",
|
||||
"timeline_title": "用戶時間線"
|
||||
|
@ -833,7 +1203,7 @@
|
|||
"user_reporting": {
|
||||
"add_comment_description": "此報告會發送給你的實例管理員。你可以在下面提供更多詳細信息解釋報告的緣由:",
|
||||
"additional_comments": "其它評論",
|
||||
"forward_description": "這個賬號是從另外一個服務器。同時發送一個報告到那裡?",
|
||||
"forward_description": "這個帳號是來由另外一個伺服器。需要同時發送一個報告到那裡嗎?",
|
||||
"forward_to": "轉發 {0}",
|
||||
"generic_error": "當處理你的請求時,發生了一個錯誤。",
|
||||
"submit": "提交",
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import EventTargetPolyfill from '@ungap/event-target'
|
||||
|
||||
try {
|
||||
/* eslint-disable no-new */
|
||||
|
||||
new EventTarget()
|
||||
/* eslint-enable no-new */
|
||||
|
||||
} catch (e) {
|
||||
window.EventTarget = EventTargetPolyfill
|
||||
}
|
||||
|
|
16
src/lib/post_language.js
Normal file
16
src/lib/post_language.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
import iso6391 from 'iso-639-1'
|
||||
import { computed } from 'vue'
|
||||
|
||||
export const usePostLanguageOptions = () => {
|
||||
const postLanguageOptions = computed(() => {
|
||||
return iso6391.getAllCodes().map(lang => ({
|
||||
key: lang,
|
||||
value: lang,
|
||||
label: lang,
|
||||
}));
|
||||
})
|
||||
|
||||
return {
|
||||
postLanguageOptions,
|
||||
}
|
||||
}
|
|
@ -114,7 +114,7 @@ const persistedStateOptions = {
|
|||
})()
|
||||
|
||||
// These are inlined by webpack's DefinePlugin
|
||||
/* eslint-disable */
|
||||
|
||||
window.___pleromafe_mode = process.env
|
||||
window.___pleromafe_commit_hash = COMMIT_HASH
|
||||
window.___pleromafe_dev_overrides = DEV_OVERRIDES
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
|
||||
import { WSConnectionStatus } from '../services/api/api.service.js'
|
||||
import { map } from 'lodash'
|
||||
import backendInteractorService from "../services/backend_interactor_service/backend_interactor_service.js";
|
||||
import { WSConnectionStatus } from "../services/api/api.service.js";
|
||||
import { map } from "lodash";
|
||||
|
||||
const retryTimeout = (multiplier) => 1000 * multiplier
|
||||
const retryTimeout = (multiplier) => 1000 * multiplier;
|
||||
|
||||
const isVisible = (store, message, visibility) => {
|
||||
if (visibility == 'all') {
|
||||
return true
|
||||
if (visibility == "all") {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (visibility == 'following') {
|
||||
if (visibility == "following") {
|
||||
if (message.in_reply_to_user_id === null) {
|
||||
return true
|
||||
return true;
|
||||
} else {
|
||||
return store.getters.relationship(message.in_reply_to_user_id).following
|
||||
return store.getters.relationship(message.in_reply_to_user_id).following;
|
||||
}
|
||||
}
|
||||
|
||||
if (visibility == 'self') {
|
||||
return message.in_reply_to_user_id === store.rootState.users.currentUser.id
|
||||
if (visibility == "self") {
|
||||
return message.in_reply_to_user_id === store.rootState.users.currentUser.id;
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
const api = {
|
||||
state: {
|
||||
|
@ -32,43 +32,43 @@ const api = {
|
|||
socket: null,
|
||||
mastoUserSocket: null,
|
||||
mastoUserSocketStatus: null,
|
||||
followRequests: []
|
||||
followRequests: [],
|
||||
},
|
||||
mutations: {
|
||||
setBackendInteractor(state, backendInteractor) {
|
||||
state.backendInteractor = backendInteractor
|
||||
state.backendInteractor = backendInteractor;
|
||||
},
|
||||
addFetcher(state, { fetcherName, fetcher }) {
|
||||
state.fetchers[fetcherName] = fetcher
|
||||
state.fetchers[fetcherName] = fetcher;
|
||||
},
|
||||
removeFetcher(state, { fetcherName, fetcher }) {
|
||||
state.fetchers[fetcherName].stop()
|
||||
delete state.fetchers[fetcherName]
|
||||
state.fetchers[fetcherName].stop();
|
||||
delete state.fetchers[fetcherName];
|
||||
},
|
||||
setWsToken(state, token) {
|
||||
state.wsToken = token
|
||||
state.wsToken = token;
|
||||
},
|
||||
setSocket(state, socket) {
|
||||
state.socket = socket
|
||||
state.socket = socket;
|
||||
},
|
||||
setMastoUserSocketStatus(state, value) {
|
||||
state.mastoUserSocketStatus = value
|
||||
state.mastoUserSocketStatus = value;
|
||||
},
|
||||
incrementRetryMultiplier(state) {
|
||||
state.retryMultiplier = Math.max(++state.retryMultiplier, 3)
|
||||
state.retryMultiplier = Math.max(++state.retryMultiplier, 3);
|
||||
},
|
||||
resetRetryMultiplier(state) {
|
||||
state.retryMultiplier = 1
|
||||
state.retryMultiplier = 1;
|
||||
},
|
||||
setFollowRequests(state, value) {
|
||||
state.followRequests = [...value]
|
||||
state.followRequests = [...value];
|
||||
},
|
||||
saveFollowRequests(state, requests) {
|
||||
state.followRequests = [...state.followRequests, ...requests]
|
||||
state.followRequests = [...state.followRequests, ...requests];
|
||||
},
|
||||
saveFollowRequestPagination(state, pagination) {
|
||||
state.followRequestsPagination = pagination
|
||||
}
|
||||
state.followRequestsPagination = pagination;
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
/**
|
||||
|
@ -77,259 +77,305 @@ const api = {
|
|||
* @param {Boolean} [initial] - whether this enabling happened at boot time or not
|
||||
*/
|
||||
enableMastoSockets(store, initial) {
|
||||
const { state, dispatch, commit } = store
|
||||
const { state, dispatch, commit } = store;
|
||||
// Do not initialize unless nonexistent or closed
|
||||
if (
|
||||
state.mastoUserSocket &&
|
||||
![
|
||||
WebSocket.CLOSED,
|
||||
WebSocket.CLOSING
|
||||
].includes(state.mastoUserSocket.getState())
|
||||
![WebSocket.CLOSED, WebSocket.CLOSING].includes(
|
||||
state.mastoUserSocket.getState(),
|
||||
)
|
||||
) {
|
||||
return
|
||||
return;
|
||||
}
|
||||
if (initial) {
|
||||
commit('setMastoUserSocketStatus', WSConnectionStatus.STARTING_INITIAL)
|
||||
commit("setMastoUserSocketStatus", WSConnectionStatus.STARTING_INITIAL);
|
||||
} else {
|
||||
commit('setMastoUserSocketStatus', WSConnectionStatus.STARTING)
|
||||
commit("setMastoUserSocketStatus", WSConnectionStatus.STARTING);
|
||||
}
|
||||
return dispatch('startMastoUserSocket')
|
||||
return dispatch("startMastoUserSocket");
|
||||
},
|
||||
disableMastoSockets(store) {
|
||||
const { state, dispatch, commit } = store
|
||||
if (!state.mastoUserSocket) return
|
||||
commit('setMastoUserSocketStatus', WSConnectionStatus.DISABLED)
|
||||
return dispatch('stopMastoUserSocket')
|
||||
const { state, dispatch, commit } = store;
|
||||
if (!state.mastoUserSocket) return;
|
||||
commit("setMastoUserSocketStatus", WSConnectionStatus.DISABLED);
|
||||
return dispatch("stopMastoUserSocket");
|
||||
},
|
||||
|
||||
// MastoAPI 'User' sockets
|
||||
startMastoUserSocket(store) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const { state, commit, dispatch, rootState } = store
|
||||
const timelineData = rootState.statuses.timelines.friends
|
||||
state.mastoUserSocket = state.backendInteractor.startUserSocket({ store })
|
||||
const { state, commit, dispatch, rootState } = store;
|
||||
const timelineData = rootState.statuses.timelines.friends;
|
||||
state.mastoUserSocket = state.backendInteractor.startUserSocket({
|
||||
store,
|
||||
});
|
||||
state.mastoUserSocket.addEventListener(
|
||||
'message',
|
||||
"message",
|
||||
({ detail: message }) => {
|
||||
const replyVisibility = rootState.config.replyVisibility
|
||||
if (!message) return // pings
|
||||
if (message.event === 'notification') {
|
||||
dispatch('addNewNotifications', {
|
||||
const replyVisibility = rootState.config.replyVisibility;
|
||||
if (!message) return; // pings
|
||||
if (message.event === "notification") {
|
||||
dispatch("addNewNotifications", {
|
||||
notifications: [message.notification],
|
||||
older: false
|
||||
})
|
||||
} else if (message.event === 'update' && isVisible(store, message.status, replyVisibility)) {
|
||||
dispatch('addNewStatuses', {
|
||||
older: false,
|
||||
});
|
||||
} else if (
|
||||
message.event === "update" &&
|
||||
isVisible(store, message.status, replyVisibility)
|
||||
) {
|
||||
dispatch("addNewStatuses", {
|
||||
statuses: [message.status],
|
||||
userId: false,
|
||||
showImmediately: timelineData.visibleStatuses.length === 0,
|
||||
timeline: 'friends'
|
||||
})
|
||||
} else if (message.event === 'status.update' && isVisible(store, message.status, replyVisibility)) {
|
||||
dispatch('addNewStatuses', {
|
||||
timeline: "friends",
|
||||
});
|
||||
} else if (
|
||||
message.event === "status.update" &&
|
||||
isVisible(store, message.status, replyVisibility)
|
||||
) {
|
||||
dispatch("addNewStatuses", {
|
||||
statuses: [message.status],
|
||||
userId: false,
|
||||
showImmediately: message.status.id in timelineData.visibleStatusesObject,
|
||||
timeline: 'friends'
|
||||
})
|
||||
} else if (message.event === 'delete') {
|
||||
dispatch('deleteStatusById', message.id)
|
||||
showImmediately:
|
||||
message.status.id in timelineData.visibleStatusesObject,
|
||||
timeline: "friends",
|
||||
});
|
||||
} else if (message.event === "delete") {
|
||||
dispatch("deleteStatusById", message.id);
|
||||
}
|
||||
}
|
||||
)
|
||||
state.mastoUserSocket.addEventListener('open', () => {
|
||||
},
|
||||
);
|
||||
state.mastoUserSocket.addEventListener("open", () => {
|
||||
// Do not show notification when we just opened up the page
|
||||
if (state.mastoUserSocketStatus !== WSConnectionStatus.STARTING_INITIAL) {
|
||||
dispatch('pushGlobalNotice', {
|
||||
level: 'success',
|
||||
messageKey: 'timeline.socket_reconnected',
|
||||
timeout: 5000
|
||||
})
|
||||
if (
|
||||
state.mastoUserSocketStatus !==
|
||||
WSConnectionStatus.STARTING_INITIAL
|
||||
) {
|
||||
dispatch("pushGlobalNotice", {
|
||||
level: "success",
|
||||
messageKey: "timeline.socket_reconnected",
|
||||
timeout: 5000,
|
||||
});
|
||||
}
|
||||
// Stop polling if we were errored or disabled
|
||||
if (new Set([
|
||||
if (
|
||||
new Set([
|
||||
WSConnectionStatus.ERROR,
|
||||
WSConnectionStatus.DISABLED
|
||||
]).has(state.mastoUserSocketStatus)) {
|
||||
dispatch('stopFetchingTimeline', { timeline: 'friends' })
|
||||
dispatch('stopFetchingNotifications')
|
||||
WSConnectionStatus.DISABLED,
|
||||
]).has(state.mastoUserSocketStatus)
|
||||
) {
|
||||
dispatch("stopFetchingTimeline", { timeline: "friends" });
|
||||
dispatch("stopFetchingNotifications");
|
||||
}
|
||||
commit('resetRetryMultiplier')
|
||||
commit('setMastoUserSocketStatus', WSConnectionStatus.JOINED)
|
||||
})
|
||||
state.mastoUserSocket.addEventListener('error', ({ detail: error }) => {
|
||||
console.error('Error in MastoAPI websocket:', error)
|
||||
})
|
||||
state.mastoUserSocket.addEventListener('close', ({ detail: closeEvent }) => {
|
||||
commit("resetRetryMultiplier");
|
||||
commit("setMastoUserSocketStatus", WSConnectionStatus.JOINED);
|
||||
});
|
||||
state.mastoUserSocket.addEventListener(
|
||||
"error",
|
||||
({ detail: error }) => {
|
||||
console.error("Error in MastoAPI websocket:", error);
|
||||
},
|
||||
);
|
||||
state.mastoUserSocket.addEventListener(
|
||||
"close",
|
||||
({ detail: closeEvent }) => {
|
||||
const ignoreCodes = new Set([
|
||||
1000, // Normal (intended) closure
|
||||
1001 // Going away
|
||||
])
|
||||
const { code } = closeEvent
|
||||
1001, // Going away
|
||||
]);
|
||||
const { code } = closeEvent;
|
||||
if (ignoreCodes.has(code)) {
|
||||
console.debug(`Not restarting socket becasue of closure code ${code} is in ignore list`)
|
||||
commit('setMastoUserSocketStatus', WSConnectionStatus.CLOSED)
|
||||
console.debug(
|
||||
`Not restarting socket becasue of closure code ${code} is in ignore list`,
|
||||
);
|
||||
commit("setMastoUserSocketStatus", WSConnectionStatus.CLOSED);
|
||||
} else {
|
||||
console.warn(`MastoAPI websocket disconnected, restarting. CloseEvent code: ${code}`)
|
||||
console.warn(
|
||||
`MastoAPI websocket disconnected, restarting. CloseEvent code: ${code}`,
|
||||
);
|
||||
setTimeout(() => {
|
||||
dispatch('startMastoUserSocket')
|
||||
}, retryTimeout(state.retryMultiplier))
|
||||
commit('incrementRetryMultiplier')
|
||||
dispatch("startMastoUserSocket");
|
||||
}, retryTimeout(state.retryMultiplier));
|
||||
commit("incrementRetryMultiplier");
|
||||
if (state.mastoUserSocketStatus !== WSConnectionStatus.ERROR) {
|
||||
dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||
dispatch('startFetchingNotifications')
|
||||
dispatch('startFetchingAnnouncements')
|
||||
dispatch('startFetchingReports')
|
||||
dispatch('pushGlobalNotice', {
|
||||
level: 'error',
|
||||
messageKey: 'timeline.socket_broke',
|
||||
dispatch("startFetchingTimeline", { timeline: "friends" });
|
||||
dispatch("startFetchingNotifications");
|
||||
dispatch("startFetchingAnnouncements");
|
||||
dispatch("startFetchingReports");
|
||||
dispatch("pushGlobalNotice", {
|
||||
level: "error",
|
||||
messageKey: "timeline.socket_broke",
|
||||
messageArgs: [code],
|
||||
timeout: 5000
|
||||
})
|
||||
timeout: 5000,
|
||||
});
|
||||
}
|
||||
commit('setMastoUserSocketStatus', WSConnectionStatus.ERROR)
|
||||
commit("setMastoUserSocketStatus", WSConnectionStatus.ERROR);
|
||||
}
|
||||
})
|
||||
resolve()
|
||||
},
|
||||
);
|
||||
resolve();
|
||||
} catch (e) {
|
||||
reject(e)
|
||||
reject(e);
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
stopMastoUserSocket({ state, dispatch }) {
|
||||
dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||
dispatch('startFetchingNotifications')
|
||||
state.mastoUserSocket.close()
|
||||
dispatch("startFetchingTimeline", { timeline: "friends" });
|
||||
dispatch("startFetchingNotifications");
|
||||
state.mastoUserSocket.close();
|
||||
},
|
||||
|
||||
// Timelines
|
||||
startFetchingTimeline (store, {
|
||||
timeline = 'friends',
|
||||
tag = false,
|
||||
userId = false,
|
||||
listId = false
|
||||
}) {
|
||||
if (store.state.fetchers[timeline]) return
|
||||
startFetchingTimeline(
|
||||
store,
|
||||
{ timeline = "friends", tag = false, userId = false, listId = false },
|
||||
) {
|
||||
if (store.state.fetchers[timeline]) return;
|
||||
|
||||
const fetcher = store.state.backendInteractor.startFetchingTimeline({
|
||||
timeline, store, userId, listId, tag
|
||||
})
|
||||
store.commit('addFetcher', { fetcherName: timeline, fetcher })
|
||||
timeline,
|
||||
store,
|
||||
userId,
|
||||
listId,
|
||||
tag,
|
||||
});
|
||||
store.commit("addFetcher", { fetcherName: timeline, fetcher });
|
||||
},
|
||||
stopFetchingTimeline(store, timeline) {
|
||||
const fetcher = store.state.fetchers[timeline]
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: timeline, fetcher })
|
||||
const fetcher = store.state.fetchers[timeline];
|
||||
if (!fetcher) return;
|
||||
store.commit("removeFetcher", { fetcherName: timeline, fetcher });
|
||||
},
|
||||
fetchTimeline (store, timeline, { ...rest }) {
|
||||
fetchTimeline(store, timeline, opts = {}) {
|
||||
store.state.backendInteractor.fetchTimeline({
|
||||
store,
|
||||
timeline,
|
||||
...rest
|
||||
})
|
||||
...opts,
|
||||
});
|
||||
},
|
||||
startFetchingConfig(store) {
|
||||
if (store.state.fetchers.config) return
|
||||
if (store.state.fetchers.config) return;
|
||||
|
||||
const fetcher = store.state.backendInteractor.startFetchingConfig({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'config', fetcher })
|
||||
const fetcher = store.state.backendInteractor.startFetchingConfig({
|
||||
store,
|
||||
});
|
||||
store.commit("addFetcher", { fetcherName: "config", fetcher });
|
||||
},
|
||||
stopFetchingConfig(store) {
|
||||
const fetcher = store.state.fetchers.config
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'config', fetcher })
|
||||
const fetcher = store.state.fetchers.config;
|
||||
if (!fetcher) return;
|
||||
store.commit("removeFetcher", { fetcherName: "config", fetcher });
|
||||
},
|
||||
// Notifications
|
||||
startFetchingNotifications(store) {
|
||||
if (store.state.fetchers.notifications) return
|
||||
const fetcher = store.state.backendInteractor.startFetchingNotifications({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'notifications', fetcher })
|
||||
if (store.state.fetchers.notifications) return;
|
||||
const fetcher = store.state.backendInteractor.startFetchingNotifications({
|
||||
store,
|
||||
});
|
||||
store.commit("addFetcher", { fetcherName: "notifications", fetcher });
|
||||
},
|
||||
stopFetchingNotifications(store) {
|
||||
const fetcher = store.state.fetchers.notifications
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'notifications', fetcher })
|
||||
const fetcher = store.state.fetchers.notifications;
|
||||
if (!fetcher) return;
|
||||
store.commit("removeFetcher", { fetcherName: "notifications", fetcher });
|
||||
},
|
||||
fetchNotifications(store, { ...rest }) {
|
||||
store.state.backendInteractor.fetchNotifications({
|
||||
store,
|
||||
...rest
|
||||
})
|
||||
...rest,
|
||||
});
|
||||
},
|
||||
removeFollowRequest(store, request) {
|
||||
let requests = [...store.state.followRequests].filter((it) => it.id !== request.id)
|
||||
store.commit('setFollowRequests', requests)
|
||||
let requests = [...store.state.followRequests].filter(
|
||||
(it) => it.id !== request.id,
|
||||
);
|
||||
store.commit("setFollowRequests", requests);
|
||||
},
|
||||
fetchFollowRequests({ rootState, commit }) {
|
||||
const pagination = rootState.api.followRequestsPagination
|
||||
return rootState.api.backendInteractor.getFollowRequests({ pagination })
|
||||
const pagination = rootState.api.followRequestsPagination;
|
||||
return rootState.api.backendInteractor
|
||||
.getFollowRequests({ pagination })
|
||||
.then((requests) => {
|
||||
if (requests.data.length > 0) {
|
||||
commit('addNewUsers', requests.data)
|
||||
commit('saveFollowRequests', requests.data)
|
||||
commit('saveFollowRequestPagination', requests.pagination)
|
||||
commit("addNewUsers", requests.data);
|
||||
commit("saveFollowRequests", requests.data);
|
||||
commit("saveFollowRequestPagination", requests.pagination);
|
||||
}
|
||||
return requests
|
||||
})
|
||||
return requests;
|
||||
});
|
||||
},
|
||||
// Lists
|
||||
startFetchingLists(store) {
|
||||
if (store.state.fetchers['lists']) return
|
||||
const fetcher = store.state.backendInteractor.startFetchingLists({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'lists', fetcher })
|
||||
if (store.state.fetchers["lists"]) return;
|
||||
const fetcher = store.state.backendInteractor.startFetchingLists({
|
||||
store,
|
||||
});
|
||||
store.commit("addFetcher", { fetcherName: "lists", fetcher });
|
||||
},
|
||||
stopFetchingLists(store) {
|
||||
const fetcher = store.state.fetchers.lists
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'lists', fetcher })
|
||||
const fetcher = store.state.fetchers.lists;
|
||||
if (!fetcher) return;
|
||||
store.commit("removeFetcher", { fetcherName: "lists", fetcher });
|
||||
},
|
||||
|
||||
// Lists
|
||||
startFetchingAnnouncements(store) {
|
||||
if (store.state.fetchers['announcements']) return
|
||||
const fetcher = store.state.backendInteractor.startFetchingAnnouncements({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'announcements', fetcher })
|
||||
if (store.state.fetchers["announcements"]) return;
|
||||
const fetcher = store.state.backendInteractor.startFetchingAnnouncements({
|
||||
store,
|
||||
});
|
||||
store.commit("addFetcher", { fetcherName: "announcements", fetcher });
|
||||
},
|
||||
stopFetchingAnnouncements(store) {
|
||||
const fetcher = store.state.fetchers.announcements
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'announcements', fetcher })
|
||||
const fetcher = store.state.fetchers.announcements;
|
||||
if (!fetcher) return;
|
||||
store.commit("removeFetcher", { fetcherName: "announcements", fetcher });
|
||||
},
|
||||
|
||||
// Reports
|
||||
startFetchingReports(store) {
|
||||
if (store.state.fetchers['reports']) return
|
||||
const fetcher = store.state.backendInteractor.startFetchingReports({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'reports', fetcher })
|
||||
if (store.state.fetchers["reports"]) return;
|
||||
const fetcher = store.state.backendInteractor.startFetchingReports({
|
||||
store,
|
||||
});
|
||||
store.commit("addFetcher", { fetcherName: "reports", fetcher });
|
||||
},
|
||||
stopFetchingReports(store) {
|
||||
const fetcher = store.state.fetchers.reports
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'reports', fetcher })
|
||||
const fetcher = store.state.fetchers.reports;
|
||||
if (!fetcher) return;
|
||||
store.commit("removeFetcher", { fetcherName: "reports", fetcher });
|
||||
},
|
||||
|
||||
getSupportedTranslationlanguages(store) {
|
||||
store.state.backendInteractor.getSupportedTranslationlanguages({ store })
|
||||
store.state.backendInteractor
|
||||
.getSupportedTranslationlanguages({ store })
|
||||
.then((data) => {
|
||||
store.dispatch('setInstanceOption', { name: 'supportedTranslationLanguages', value: data })
|
||||
})
|
||||
store.dispatch("setInstanceOption", {
|
||||
name: "supportedTranslationLanguages",
|
||||
value: data,
|
||||
});
|
||||
});
|
||||
},
|
||||
listSettingsProfiles(store) {
|
||||
store.state.backendInteractor.listSettingsProfiles({ store })
|
||||
store.state.backendInteractor
|
||||
.listSettingsProfiles({ store })
|
||||
.then((data) => {
|
||||
store.commit('setInstanceOption', { name: 'settingsProfiles', value: data })
|
||||
})
|
||||
store.commit("setInstanceOption", {
|
||||
name: "settingsProfiles",
|
||||
value: data,
|
||||
});
|
||||
});
|
||||
},
|
||||
// Pleroma websocket
|
||||
setWsToken(store, token) {
|
||||
store.commit('setWsToken', token)
|
||||
store.commit("setWsToken", token);
|
||||
},
|
||||
disconnectFromSocket({ commit, state }) {
|
||||
state.socket && state.socket.disconnect()
|
||||
commit('setSocket', null)
|
||||
}
|
||||
}
|
||||
}
|
||||
state.socket && state.socket.disconnect();
|
||||
commit("setSocket", null);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default api
|
||||
export default api;
|
||||
|
|
|
@ -67,7 +67,7 @@ const mutations = {
|
|||
|
||||
// actions
|
||||
const actions = {
|
||||
// eslint-disable-next-line camelcase
|
||||
|
||||
async login ({ state, dispatch, commit }, { access_token }) {
|
||||
commit('setToken', access_token, { root: true })
|
||||
await dispatch('loginUser', access_token, { root: true })
|
||||
|
|
|
@ -22,7 +22,7 @@ export const multiChoiceProperties = [
|
|||
|
||||
export const defaultState = {
|
||||
profile: 'default',
|
||||
profileVersion: 0,
|
||||
profileVersion: 0, // internal fe copy of server-side version
|
||||
expertLevel: 0, // used to track which settings to show and hide
|
||||
colors: {},
|
||||
theme: undefined,
|
||||
|
@ -116,6 +116,7 @@ export const defaultState = {
|
|||
conversationTreeFadeAncestors: undefined, // instance default
|
||||
maxDepthInThread: undefined, // instance default
|
||||
translationLanguage: undefined, // instance default,
|
||||
postLanguage: undefined, // instance default,
|
||||
supportedTranslationLanguages: {}, // instance default
|
||||
userProfileDefaultTab: 'statuses',
|
||||
useBlurhash: true,
|
||||
|
@ -126,6 +127,21 @@ export const instanceDefaultProperties = Object.entries(defaultState)
|
|||
.filter(([key, value]) => value === undefined)
|
||||
.map(([key, value]) => key)
|
||||
|
||||
function updateLocalSettings(store, settingEntries, version = null) {
|
||||
if (version == null)
|
||||
version = store.state.profileVersion
|
||||
|
||||
settingEntries.forEach(([name, value]) => {
|
||||
if (store.state[name] !== value) {
|
||||
store.dispatch('setOption', { name, value })
|
||||
}
|
||||
})
|
||||
|
||||
// Set this at the end to override any potentially stored profileVersion
|
||||
store.commit('setOption', { name: 'profileVersion', value: version })
|
||||
}
|
||||
|
||||
|
||||
const config = {
|
||||
state: { ...defaultState },
|
||||
getters: {
|
||||
|
@ -197,19 +213,17 @@ const config = {
|
|||
store.dispatch('listSettingsProfiles')
|
||||
})
|
||||
},
|
||||
loadSettings ({ dispatch }, data) {
|
||||
loadSettings (store, data) {
|
||||
const knownKeys = new Set(Object.keys(defaultState))
|
||||
const presentKeys = new Set(Object.keys(data))
|
||||
const intersection = new Set()
|
||||
for (let elem of presentKeys) {
|
||||
if (knownKeys.has(elem)) {
|
||||
intersection.add(elem)
|
||||
}
|
||||
}
|
||||
|
||||
intersection.forEach(
|
||||
name => dispatch('setOption', { name, value: data[name] })
|
||||
)
|
||||
// Limit to supported properties
|
||||
const newSettingEntries =
|
||||
Object.entries(data)
|
||||
.filter(([key, value]) => knownKeys.has(key))
|
||||
|
||||
// disregard stored profileVersion; sync afterwards increases previous version
|
||||
updateLocalSettings(store, newSettingEntries, null)
|
||||
store.dispatch('syncSettings')
|
||||
},
|
||||
setHighlight ({ commit, dispatch }, { user, color, type }) {
|
||||
commit('setHighlight', { user, color, type })
|
||||
|
@ -243,12 +257,7 @@ const config = {
|
|||
.then(({ settings, version }) => {
|
||||
console.log('found settings version', version)
|
||||
if (forceUpdate || (version > store.state.profileVersion)) {
|
||||
store.commit('setOption', { name: 'profileVersion', value: version })
|
||||
Object.entries(settings).forEach(([name, value]) => {
|
||||
if (store.state[name] !== value) {
|
||||
store.dispatch('setOption', { name, value })
|
||||
}
|
||||
})
|
||||
updateLocalSettings(store, Object.entries(settings), version)
|
||||
} else {
|
||||
console.log('settings are up to date')
|
||||
}
|
||||
|
|
|
@ -73,6 +73,8 @@ const defaultState = {
|
|||
conversationOtherRepliesButton: 'below',
|
||||
conversationTreeFadeAncestors: false,
|
||||
maxDepthInThread: 6,
|
||||
backendCommitUrl: 'https://akkoma.dev/AkkomaGang/akkoma/commit/',
|
||||
frontendCommitUrl: 'https://akkoma.dev/AkkomaGang/pleroma-fe/commit/',
|
||||
|
||||
// Nasty stuff
|
||||
customEmoji: [],
|
||||
|
|
|
@ -314,7 +314,7 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
|
|||
})
|
||||
|
||||
// Keep the visible statuses sorted
|
||||
if (timeline && !(timeline === 'bookmarks')) {
|
||||
if (timeline && !(['bookmarks', 'favorites'].includes(timeline))) {
|
||||
sortTimeline(timelineObject)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 5;
|
||||
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.6);
|
||||
box-shadow: var(--panelShadow);
|
||||
pointer-events: none;
|
||||
|
@ -60,7 +59,6 @@
|
|||
padding: 0.6em;
|
||||
height: var(--__panel-heading-height);
|
||||
line-height: var(--__panel-heading-height-inner);
|
||||
z-index: 4;
|
||||
|
||||
&.-flexible-height {
|
||||
--__panel-heading-height: auto;
|
||||
|
@ -131,6 +129,7 @@
|
|||
color: var(--panelText);
|
||||
background-color: $fallback--bg;
|
||||
background-color: var(--bg, $fallback--bg);
|
||||
z-index: 4;
|
||||
|
||||
&::after {
|
||||
background-color: $fallback--fg;
|
||||
|
|
|
@ -29,7 +29,7 @@ export const newImporter = ({
|
|||
|
||||
filePicker.addEventListener('change', event => {
|
||||
if (event.target.files[0]) {
|
||||
// eslint-disable-next-line no-undef
|
||||
|
||||
const reader = new FileReader()
|
||||
reader.onload = ({ target }) => {
|
||||
try {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue