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

master
Claire 3 years ago
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
  101. Some files were not shown because too many files have changed in this diff Show More

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

@ -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

@ -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)

@ -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

@ -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

@ -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
/>

@ -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);
});

File diff suppressed because one or more lines are too long

@ -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;
};

@ -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",

@ -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"

@ -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",

@ -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",

@ -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 a