Browse Source

Merge branch 'main' into glitch-soc/merge-upstream

master
Claire 4 months ago
parent
commit
0157caacef
  1. 2
      .github/workflows/check-i18n.yml
  2. 19
      CHANGELOG.md
  3. 14
      Gemfile.lock
  4. 6
      app/controllers/activitypub/outboxes_controller.rb
  5. 11
      app/controllers/api/v1/emails/confirmations_controller.rb
  6. 25
      app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js
  7. 33
      app/javascript/mastodon/features/emoji/emoji_compressed.js
  8. 2
      app/javascript/mastodon/features/emoji/emoji_map.json
  9. 4
      app/javascript/mastodon/features/emoji/unicode_to_unified_name.js
  10. 2
      app/javascript/mastodon/locales/af.json
  11. 8
      app/javascript/mastodon/locales/defaultMessages.json
  12. 2
      app/javascript/mastodon/locales/en.json
  13. 2
      app/javascript/mastodon/locales/es-AR.json
  14. 74
      app/javascript/mastodon/locales/gd.json
  15. 2
      app/javascript/mastodon/locales/io.json
  16. 2
      app/javascript/mastodon/locales/kn.json
  17. 4
      app/javascript/mastodon/locales/ko.json
  18. 36
      app/javascript/mastodon/locales/lt.json
  19. 2
      app/javascript/mastodon/locales/mk.json
  20. 12
      app/javascript/mastodon/locales/ml.json
  21. 2
      app/javascript/mastodon/locales/mr.json
  22. 6
      app/javascript/mastodon/locales/nl.json
  23. 2
      app/javascript/mastodon/locales/pa.json
  24. 4
      app/javascript/mastodon/locales/pt-PT.json
  25. 2
      app/javascript/mastodon/locales/si.json
  26. 12
      app/javascript/mastodon/locales/sv.json
  27. 2
      app/javascript/mastodon/locales/szl.json
  28. 2
      app/javascript/mastodon/locales/tai.json
  29. 2
      app/javascript/mastodon/locales/th.json
  30. 2
      app/javascript/mastodon/locales/tt.json
  31. 2
      app/javascript/mastodon/locales/ug.json
  32. 2
      app/javascript/mastodon/locales/ur.json
  33. 44
      app/javascript/mastodon/locales/zh-CN.json
  34. 12
      app/javascript/mastodon/locales/zh-TW.json
  35. 65
      app/javascript/styles/mastodon/emoji_picker.scss
  36. 6
      app/javascript/styles/mastodon/widgets.scss
  37. 3
      app/models/account_stat.rb
  38. 2
      app/models/concerns/account_counters.rb
  39. 2
      config/locales/activerecord.es-AR.yml
  40. 2
      config/locales/activerecord.zh-TW.yml
  41. 2
      config/locales/devise.sv.yml
  42. 36
      config/locales/devise.zh-TW.yml
  43. 8
      config/locales/doorkeeper.es-AR.yml
  44. 2
      config/locales/doorkeeper.sv.yml
  45. 12
      config/locales/doorkeeper.zh-CN.yml
  46. 8
      config/locales/doorkeeper.zh-TW.yml
  47. 2
      config/locales/es-AR.yml
  48. 9
      config/locales/fa.yml
  49. 21
      config/locales/fr.yml
  50. 24
      config/locales/gd.yml
  51. 10
      config/locales/gl.yml
  52. 2
      config/locales/ja.yml
  53. 5
      config/locales/pl.yml
  54. 4
      config/locales/sc.yml
  55. 2
      config/locales/simple_form.es-AR.yml
  56. 2
      config/locales/simple_form.fr.yml
  57. 16
      config/locales/simple_form.gd.yml
  58. 10
      config/locales/simple_form.zh-CN.yml
  59. 21
      config/locales/simple_form.zh-TW.yml
  60. 81
      config/locales/sv.yml
  61. 3
      config/locales/th.yml
  62. 80
      config/locales/zh-CN.yml
  63. 106
      config/locales/zh-TW.yml
  64. 8
      db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb
  65. 17
      db/migrate/20200620164023_add_fixed_lowercase_index_to_accounts.rb
  66. 13
      db/migrate/20210421121431_add_case_insensitive_btree_index_to_tags.rb
  67. 9
      db/post_migrate/20210526193025_remove_lock_version_from_account_stats.rb
  68. 3
      db/schema.rb
  69. 2
      lib/mastodon/maintenance_cli.rb
  70. 14
      lib/mastodon/migration_helpers.rb
  71. 2
      lib/mastodon/search_cli.rb
  72. 2
      lib/mastodon/version.rb
  73. 2
      lib/tasks/emojis.rake
  74. 14
      package.json
  75. 2
      public/emoji/1f1f5-1f1f9.svg
  76. 2
      public/emoji/1f1f9-1f1ed.svg
  77. 2
      public/emoji/1f36a.svg
  78. 2
      public/emoji/1f3a2.svg
  79. 2
      public/emoji/1f3af.svg
  80. 2
      public/emoji/1f3f3-fe0f-200d-26a7-fe0f.svg
  81. 1
      public/emoji/1f408-200d-2b1b.svg
  82. 2
      public/emoji/1f429.svg
  83. 1
      public/emoji/1f43b-200d-2744-fe0f.svg
  84. 2
      public/emoji/1f441.svg
  85. 1
      public/emoji/1f468-1f3fb-200d-1f37c.svg
  86. 1
      public/emoji/1f468-1f3fb-200d-1f384.svg
  87. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb.svg
  88. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc.svg
  89. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd.svg
  90. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe.svg
  91. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff.svg
  92. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg
  93. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg
  94. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg
  95. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg
  96. 1
      public/emoji/1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg
  97. 1
      public/emoji/1f468-1f3fc-200d-1f37c.svg
  98. 1
      public/emoji/1f468-1f3fc-200d-1f384.svg
  99. 1
      public/emoji/1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb.svg
  100. 1
      public/emoji/1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc.svg

2
.github/workflows/check-i18n.yml

@ -1,4 +1,4 @@
name: Chack i18n
name: Check i18n
on:
push:

19
CHANGELOG.md

@ -3,6 +3,25 @@ Changelog
All notable changes to this project will be documented in this file.
## [3.4.1] - 2021-06-03
### Added
- Add new emoji assets from Twemoji 13.1.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/16345))
### Fixed
- Fix some ActivityPub identifiers in server actor outbox ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16343))
- Fix custom CSS path setting cookies and being uncacheable due to it ([tribela](https://github.com/tootsuite/mastodon/pull/16314))
- Fix unread notification count when polling in web UI ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16272))
- Fix health check not being accessible through localhost ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16270))
- Fix some redis locks auto-releasing too fast ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16276), [ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16291))
- Fix e-mail confirmations API not working correctly ([Gargron](https://github.com/tootsuite/mastodon/pull/16348))
- Fix migration script not being able to run if it fails midway ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16312))
- Fix account deletion sometimes failing because of optimistic locks ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16317))
- Fix deprecated slash as division in SASS files ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16347))
- Fix `tootctl search deploy` compatibility error on Ruby 3 ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16346))
- Fix mailer jobs for deleted notifications erroring out ([ClearlyClaire](https://github.com/tootsuite/mastodon/pull/16294))
## [3.4.0] - 2021-05-16
### Added

14
Gemfile.lock

@ -79,7 +79,7 @@ GEM
encryptor (~> 3.0.0)
awrence (1.1.1)
aws-eventstream (1.1.1)
aws-partitions (1.461.0)
aws-partitions (1.465.0)
aws-sdk-core (3.114.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
@ -88,7 +88,7 @@ GEM
aws-sdk-kms (1.43.0)
aws-sdk-core (~> 3, >= 3.112.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.95.0)
aws-sdk-s3 (1.95.1)
aws-sdk-core (~> 3, >= 3.112.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
@ -354,17 +354,22 @@ GEM
nokogiri (~> 1)
rake
mini_mime (1.0.3)
mini_portile2 (2.5.1)
mini_portile2 (2.5.2)
net-ftp (~> 0.1)
minitest (5.14.4)
msgpack (1.4.2)
multi_json (1.15.0)
multipart-post (2.1.1)
net-ftp (0.1.2)
net-protocol
time
net-ldap (0.17.0)
net-protocol (0.1.0)
net-scp (3.0.0)
net-ssh (>= 2.6.5, < 7.0.0)
net-ssh (6.1.0)
nio4r (2.5.7)
nokogiri (1.11.5)
nokogiri (1.11.6)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
nokogumbo (2.0.4)
@ -610,6 +615,7 @@ GEM
thwait (0.2.0)
e2mmap
tilt (2.0.10)
time (0.1.0)
tpm-key_attestation (0.9.0)
bindata (~> 2.4)
openssl-signature_algorithm (~> 0.4.0)

6
app/controllers/activitypub/outboxes_controller.rb

@ -29,7 +29,7 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController
)
else
ActivityPub::CollectionPresenter.new(
id: account_outbox_url(@account),
id: outbox_url,
type: :ordered,
size: @account.statuses_count,
first: outbox_url(page: true),
@ -47,11 +47,11 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController
end
def next_page
account_outbox_url(@account, page: true, max_id: @statuses.last.id) if @statuses.size == LIMIT
outbox_url(page: true, max_id: @statuses.last.id) if @statuses.size == LIMIT
end
def prev_page
account_outbox_url(@account, page: true, min_id: @statuses.first.id) unless @statuses.empty?
outbox_url(page: true, min_id: @statuses.first.id) unless @statuses.empty?
end
def set_statuses

11
app/controllers/api/v1/emails/confirmations_controller.rb

@ -3,12 +3,11 @@
class Api::V1::Emails::ConfirmationsController < Api::BaseController
before_action :doorkeeper_authorize!
before_action :require_user_owned_by_application!
before_action :require_user_not_confirmed!
def create
if !current_user.confirmed? && current_user.unconfirmed_email.present?
current_user.update!(email: params[:email]) if params.key?(:email)
current_user.resend_confirmation_instructions
end
current_user.update!(email: params[:email]) if params.key?(:email)
current_user.resend_confirmation_instructions
render_empty
end
@ -18,4 +17,8 @@ class Api::V1::Emails::ConfirmationsController < Api::BaseController
def require_user_owned_by_application!
render json: { error: 'This method is only available to the application the user originally signed-up with' }, status: :forbidden unless current_user && current_user.created_by_application_id == doorkeeper_token.application_id
end
def require_user_not_confirmed!
render json: { error: 'This method is only available while the e-mail is awaiting confirmation' }, status: :forbidden if current_user.confirmed? || current_user.unconfirmed_email.blank?
end
end

25
app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js

@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl } from 'react-intl';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';
import Overlay from 'react-overlays/lib/Overlay';
import classNames from 'classnames';
@ -12,7 +12,6 @@ import { assetHost } from 'mastodon/utils/config';
const messages = defineMessages({
emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },
emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search...' },
emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojos!! (╯°□°)╯︵ ┻━┻' },
custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' },
recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' },
search_results: { id: 'emoji_button.search_results', defaultMessage: 'Search results' },
@ -28,9 +27,26 @@ const messages = defineMessages({
let EmojiPicker, Emoji; // load asynchronously
const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`;
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
const backgroundImageFn = () => `${assetHost}/emoji/sheet_13.png`;
const notFoundFn = () => (
<div className='emoji-mart-no-results'>
<Emoji
emoji='sleuth_or_spy'
set='twitter'
size={32}
sheetSize={32}
backgroundImageFn={backgroundImageFn}
/>
<div className='emoji-mart-no-results-label'>
<FormattedMessage id='emoji_button.not_found' defaultMessage='No matching emojis found' />
</div>
</div>
);
class ModifierPickerMenu extends React.PureComponent {
static propTypes = {
@ -182,7 +198,6 @@ class EmojiPickerMenu extends React.PureComponent {
return {
search: intl.formatMessage(messages.emoji_search),
notfound: intl.formatMessage(messages.emoji_not_found),
categories: {
search: intl.formatMessage(messages.search_results),
recent: intl.formatMessage(messages.recent),
@ -263,7 +278,9 @@ class EmojiPickerMenu extends React.PureComponent {
recent={frequentlyUsedEmojis}
skin={skinTone}
showPreview={false}
showSkinTones={false}
backgroundImageFn={backgroundImageFn}
notFound={notFoundFn}
autoFocus
emojiTooltip
/>

33
app/javascript/mastodon/features/emoji/emoji_compressed.js

@ -7,29 +7,38 @@
const { unicodeToFilename } = require('./unicode_to_filename');
const { unicodeToUnifiedName } = require('./unicode_to_unified_name');
const emojiMap = require('./emoji_map.json');
const emojiMap = require('./emoji_map.json');
const { emojiIndex } = require('emoji-mart');
const { uncompress: emojiMartUncompress } = require('emoji-mart/dist/utils/data');
let data = require('emoji-mart/data/all.json');
if(data.compressed) {
data = emojiMartUncompress(data);
}
const emojiMartData = data;
const excluded = ['®', '©', '™'];
const skins = ['🏻', '🏼', '🏽', '🏾', '🏿'];
const skinTones = ['🏻', '🏼', '🏽', '🏾', '🏿'];
const shortcodeMap = {};
const shortCodesToEmojiData = {};
const emojisWithoutShortCodes = [];
Object.keys(emojiIndex.emojis).forEach(key => {
shortcodeMap[emojiIndex.emojis[key].native] = emojiIndex.emojis[key].id;
let emoji = emojiIndex.emojis[key];
// Emojis with skin tone modifiers are stored like this
if (Object.prototype.hasOwnProperty.call(emoji, '1')) {
emoji = emoji['1'];
}
shortcodeMap[emoji.native] = emoji.id;
});
const stripModifiers = unicode => {
skins.forEach(tone => {
skinTones.forEach(tone => {
unicode = unicode.replace(tone, '');
});
@ -64,13 +73,22 @@ Object.keys(emojiMap).forEach(key => {
if (!Array.isArray(shortCodesToEmojiData[shortcode])) {
shortCodesToEmojiData[shortcode] = [[]];
}
shortCodesToEmojiData[shortcode][0].push(filenameData);
}
});
Object.keys(emojiIndex.emojis).forEach(key => {
const { native } = emojiIndex.emojis[key];
let emoji = emojiIndex.emojis[key];
// Emojis with skin tone modifiers are stored like this
if (Object.prototype.hasOwnProperty.call(emoji, '1')) {
emoji = emoji['1'];
}
const { native } = emoji;
let { short_names, search, unified } = emojiMartData.emojis[key];
if (short_names[0] !== key) {
throw new Error('The compresser expects the first short_code to be the ' +
'key. It may need to be rewritten if the emoji change such that this ' +
@ -80,11 +98,16 @@ Object.keys(emojiIndex.emojis).forEach(key => {
short_names = short_names.slice(1); // first short name can be inferred from the key
const searchData = [native, short_names, search];
if (unicodeToUnifiedName(native) !== unified) {
// unified name can't be derived from unicodeToUnifiedName
searchData.push(unified);
}
if (!Array.isArray(shortCodesToEmojiData[key])) {
shortCodesToEmojiData[key] = [[]];
}
shortCodesToEmojiData[key].push(searchData);
});

2
app/javascript/mastodon/features/emoji/emoji_map.json
File diff suppressed because it is too large
View File

4
app/javascript/mastodon/features/emoji/unicode_to_unified_name.js

@ -2,16 +2,20 @@ function padLeft(str, num) {
while (str.length < num) {
str = '0' + str;
}
return str;
}
exports.unicodeToUnifiedName = (str) => {
let output = '';
for (let i = 0; i < str.length; i += 2) {
if (i > 0) {
output += '-';
}
output += padLeft(str.codePointAt(i).toString(16).toUpperCase(), 4);
}
return output;
};

2
app/javascript/mastodon/locales/af.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

8
app/javascript/mastodon/locales/defaultMessages.json

@ -1074,10 +1074,6 @@
"defaultMessage": "Search...",
"id": "emoji_button.search"
},
{
"defaultMessage": "No emojos!! (╯°□°)╯︵ ┻━┻",
"id": "emoji_button.not_found"
},
{
"defaultMessage": "Custom",
"id": "emoji_button.custom"
@ -1121,6 +1117,10 @@
{
"defaultMessage": "Flags",
"id": "emoji_button.flags"
},
{
"defaultMessage": "No matching emojis found",
"id": "emoji_button.not_found"
}
],
"path": "app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.json"

2
app/javascript/mastodon/locales/en.json

@ -146,7 +146,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/es-AR.json

@ -142,7 +142,7 @@
"emoji_button.food": "Comida y bebida",
"emoji_button.label": "Insertar emoji",
"emoji_button.nature": "Naturaleza",
"emoji_button.not_found": "¡¡No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No se encontraron emojis coincidentes",
"emoji_button.objects": "Objetos",
"emoji_button.people": "Gente",
"emoji_button.recent": "Usados frecuentemente",

74
app/javascript/mastodon/locales/gd.json

@ -102,8 +102,8 @@
"compose_form.sensitive.hide": "{count, plural, one {Cuir comharra gu bheil am meadhan frionasach} two {Cuir comharra gu bheil na meadhanan frionasach} few {Cuir comharra gu bheil na meadhanan frionasach} other {Cuir comharra gu bheil na meadhanan frionasach}}",
"compose_form.sensitive.marked": "{count, plural, one {Tha comharra ris a’ mheadhan gu bheil e frionasach} two {Tha comharra ris na meadhanan gu bheil iad frionasach} few {Tha comharra ris na meadhanan gu bheil iad frionasach} other {Tha comharra ris na meadhanan gu bheil iad frionasach}}",
"compose_form.sensitive.unmarked": "{count, plural, one {Chan eil comharra ris a’ mheadhan gun robh e frionasach} two {Chan eil comharra ris na meadhanan gun robh iad frionasach} few {Chan eil comharra ris na meadhanan gun robh iad frionasach} other {Chan eil comharra ris na meadhanan gun robh iad frionasach}}",
"compose_form.spoiler.marked": "Tha an teacsa falaichte air cùlaibh rabhaidh",
"compose_form.spoiler.unmarked": "Chan eil an teacsa flaichte",
"compose_form.spoiler.marked": "Thoir air falbh an rabhadh susbainte",
"compose_form.spoiler.unmarked": "Cuir rabhadh susbainte ris",
"compose_form.spoiler_placeholder": "Sgrìobh an rabhadh agad an-seo",
"confirmation_modal.cancel": "Sguir dheth",
"confirmations.block.block_and_report": "Bac ⁊ dèan gearan",
@ -142,7 +142,7 @@
"emoji_button.food": "Biadh ⁊ deoch",
"emoji_button.label": "Cuir a-steach Emoji",
"emoji_button.nature": "An nàdar",
"emoji_button.not_found": "Chan eil Emoji gnàthaichte ann!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "Cha deach Emoji iomchaidh a lorg",
"emoji_button.objects": "Nithean",
"emoji_button.people": "Daoine",
"emoji_button.recent": "Air a chleachdadh o chionn ghoirid",
@ -163,12 +163,12 @@
"empty_column.follow_recommendations": "Chan urrainn dhuinn dad a mholadh dhut. Cleachd gleus an luirg feuch an lorg thu daoine air a bheil thu eòlach no rùraich na tagaichean-hais a tha a’ treandadh.",
"empty_column.follow_requests": "Chan eil iarrtas air leantainn agad fhathast. Nuair gheibh thu fear, nochdaidh e an-seo.",
"empty_column.hashtag": "Chan eil dad san taga hais seo fhathast.",
"empty_column.home": "Tha an loidhne-ama dachaigh agad falamh! Tadhail air {public} no dèan lorg airson toiseach-tòiseachaidh a dhèanamh is tachairt ri càch.",
"empty_column.home": "Tha an loidhne-ama dachaigh agad falamh! Lean air barrachd dhaoine gus a lìonadh. {suggestions}",
"empty_column.home.suggestions": "Faic moladh no dhà",
"empty_column.list": "Chan eil dad air an liosta seo fhathast. Nuair a phostaicheas buill a tha air an liosta seo postaichean ùra, nochdaidh iad an-seo.",
"empty_column.lists": "Chan eil liosta agad fhathast. Nuair chruthaicheas tu tè, nochdaidh i an-seo.",
"empty_column.mutes": "Cha do mhùch thu cleachdaiche sam bith fhathast.",
"empty_column.notifications": "Cha d’ fhuair thu brath sam bith fhathast. Dèan eadar-ghnìomh le càch airson tòiseachadh air còmhradh.",
"empty_column.notifications": "Cha d’ fhuair thu brath sam bith fhathast. Nuair a ghabhas càch eadar-ghnìomh leat, chì thu an-seo e.",
"empty_column.public": "Chan eil dad an-seo! Sgrìobh rudeigin gu poblach no lean air càch o fhrithealaichean eile a làimh airson seo a lìonadh",
"error.unexpected_crash.explanation": "Air sàilleibh buga sa chòd againn no duilgheadas co-chòrdalachd leis a’ bhrabhsair, chan urrainn dhuinn an duilleag seo a shealltainn mar bu chòir.",
"error.unexpected_crash.explanation_addons": "Cha b’ urrainn dhuinn an duilleag seo a shealltainn mar bu chòir. Tha sinn an dùil gu do dh’adhbharaich tuilleadan a’ bhrabhsair no inneal eadar-theangachaidh fèin-obrachail a’ mhearachd.",
@ -208,40 +208,40 @@
"intervals.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}",
"intervals.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}}",
"intervals.full.minutes": "{number, plural, one {# mhionaid} two {# mhionaid} few {# mionaidean} other {# mionaid}}",
"keyboard_shortcuts.back": "a sheòladh air ais",
"keyboard_shortcuts.blocked": "a dh’fhosgladh liosta nan cleachdaichean bacte",
"keyboard_shortcuts.boost": "’ga bhrosnachadh",
"keyboard_shortcuts.column": "a chur am fòcas air post air fear dhe na colbhan",
"keyboard_shortcuts.compose": "a chur am fòcas air raon teacsa an sgrìobhaidh",
"keyboard_shortcuts.back": "Seòl air ais",
"keyboard_shortcuts.blocked": "Fosgail liosta nan cleachdaichean bacte",
"keyboard_shortcuts.boost": "Brosnaich post",
"keyboard_shortcuts.column": "Cuir am fòcas air colbh",
"keyboard_shortcuts.compose": "Cuir am fòcas air raon teacsa an sgrìobhaidh",
"keyboard_shortcuts.description": "Tuairisgeul",
"keyboard_shortcuts.direct": "a dh’fhosgladh colbh nan teachdaireachdan dìreach",
"keyboard_shortcuts.down": "a ghluasad sìos air an liosta",
"keyboard_shortcuts.enter": "a dh’fhosgladh a’ phuist",
"keyboard_shortcuts.favourite": "’ga chur ris na h-annsachdan",
"keyboard_shortcuts.favourites": "a dh’fhosgladh liosta nan annsachdan",
"keyboard_shortcuts.federated": "a dh’fhosgladh na loidhne-ama co-naisgte",
"keyboard_shortcuts.direct": "Fosgail colbh nan teachdaireachdan dìreach",
"keyboard_shortcuts.down": "Gluais sìos air an liosta",
"keyboard_shortcuts.enter": "Fosgail post",
"keyboard_shortcuts.favourite": "Cuir post ris na h-annsachdan",
"keyboard_shortcuts.favourites": "Fosgail liosta nan annsachdan",
"keyboard_shortcuts.federated": "Fosgail an loidhne-ama cho-naisgte",
"keyboard_shortcuts.heading": "Ath-ghoiridean a’ mheur-chlàir",
"keyboard_shortcuts.home": "a dh’fhosgladh loidhne-ama na dachaigh",
"keyboard_shortcuts.home": "Fosgail loidhne-ama na dachaigh",
"keyboard_shortcuts.hotkey": "Grad-iuchair",
"keyboard_shortcuts.legend": "a shealltainn a’ chlàir-mhìneachaidh seo",
"keyboard_shortcuts.local": "a dh’fhosgladh na loidhne-ama ionadail",
"keyboard_shortcuts.mention": "a thoirt iomradh dhan ùghdar",
"keyboard_shortcuts.muted": "a dh’fhosgladh liosta nan cleachdaichean mùchte",
"keyboard_shortcuts.my_profile": "a dh’fhosgladh na pròifil agad",
"keyboard_shortcuts.notifications": "a dh’fhosgladh colbh nam brathan",
"keyboard_shortcuts.open_media": "a dh’fhosgladh nam meadhanan",
"keyboard_shortcuts.pinned": "a dh’fhosgladh liosta na postaichean prìnichte",
"keyboard_shortcuts.profile": "a dh’fhosgladh pròifil an ùghdair",
"keyboard_shortcuts.reply": "a fhreagairt",
"keyboard_shortcuts.requests": "a dh’fhosgladh liosta nan iarrtasan leantainn",
"keyboard_shortcuts.search": "a chur am fòcas air a lorg",
"keyboard_shortcuts.spoilers": "a shealltainn/fhalach raon an rabhaidh susbainte",
"keyboard_shortcuts.start": "a dh’fhosgladh colbh “dèan toiseach-tòiseachaidh”",
"keyboard_shortcuts.toggle_hidden": "a shealltainn/fhalach teacsa fo rabhadh susbainte",
"keyboard_shortcuts.toggle_sensitivity": "a shealltainn/fhalach meadhanan",
"keyboard_shortcuts.toot": "a thòiseachadh air post ùr",
"keyboard_shortcuts.unfocus": "a thoirt am fòcas far raon teacsa an sgrìobhaidh/an luirg",
"keyboard_shortcuts.up": "a ghluasad suas air an liosta",
"keyboard_shortcuts.legend": "Seall an clàr-mìneachaidh seo",
"keyboard_shortcuts.local": "Fosgail an loidhne-ama ionadail",
"keyboard_shortcuts.mention": "Thoir iomradh dhan ùghdar",
"keyboard_shortcuts.muted": "Fosgail liosta nan cleachdaichean mùchte",
"keyboard_shortcuts.my_profile": "Fosgail a’ phròifil agad",
"keyboard_shortcuts.notifications": "Fosgail colbh nam brathan",
"keyboard_shortcuts.open_media": "Fosgail meadhan",
"keyboard_shortcuts.pinned": "Fosgail liosta nam postaichean prìnichte",
"keyboard_shortcuts.profile": "Fosgail pròifil an ùghdair",
"keyboard_shortcuts.reply": "Freagair do phost",
"keyboard_shortcuts.requests": "Fosgail liosta nan iarrtasan leantainn",
"keyboard_shortcuts.search": "Cuir am fòcas air a’ bhàr-luirg",
"keyboard_shortcuts.spoilers": "Seall/Falaich raon an rabhaidh susbainte",
"keyboard_shortcuts.start": "Fosgail an colbh “dèan toiseach-tòiseachaidh”",
"keyboard_shortcuts.toggle_hidden": "Seall/Falaich an teacsa fo rabhadh susbainte",
"keyboard_shortcuts.toggle_sensitivity": "Seall/Falaich na meadhanan",
"keyboard_shortcuts.toot": "Tòisich air post ùr",
"keyboard_shortcuts.unfocus": "Thoir am fòcas far raon teacsa an sgrìobhaidh/an luirg",
"keyboard_shortcuts.up": "Gluais suas air an liosta",
"lightbox.close": "Dùin",
"lightbox.compress": "Co-theannaich bogsa sealladh an deilbh",
"lightbox.expand": "Leudaich bogsa sealladh an deilbh",
@ -262,7 +262,7 @@
"lists.subheading": "Na liostaichean agad",
"load_pending": "{count, plural, one {# nì ùr} two {# nì ùr} few {# nithean ùra} other {# nì ùr}}",
"loading_indicator.label": "’Ga luchdadh…",
"media_gallery.toggle_visible": "Falaich {number, plural, 1 {an dealbh} one {na dealbhan} two {na dealbhan} few {na dealbhan} other {na dealbhan}}",
"media_gallery.toggle_visible": "{number, plural, 1 {Falaich an dealbh} one {Falaich na dealbhan} two {Falaich na dealbhan} few {Falaich na dealbhan} other {Falaich na dealbhan}}",
"missing_indicator.label": "Cha deach càil a lorg",
"missing_indicator.sublabel": "Cha deach an goireas a lorg",
"mute_modal.duration": "Faide",

2
app/javascript/mastodon/locales/io.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insertar emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/kn.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

4
app/javascript/mastodon/locales/ko.json

@ -85,9 +85,9 @@
"community.column_settings.local_only": "로컬만",
"community.column_settings.media_only": "미디어만",
"community.column_settings.remote_only": "원격만",
"compose_form.direct_message_warning": "이 은 멘션 된 유저들에게만 보여집니다.",
"compose_form.direct_message_warning": "이 게시물은 멘션 된 유저들에게만 보여집니다.",
"compose_form.direct_message_warning_learn_more": "더 알아보기",
"compose_form.hashtag_warning": "이 툿은 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 툿만이 해시태그로 검색 될 수 있습니다.",
"compose_form.hashtag_warning": "이 게시물은 어떤 해시태그로도 검색 되지 않습니다. 전체공개로 게시 된 게시물만이 해시태그로 검색 될 수 있습니다.",
"compose_form.lock_disclaimer": "이 계정은 {locked}로 설정 되어 있지 않습니다. 누구나 이 계정을 팔로우 할 수 있으며, 팔로워 공개의 포스팅을 볼 수 있습니다.",
"compose_form.lock_disclaimer.lock": "비공개",
"compose_form.placeholder": "지금 무엇을 하고 있나요?",

36
app/javascript/mastodon/locales/lt.json

@ -1,8 +1,8 @@
{
"account.account_note_header": "Note",
"account.account_note_header": "Pastaba",
"account.add_or_remove_from_list": "Add or Remove from lists",
"account.badges.bot": "Bot",
"account.badges.group": "Group",
"account.badges.group": "Grupė",
"account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}",
"account.blocked": "Blocked",
@ -14,7 +14,7 @@
"account.edit_profile": "Edit profile",
"account.enable_notifications": "Notify me when @{name} posts",
"account.endorse": "Feature on profile",
"account.follow": "Follow",
"account.follow": "Sekti",
"account.followers": "Followers",
"account.followers.empty": "No one follows this user yet.",
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
@ -31,8 +31,8 @@
"account.moved_to": "{name} has moved to:",
"account.mute": "Mute @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.muted": "Muted",
"account.never_active": "Never",
"account.muted": "Užtildytas",
"account.never_active": "Niekada",
"account.posts": "Toots",
"account.posts_with_replies": "Toots and replies",
"account.report": "Report @{name}",
@ -43,20 +43,20 @@
"account.unblock": "Unblock @{name}",
"account.unblock_domain": "Unhide {domain}",
"account.unendorse": "Don't feature on profile",
"account.unfollow": "Unfollow",
"account.unfollow": "Nebesekti",
"account.unmute": "Unmute @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account_note.placeholder": "Click to add a note",
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
"alert.rate_limited.title": "Rate limited",
"alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!",
"alert.unexpected.title": "Oi!",
"announcement.announcement": "Announcement",
"autosuggest_hashtag.per_week": "{count} per week",
"boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again",
"bundle_column_error.title": "Network error",
"bundle_column_error.title": "Tinklo klaida",
"bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this component.",
"bundle_modal_error.retry": "Try again",
@ -66,22 +66,22 @@
"column.direct": "Direct messages",
"column.directory": "Browse profiles",
"column.domain_blocks": "Hidden domains",
"column.favourites": "Favourites",
"column.favourites": "Mėgstamiausi",
"column.follow_requests": "Follow requests",
"column.home": "Home",
"column.lists": "Lists",
"column.mutes": "Muted users",
"column.lists": "Sąrašai",
"column.mutes": "Užtildyti vartotojai",
"column.notifications": "Notifications",
"column.pins": "Pinned toot",
"column.public": "Federated timeline",
"column_back_button.label": "Back",
"column_header.hide_settings": "Hide settings",
"column_back_button.label": "Atgal",
"column_header.hide_settings": "Slėpti nustatymus",
"column_header.moveLeft_settings": "Move column to the left",
"column_header.moveRight_settings": "Move column to the right",
"column_header.pin": "Pin",
"column_header.show_settings": "Show settings",
"column_header.unpin": "Unpin",
"column_subheading.settings": "Settings",
"column_header.pin": "Prisegti",
"column_header.show_settings": "Rodyti nustatymus",
"column_header.unpin": "Atsegti",
"column_subheading.settings": "Nustatymai",
"community.column_settings.local_only": "Local only",
"community.column_settings.media_only": "Media only",
"community.column_settings.remote_only": "Remote only",
@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/mk.json

@ -142,7 +142,7 @@
"emoji_button.food": "Храна &amp; Пијалаци",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Природа",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Објекти",
"emoji_button.people": "Луѓе",
"emoji_button.recent": "Најчесто користени",

12
app/javascript/mastodon/locales/ml.json

@ -22,7 +22,7 @@
"account.follows.empty": "ഈ ഉപയോക്താവ് ആരേയും ഇതുവരെ പിന്തുടരുന്നില്ല.",
"account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു",
"account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക",
"account.joined": "Joined {date}",
"account.joined": "{date} ൽ ചേർന്നു",
"account.last_status": "അവസാനം കണ്ടത്",
"account.link_verified_on": "ഈ ലിങ്കിന്റെ ഉടമസ്തത {date} ഇൽ ഉറപ്പാക്കിയതാണ്",
"account.locked_info": "ഈ അംഗത്വത്തിന്റെ സ്വകാര്യതാ നിലപാട് അനുസരിച്ച് പിന്തുടരുന്നവരെ തിരഞ്ഞെടുക്കാനുള്ള വിവേചനാധികാരം ഉടമസ്ഥനിൽ നിഷിപ്തമായിരിക്കുന്നു.",
@ -33,8 +33,8 @@
"account.mute_notifications": "@{name} യിൽ നിന്നുള്ള അറിയിപ്പുകൾ നിശബ്ദമാക്കുക",
"account.muted": "നിശ്ശബ്ദമാക്കിയിരിക്കുന്നു",
"account.never_active": "ഒരിക്കലും ഇല്ല",
"account.posts": "ടൂട്ടുകൾ",
"account.posts_with_replies": "ടൂട്ടുകളും മറുപടികളും",
"account.posts": "പോസ്റ്റുകൾ",
"account.posts_with_replies": "പോസ്റ്റുകളും മറുപടികളും",
"account.report": "റിപ്പോർട്ട് ചെയ്യുക @{name}",
"account.requested": "അനുവാദത്തിനായി കാത്തിരിക്കുന്നു. പിന്തുടരാനുള്ള അപേക്ഷ റദ്ദാക്കുവാൻ ഞെക്കുക",
"account.share": "@{name} ന്റെ പ്രൊഫൈൽ പങ്കിടുക",
@ -75,7 +75,7 @@
"column.pins": "ഉറപ്പിച്ചു നിറുത്തിയിരിക്കുന്ന ടൂട്ടുകൾ",
"column.public": "സംയുക്തമായ സമയരേഖ",
"column_back_button.label": "പുറകിലേക്ക്",
"column_header.hide_settings": "സജ്ജീകരണങ്ങള്‍ മറയ്ക്കുക",
"column_header.hide_settings": "ക്രമീകരണങ്ങൾ മറയ്ക്കുക",
"column_header.moveLeft_settings": "എഴുത്തുപംക്തി ഇടത്തോട്ട് മാറ്റുക",
"column_header.moveRight_settings": "എഴുത്തുപംക്തി വലത്തോട്ട് മാറ്റുക",
"column_header.pin": "ഉറപ്പിച്ചു നിറുത്തുക",
@ -398,7 +398,7 @@
"status.mute": "@{name}-നെ നിശ്ശബ്ദമാക്കുക",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",
"status.pin": "പ്രൊഫൈലിൽ പിൻ ചെയ്യൂ",
"status.pinned": "Pinned toot",
"status.read_more": "കൂടുതൽ വായിക്കുക",
"status.reblog": "ബൂസ്റ്റ്",
@ -422,7 +422,7 @@
"status.unpin": "Unpin from profile",
"suggestions.dismiss": "നിർദ്ദേശം ഒഴിവാക്കൂ",
"suggestions.header": "നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടാകാം…",
"tabs_bar.federated_timeline": "സംയുക്തമാക്കിയ",
"tabs_bar.federated_timeline": "സംയുക്തമായ",
"tabs_bar.home": "ഹോം",
"tabs_bar.local_timeline": "പ്രാദേശികം",
"tabs_bar.notifications": "അറിയിപ്പുകൾ",

2
app/javascript/mastodon/locales/mr.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

6
app/javascript/mastodon/locales/nl.json

@ -22,7 +22,7 @@
"account.follows.empty": "Deze gebruiker volgt nog niemand.",
"account.follows_you": "Volgt jou",
"account.hide_reblogs": "Boosts van @{name} verbergen",
"account.joined": "Joined {date}",
"account.joined": "Geregistreerd in {date}",
"account.last_status": "Laatst actief",
"account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}",
"account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie hen kan volgen.",
@ -160,7 +160,7 @@
"empty_column.domain_blocks": "Er zijn nog geen geblokkeerde domeinen.",
"empty_column.favourited_statuses": "Jij hebt nog geen favoriete toots. Wanneer je er een aan jouw favorieten toevoegt, valt deze hier te zien.",
"empty_column.favourites": "Niemand heeft deze toot nog aan hun favorieten toegevoegd. Wanneer iemand dit doet, valt dat hier te zien.",
"empty_column.follow_recommendations": "Looks like no suggestions could be generated for you. You can try using search to look for people you might know or explore trending hashtags.",
"empty_column.follow_recommendations": "Het lijkt er op dat er geen aanbevelingen voor jou aangemaakt kunnen worden. Je kunt proberen te zoeken naar mensen die je wellicht kent, zoeken op hashtags, de lokale en globale tijdlijnen bekijken of de gebruikersgids doorbladeren.",
"empty_column.follow_requests": "Jij hebt nog enkel volgverzoek ontvangen. Wanneer je er eentje ontvangt, valt dat hier te zien.",
"empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.",
"empty_column.home": "Deze tijdlijn is leeg! Volg meer mensen om het te vullen. {suggestions}",
@ -262,7 +262,7 @@
"lists.subheading": "Jouw lijsten",
"load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}",
"loading_indicator.label": "Laden…",
"media_gallery.toggle_visible": "Media verbergen",
"media_gallery.toggle_visible": "{number, plural, one {afbeelding verbergen} other {afbeeldingen verbergen}}",
"missing_indicator.label": "Niet gevonden",
"missing_indicator.sublabel": "Deze hulpbron kan niet gevonden worden",
"mute_modal.duration": "Duur",

2
app/javascript/mastodon/locales/pa.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

4
app/javascript/mastodon/locales/pt-PT.json

@ -1,5 +1,5 @@
{
"account.account_note_header": "A tua nota para @{name}",
"account.account_note_header": "Nota",
"account.add_or_remove_from_list": "Adicionar ou remover das listas",
"account.badges.bot": "Robô",
"account.badges.group": "Grupo",
@ -46,7 +46,7 @@
"account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}",
"account.unmute_notifications": "Deixar de silenciar @{name}",
"account_note.placeholder": "Nenhum comentário fornecido",
"account_note.placeholder": "Clique para adicionar nota",
"alert.rate_limited.message": "Volte a tentar depois das {retry_time, time, medium}.",
"alert.rate_limited.title": "Limite de tentativas",
"alert.unexpected.message": "Ocorreu um erro inesperado.",

2
app/javascript/mastodon/locales/si.json

@ -142,7 +142,7 @@
"emoji_button.food": "ආහාර සහ පාන",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "මිනිසුන්",
"emoji_button.recent": "නිතර භාවිතා වූ",

12
app/javascript/mastodon/locales/sv.json

@ -27,7 +27,7 @@
"account.link_verified_on": "Ägarskap för detta konto kontrollerades den {date}",
"account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa.",
"account.media": "Media",
"account.mention": "Nämna @{name}",
"account.mention": "Nämn @{name}",
"account.moved_to": "{name} har flyttat till:",
"account.mute": "Tysta @{name}",
"account.mute_notifications": "Stäng av notifieringar från @{name}",
@ -90,7 +90,7 @@
"compose_form.hashtag_warning": "Denna toot kommer inte att visas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.",
"compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vem som helst kan följa dig för att se dina inlägg som endast är för följare.",
"compose_form.lock_disclaimer.lock": "låst",
"compose_form.placeholder": "Vad funderar du på?",
"compose_form.placeholder": "Vad tänker du på?",
"compose_form.poll.add_option": "Lägg till ett val",
"compose_form.poll.duration": "Varaktighet för omröstning",
"compose_form.poll.option_placeholder": "Val {number}",
@ -105,7 +105,7 @@
"compose_form.spoiler.marked": "Texten är dold bakom en varning",
"compose_form.spoiler.unmarked": "Texten är inte dold",
"compose_form.spoiler_placeholder": "Skriv din varning här",
"confirmation_modal.cancel": "Ångra",
"confirmation_modal.cancel": "Avbryt",
"confirmations.block.block_and_report": "Blockera & rapportera",
"confirmations.block.confirm": "Blockera",
"confirmations.block.message": "Är du säker på att du vill blockera {name}?",
@ -128,7 +128,7 @@
"confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?",
"conversation.delete": "Radera konversation",
"conversation.mark_as_read": "Markera som läst",
"conversation.open": "Se konversation",
"conversation.open": "Visa konversation",
"conversation.with": "Med {names}",
"directory.federated": "Från känt servernätverk",
"directory.local": "Endast från {domain}",
@ -344,7 +344,7 @@
"privacy.change": "Justera sekretess",
"privacy.direct.long": "Skicka endast till nämnda användare",
"privacy.direct.short": "Direkt",
"privacy.private.long": "Skicka endast till följare",
"privacy.private.long": "Endast synligt för följare",
"privacy.private.short": "Endast följare",
"privacy.public.long": "Skicka till publik tidslinje",
"privacy.public.short": "Publik",
@ -457,7 +457,7 @@
"upload_modal.choose_image": "Välj bild",
"upload_modal.description_placeholder": "En snabb brun räv hoppar över den lata hunden",
"upload_modal.detect_text": "Upptäck bildens text",
"upload_modal.edit_media": "Redigera meida",
"upload_modal.edit_media": "Redigera media",
"upload_modal.hint": "Klicka eller dra cirkeln på förhandstitten för att välja den fokusering som alltid kommer synas på alla miniatyrer.",
"upload_modal.preparing_ocr": "Förbereder OCR…",
"upload_modal.preview_label": "Förhandstitt ({ratio})",

2
app/javascript/mastodon/locales/szl.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/tai.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/th.json

@ -142,7 +142,7 @@
"emoji_button.food": "อาหารและเครื่องดื่ม",
"emoji_button.label": "แทรกอีโมจิ",
"emoji_button.nature": "ธรรมชาติ",
"emoji_button.not_found": "ไม่มีอีโมโจ!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "ไม่พบอีโมจิที่ตรงกัน",
"emoji_button.objects": "วัตถุ",
"emoji_button.people": "ผู้คน",
"emoji_button.recent": "ที่ใช้บ่อย",

2
app/javascript/mastodon/locales/tt.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "Кешеләр",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/ug.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

2
app/javascript/mastodon/locales/ur.json

@ -142,7 +142,7 @@
"emoji_button.food": "Food & Drink",
"emoji_button.label": "Insert emoji",
"emoji_button.nature": "Nature",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "No matching emojis found",
"emoji_button.objects": "Objects",
"emoji_button.people": "People",
"emoji_button.recent": "Frequently used",

44
app/javascript/mastodon/locales/zh-CN.json

@ -29,13 +29,13 @@
"account.media": "媒体",
"account.mention": "提及 @{name}",
"account.moved_to": "{name} 已经迁移到:",
"account.mute": "静音 @{name}",
"account.mute_notifications": "静音来自 @{name} 的通知",
"account.muted": "已静音",
"account.mute": "隐藏 @{name}",
"account.mute_notifications": "隐藏来自 @{name} 的通知",
"account.muted": "已隐藏",
"account.never_active": "从未活跃",
"account.posts": "嘟文",
"account.posts_with_replies": "嘟文和回复",
"account.report": "报 @{name}",
"account.report": "报 @{name}",
"account.requested": "正在等待对方同意。点击以取消发送关注请求",
"account.share": "分享 @{name} 的个人资料",
"account.show_reblogs": "显示来自 @{name} 的转嘟",
@ -44,8 +44,8 @@
"account.unblock_domain": "不再隐藏来自 {domain} 的内容",
"account.unendorse": "不在个人资料中推荐此用户",
"account.unfollow": "取消关注",
"account.unmute": "不再静音 @{name}",
"account.unmute_notifications": "不再静音来自 @{name} 的通知",
"account.unmute": "不再隐藏 @{name}",
"account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
"account_note.placeholder": "点击添加备注",
"alert.rate_limited.message": "请在{retry_time, time, medium}后重试。",
"alert.rate_limited.title": "频率受限",
@ -70,7 +70,7 @@
"column.follow_requests": "关注请求",
"column.home": "主页",
"column.lists": "列表",
"column.mutes": "已静音的用户",
"column.mutes": "已隐藏的用户",
"column.notifications": "通知",
"column.pins": "置顶嘟文",
"column.public": "跨站公共时间轴",
@ -106,7 +106,7 @@
"compose_form.spoiler.unmarked": "正文未被折叠",
"compose_form.spoiler_placeholder": "折叠部分的警告消息",
"confirmation_modal.cancel": "取消",
"confirmations.block.block_and_report": "屏蔽与报",
"confirmations.block.block_and_report": "屏蔽与报",
"confirmations.block.confirm": "屏蔽",
"confirmations.block.message": "你确定要屏蔽 {name} 吗?",
"confirmations.delete.confirm": "删除",
@ -114,12 +114,12 @@
"confirmations.delete_list.confirm": "删除",
"confirmations.delete_list.message": "你确定要永久删除这个列表吗?",
"confirmations.domain_block.confirm": "隐藏整个网站的内容",
"confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,屏蔽或静音几个特定的用户就已经足够了。来自该网站的内容将不再出现在你的任何公共时间轴或通知列表里。来自该网站的关注者将会被移除。",
"confirmations.domain_block.message": "你真的确定要屏蔽所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户就已经足够了。来自该网站的内容将不再出现在你的任何公共时间轴或通知列表里。来自该网站的关注者将会被移除。",
"confirmations.logout.confirm": "登出",
"confirmations.logout.message": "你确定要登出吗?",
"confirmations.mute.confirm": "静音",
"confirmations.mute.confirm": "隐藏",
"confirmations.mute.explanation": "这将隐藏他们的嘟文以及提到他们的嘟文,但他们仍可以看到你的嘟文并关注你。",
"confirmations.mute.message": "你确定要静音 {name} 吗?",
"confirmations.mute.message": "你确定要隐藏 {name} 吗?",
"confirmations.redraft.confirm": "删除并重新编辑",
"confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的转嘟和喜欢都会被清除,回复将会失去关联。",
"confirmations.reply.confirm": "回复",
@ -167,7 +167,7 @@
"empty_column.home.suggestions": "查看一些建议",
"empty_column.list": "此列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。",
"empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。",
"empty_column.mutes": "你没有静音任何用户。",
"empty_column.mutes": "你没有隐藏任何用户。",
"empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。",
"empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了",
"error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。",
@ -178,7 +178,7 @@
"errors.unexpected_crash.report_issue": "报告问题",
"follow_recommendations.done": "完成",
"follow_recommendations.heading": "关注你感兴趣的用户!这里有一些推荐。",
"follow_recommendations.lead": "你关注的人的嘟文将按时间顺序在你的主页上显示。 别担心,你可以随时取消关注!",
"follow_recommendations.lead": "你关注的人的嘟文将按时间顺序在你的主页上显示。 别担心,你可以随时取消关注!",
"follow_request.authorize": "同意",
"follow_request.reject": "拒绝",
"follow_requests.unlocked_explanation": "虽说你没有锁嘟,但是 {domain} 的工作人员觉得你可能想手工审核关注请求。",
@ -226,7 +226,7 @@
"keyboard_shortcuts.legend": "显示此列表",
"keyboard_shortcuts.local": "打开本站时间轴",
"keyboard_shortcuts.mention": "提及嘟文作者",
"keyboard_shortcuts.muted": "打开已静音的用户列表",
"keyboard_shortcuts.muted": "打开已隐藏用户列表",
"keyboard_shortcuts.my_profile": "打开你的个人资料",
"keyboard_shortcuts.notifications": "打开通知栏",
"keyboard_shortcuts.open_media": "打开媒体",
@ -278,14 +278,14 @@
"navigation_bar.domain_blocks": "已屏蔽的网站",
"navigation_bar.edit_profile": "修改个人资料",
"navigation_bar.favourites": "喜欢",
"navigation_bar.filters": "静音关键词",
"navigation_bar.filters": "隐藏关键词",
"navigation_bar.follow_requests": "关注请求",
"navigation_bar.follows_and_followers": "关注管理",
"navigation_bar.info": "关于本站",
"navigation_bar.keyboard_shortcuts": "快捷键列表",
"navigation_bar.lists": "列表",
"navigation_bar.logout": "登出",
"navigation_bar.mutes": "已静音的用户",
"navigation_bar.mutes": "已隐藏的用户",
"navigation_bar.personal": "个人",
"navigation_bar.pins": "置顶嘟文",
"navigation_bar.preferences": "首选项",
@ -360,12 +360,12 @@
"relative_time.seconds": "{number}秒",
"relative_time.today": "今天",
"reply_indicator.cancel": "取消",
"report.forward": "转发报至 {target}",
"report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的报?",
"report.hint": "报将会发送给你所在服务器的监察员。你可以在下面填写报该用户的理由:",
"report.forward": "转发报至 {target}",
"report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的报?",
"report.hint": "报将会发送给你所在服务器的监察员。你可以在下面填写报该用户的理由:",
"report.placeholder": "备注",
"report.submit": "提交",
"report.target": "报 {target}",
"report.target": "报 {target}",
"search.placeholder": "搜索",
"search_popout.search_format": "高级搜索格式",
"search_popout.tips.full_text": "输入关键词检索所有你发送、喜欢、转嘟过或提及到你的嘟文,以及其他用户公开的用户名、昵称和话题标签。",
@ -395,7 +395,7 @@
"status.media_hidden": "已隐藏的媒体内容",
"status.mention": "提及 @{name}",
"status.more": "更多",
"status.mute": "静音 @{name}",
"status.mute": "隐藏 @{name}",
"status.mute_conversation": "将此对话静音",
"status.open": "展开嘟文",
"status.pin": "在个人资料页面置顶",
@ -409,7 +409,7 @@
"status.remove_bookmark": "移除书签",
"status.reply": "回复",
"status.replyAll": "回复所有人",
"status.report": "报 @{name}",
"status.report": "报 @{name}",
"status.sensitive_warning": "敏感内容",
"status.share": "分享",
"status.show_less": "隐藏内容",

12
app/javascript/mastodon/locales/zh-TW.json

@ -25,7 +25,7 @@
"account.joined": "加入於 {date}",
"account.last_status": "上次活躍時間",
"account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限",
"account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳號的人。",
"account.locked_info": "此帳戶的隱私狀態被設為鎖定。該擁有者會手動審核能關注此帳戶的人。",
"account.media": "媒體",
"account.mention": "提及 @{name}",
"account.moved_to": "{name} 已遷移至:",
@ -114,7 +114,7 @@
"confirmations.delete_list.confirm": "刪除",
"confirmations.delete_list.message": "確定永久刪除此名單?",
"confirmations.domain_block.confirm": "隱藏整個域名",
"confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳號就能滿足需求了。您將不能在任何公開的時間軸及通知中看到此網域的內容。您來自該網域的關注者也將被移除。",
"confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 網域嗎?大部分情況下,您只需要封鎖或靜音少數特定的帳帳戶能滿足需求了。您將不能在任何公開的時間軸及通知中看到此網域的內容。您來自該網域的關注者也將被移除。",
"confirmations.logout.confirm": "登出",
"confirmations.logout.message": "確定要登出嗎?",
"confirmations.mute.confirm": "靜音",
@ -150,7 +150,7 @@
"emoji_button.search_results": "搜尋結果",
"emoji_button.symbols": "符號",
"emoji_button.travel": "旅遊與地點",
"empty_column.account_suspended": "帳被暫停",
"empty_column.account_suspended": "帳被暫停",
"empty_column.account_timeline": "這裡還沒有嘟文!",
"empty_column.account_unavailable": "無法取得個人資料",
"empty_column.blocks": "您還沒有封鎖任何使用者。",
@ -181,7 +181,7 @@
"follow_recommendations.lead": "來自您追蹤的人的貼文將會按時間順序顯示在您的家 feed 上。不要害怕犯錯,您隨時都可以取消追蹤其他人!",
"follow_request.authorize": "授權",
"follow_request.reject": "拒絕",
"follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳號的追蹤請求。",
"follow_requests.unlocked_explanation": "即便您的帳戶未被鎖定,{domain} 的員工認為您可能想要自己審核這些帳戶的追蹤請求。",
"generic.saved": "已儲存",
"getting_started.developers": "開發者",
"getting_started.directory": "個人資料目錄",
@ -189,7 +189,7 @@
"getting_started.heading": "開始使用",
"getting_started.invite": "邀請使用者",
"getting_started.open_source_notice": "Mastodon 是開源軟體。您可以在 GitHub {github} 上貢獻或是回報問題。",
"getting_started.security": "帳安全性設定",
"getting_started.security": "帳安全性設定",
"getting_started.terms": "服務條款",
"hashtag.column_header.tag_mode.all": "以及 {additional}",
"hashtag.column_header.tag_mode.any": "或是 {additional}",
@ -432,7 +432,7 @@
"time_remaining.minutes": "剩餘{number, plural, one {# 分鐘} other {# 分鐘}}",
"time_remaining.moments": "剩餘時間",
"time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}",
"timeline_hint.remote_resource_not_displayed": "不會顯示來自其他服器的 {resource}",
"timeline_hint.remote_resource_not_displayed": "不會顯示來自其他服器的 {resource}",
"timeline_hint.resources.followers": "關注者",
"timeline_hint.resources.follows": "正在關注",
"timeline_hint.resources.statuses": "更早的嘟文",

65
app/javascript/styles/mastodon/emoji_picker.scss

@ -48,6 +48,8 @@
overflow: hidden;
transition: color .1s ease-out;
cursor: pointer;
background: transparent;
border: 0;
&:hover {
color: darken($lighter-text-color, 4%);
@ -106,11 +108,13 @@
padding: 10px;
padding-right: 45px;
background: $simple-background-color;
position: relative;
input {
font-size: 14px;
font-weight: 400;
padding: 7px 9px;
padding-right: 25px;
font-family: inherit;
display: block;
width: 100%;
@ -131,6 +135,30 @@
}
}
.emoji-mart-search-icon {
position: absolute;
top: 18px;
right: 45px + 5px;
z-index: 2;
padding: 2px 5px 1px;
border: 0;
background: none;
transition: all 100ms linear;
transition-property: opacity;
pointer-events: auto;
opacity: 0.7;
&:disabled {
cursor: default;
pointer-events: none;
opacity: 0.3;
}
svg {
fill: $action-button-color;
}
}
.emoji-mart-category .emoji-mart-emoji {
cursor: pointer;
@ -169,9 +197,36 @@
}
}
/* For screenreaders only, via https://stackoverflow.com/a/19758620 */
.emoji-mart-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
.emoji-mart-category-list {
margin: 0;
padding: 0;
}
.emoji-mart-category-list li {
list-style: none;
margin: 0;
padding: 0;
display: inline-block;
}
.emoji-mart-emoji {
position: relative;
display: inline-block;
background: transparent;
border: 0;
padding: 0;
font-size: 0;
span {
@ -182,19 +237,17 @@
.emoji-mart-no-results {
font-size: 14px;
color: $light-text-color;
text-align: center;
padding: 5px 6px;
padding-top: 70px;
color: $light-text-color;
.emoji-mart-category-label {
display: none;
}
.emoji-mart-no-results-label {
.emoji-mart-no-results-label {
margin-top: .2em;
}
.emoji-mart-emoji:hover::before {
cursor: default;
content: none;
}
}

6
app/javascript/styles/mastodon/widgets.scss

@ -1,3 +1,5 @@
@use "sass:math";
.hero-widget {
margin-bottom: 10px;
box-shadow: 0 0 15px rgba($base-shadow-color, 0.2);
@ -498,10 +500,10 @@ $fluid-breakpoint: $maximum-width + 20px;
}
&__item {
width: (960px - 20px) / 3;
width: math.div(960px - 20px, 3);
@media screen and (max-width: $fluid-breakpoint) {
width: (940px - 20px) / 3;
width: math.div(940px - 20px, 3);
}
@media screen and (max-width: 640px) {

3
app/models/account_stat.rb

@ -11,10 +11,11 @@
# created_at :datetime not null
# updated_at :datetime not null
# last_status_at :datetime
# lock_version :integer default(0), not null
#
class AccountStat < ApplicationRecord
self.locking_column = nil
belongs_to :account, inverse_of: :account_stat
update_index('accounts#account', :account)

2