`
+ * return helper.h('div.some-class', helper.h('p', 'paragraph'));
+ * ```
+ **/
+ // h() is attached via `prototype` below
+
+ /**
+ * Returns the model associated with this widget. When decorating
+ * posts this will normally be the post.
+ *
+ * Example:
+ *
+ * ```
+ * const post = helper.getModel();
+ * console.log(post.get('id'));
+ * ```
+ **/
+ getModel() {
+ return this.widget.findAncestorModel();
+ }
+
+ /**
+ * If your decorator must produce raw HTML, you can use this helper
+ * to display it. It is preferred to use the `h` helper and create
+ * the HTML yourself whenever possible.
+ *
+ * Example:
+ *
+ * ```
+ * return helper.rawHtml(`
I will be displayed
Cook me`);
+ * ```
+ **/
+ cooked(cookedText) {
+ return new PostCooked({ cookedText });
+ }
+
+ /**
+ * You can use this bridge to mount an Ember View inside the virtual
+ * DOM post stream. Note that this is a bit bizarre, as our core app
+ * is rendered in Ember, then we switch to a virtual dom, and this
+ * allows part of that virtual dom to use Ember again!
+ *
+ * It really only exists as backwards compatibility for some old
+ * plugins that would be difficult to update otherwise. There are
+ * performance reasons not to use this, so be careful and avoid
+ * using it whenever possible.
+ *
+ * Example:
+ *
+ * ```
+ * helper.connect({ templateName: 'my-handlebars-template' });
+ * ```
+ **/
+ connect(details) {
+ return new Connector(this.widget, details);
+ }
+
+}
+DecoratorHelper.prototype.h = h;
+
+export default DecoratorHelper;
diff --git a/app/assets/javascripts/discourse/widgets/embedded-post.js.es6 b/app/assets/javascripts/discourse/widgets/embedded-post.js.es6
new file mode 100644
index 0000000000..767044ccb9
--- /dev/null
+++ b/app/assets/javascripts/discourse/widgets/embedded-post.js.es6
@@ -0,0 +1,42 @@
+import RawHtml from 'discourse/widgets/raw-html';
+import { createWidget } from 'discourse/widgets/widget';
+import { h } from 'virtual-dom';
+import { iconNode } from 'discourse/helpers/fa-icon';
+import DiscourseURL from 'discourse/lib/url';
+
+createWidget('post-link-arrow', {
+ html(attrs) {
+ if (attrs.above) {
+ return h('a.post-info.arrow', {
+ attributes: { title: I18n.t('topic.jump_reply_up') }
+ }, iconNode('arrow-up'));
+ } else {
+ return h('a.post-info.arrow', {
+ attributes: { title: I18n.t('topic.jump_reply_down') }
+ }, iconNode('arrow-down'));
+ }
+ },
+
+ click() {
+ DiscourseURL.routeTo(this.attrs.shareUrl);
+ }
+});
+
+export default createWidget('embedded-post', {
+ buildKey: attrs => `embedded-post-${attrs.id}`,
+
+ html(attrs, state) {
+ return [
+ h('div.row', [
+ this.attach('post-avatar', attrs),
+ h('div.topic-body', [
+ h('div.topic-meta-data', [
+ this.attach('poster-name', attrs),
+ this.attach('post-link-arrow', { above: state.above, shareUrl: attrs.shareUrl })
+ ]),
+ new RawHtml({html: `
'
bottom:
latest: "لا يوجد المزيد من المواضيع الحديثة"
hot: "هذه كل المواضيع التي عليها إقبال عالي حتى هذه اللحظة"
@@ -1583,18 +1582,6 @@ ar:
bookmark: "التراجع عن التفضيل"
like: "التراجع عن الإعجاب"
vote: "التراجع عن التصويت"
- people:
- off_topic: "{{icons}} بلغ أن هذا لاعلاقة له بالموضوع"
- spam: "{{icons}} بلغ انه هذا هو سبام"
- spam_with_url: "{{icons}} بُلغ انه غير مرغوب به"
- inappropriate: "{{icons}} بلغ أنه غير لائق"
- notify_moderators: "{{icons}} تنبيه المشرف"
- notify_moderators_with_url: "{{icons}} نبه المشرف"
- notify_user: "{{icons}} رسالة مُرسلة."
- notify_user_with_url: "{{icons}} أرسلت message ."
- bookmark: "{{icons}} اضف في المفضلة"
- like: "{{icons}} استحسان"
- vote: "{{icons}} صوت لهذا"
by_you:
off_topic: "لقد تم الإبلاغ عن الموضوع على أنه ليس في المكان الصحيح"
spam: "تم الإبلاغ عن الموضوع على أنه سبام"
@@ -2267,11 +2254,9 @@ ar:
is_disabled: "Restore is disabled in the site settings."
label: "استعادة"
title: "اعادة تخزين النسخة الاحتياطية"
- confirm: "هل أنت متأكد من رغبتك في اعادة تخزين النسخة الاحتياطية؟"
rollback:
label: "اعادة السنخة السابقة"
title: "Rollback the database to previous working state"
- confirm: "Are your sure you want to rollback the database to the previous working state?"
export_csv:
user_archive_confirm: "هل أنت متأكد من رغبتك في تحميل جميع مشاركاتك ؟"
success: "بدأ التصدير, سيتم إعلامك برسالة عند اكتمال العملية."
@@ -2374,9 +2359,6 @@ ar:
love:
name: 'إعجاب'
description: "لون زر الإعجاب."
- wiki:
- name: 'ويكي'
- description: "اللون الأساسي المستخدم كخلفية لمشاركات الويكي."
email:
title: "رسائل البريد الالكتروني"
settings: "اعدادات"
@@ -3078,20 +3060,20 @@ ar:
name: الرابط الأول
description: اضافة رابط لموضوع اخر
first_quote:
- name: التعليق الأول
- description: إقتباسات
+ name: أول اقتباس
+ description: اقتبس من عضو
read_guidelines:
name: اقرأ التعليمات
description: اطلع على توجيهات المجتمع
reader:
name: قارئ
- description: قراءة أكثر من 100 تعليق في الموضوع
+ description: قراءة جميع المشاركات في موضوع فيه أكثر من 100 مشاركة
popular_link:
name: رابط مشهور
description: شارك رابط خارجي بـ 50 نقرة على الأقل.
hot_link:
name: الرابط الساخن
- description: شارك الرابط الخارجي بـ 300 نقرة على الأقل.
+ description: شارك رابط خارجي بـ 300 نقرة على الأقل.
famous_link:
name: رابط مشهور
description: شارك الرابط الخارجي بـ 1000 نقرة على الأقل
diff --git a/config/locales/client.bs_BA.yml b/config/locales/client.bs_BA.yml
index d2dc34c974..822c23ebde 100644
--- a/config/locales/client.bs_BA.yml
+++ b/config/locales/client.bs_BA.yml
@@ -515,8 +515,8 @@ bs_BA:
last_post: Zadnji post
summary:
enabled_description: "You're viewing a summary of this topic: the most interesting posts as determined by the community."
- description: "There are {{count}} replies."
- description_time: "There are {{count}} replies with an estimated read time of {{readingTime}} minutes."
+ description: "There are {{replyCount}} replies."
+ description_time: "There are {{replyCount}} replies with an estimated read time of {{readingTime}} minutes."
enable: 'Summarize This Topic'
disable: 'Show All Posts'
deleted_filter:
diff --git a/config/locales/client.cs.yml b/config/locales/client.cs.yml
index 187f5a0080..1c5aa2ea00 100644
--- a/config/locales/client.cs.yml
+++ b/config/locales/client.cs.yml
@@ -697,8 +697,8 @@ cs:
value_prop: "Pokud si založíš účet, budeme si přesně pomatovat, co jsi četly, takže se vždycky vrátíš do bodu, odkud jsi odešel. Také budeš dostávat upozornění, zde a přes e-mail, kdykoli přibydou nově příspěvky. A můžeš přidávat 'to se mi líbí' a šířit tak lásku. :heartbeat:"
summary:
enabled_description: "Čtete shrnutí tohoto tématu: nejzajímavější příspěvky podle komunity."
- description: "Obsahuje {{count}} odpovědí."
- description_time: "Obsahuje {{count}} odpovědí o odhadovaném času čtení {{readingTime}} minut."
+ description: "Obsahuje {{replyCount}} odpovědí."
+ description_time: "Obsahuje {{replyCount}} odpovědí o odhadovaném času čtení {{readingTime}} minut."
enable: 'Přepnout na "nejlepší příspěvky"'
disable: 'Přepnout na normální zobrazení'
deleted_filter:
diff --git a/config/locales/client.da.yml b/config/locales/client.da.yml
index 9c65da8741..e971423ded 100644
--- a/config/locales/client.da.yml
+++ b/config/locales/client.da.yml
@@ -100,6 +100,8 @@ da:
x_years:
one: "1 år senere"
other: "%{count} år senere"
+ previous_month: 'Forrige måned'
+ next_month: 'Næste måned'
share:
topic: 'del et link til dette emne'
post: 'indlæg #%{postNumber}'
@@ -110,6 +112,8 @@ da:
email: 'send dette link i en e-mail'
action_codes:
split_topic: "delte dette emne op %{when}"
+ invited_user: "Inviterede %{who} %{when}"
+ removed_user: "fjernede %{who} %{when}"
autoclosed:
enabled: 'lukket %{when}'
disabled: 'åbnet %{when}'
@@ -173,6 +177,7 @@ da:
other: "{{count}} tegn"
suggested_topics:
title: "Foreslåede emner"
+ pm_title: "Foreslåede beskeder"
about:
simple_title: "Om"
title: "Om %{title}"
@@ -294,6 +299,12 @@ da:
one: "1 bruger"
other: "%{count} brugere"
groups:
+ empty:
+ posts: "Der er ingen indlæg af medlemmer af denne gruppe."
+ members: "Der er ingen medlemmer i denne gruppe."
+ mentions: "Denne gruppe er ikke nævnt."
+ messages: "Der er ingen besked til denne gruppe."
+ topics: "Der er intet emne af medlemmer af denne gruppe."
add: "Tilføj"
selector_placeholder: "Tilføj medlemmer"
owner: "ejer"
@@ -313,6 +324,19 @@ da:
trust_levels:
title: "Tillidsniveau der automatisk tildeles medlemmer når de oprettes:"
none: "Ingen"
+ notifications:
+ watching:
+ title: "Kigger"
+ description: "Du får beskeder om hvert nyt indlæg i hver besked og antallet af nye svar bliver vist."
+ tracking:
+ title: "Følger"
+ description: "Du får besked hvis nogen nævner dit @navn eller svarer dig og antallet af nye svar bliver vist."
+ regular:
+ title: "Normal"
+ description: "Du får besked hvis nogen nævner dit @navn "
+ muted:
+ title: "Tavs"
+ description: "Du får aldrig beskeder om nye emner i denne gruppe."
user_action_groups:
'1': "Likes givet"
'2': "Likes modtaget"
@@ -331,6 +355,7 @@ da:
all_subcategories: "Alle"
no_subcategory: "ingen"
category: "Kategori"
+ category_list: "Vis liste over kategorier"
reorder:
title: "Ret kategoriernes rækkefølge "
title_long: "Omorganiser listen over kategorier"
@@ -387,11 +412,13 @@ da:
invited_by: "Inviteret af"
trust_level: "Tillidsniveau"
notifications: "Underretninger"
+ statistics: "Statistik"
desktop_notifications:
label: "Desktop-notifikationer"
not_supported: "Notifikationer understøttes ikke af denne browser. Beklager."
perm_default: "Slå notifikationer til"
perm_denied_btn: "Tilladelse nægtet"
+ perm_denied_expl: "Du nægtede adgang for notifikationer. Tillad notifikationer via indstillingerne i din browser."
disable: "Deaktiver notifikationer"
currently_enabled: "(slået til)"
enable: "Aktiver notifikationer"
@@ -439,7 +466,15 @@ da:
warnings_received: "advarsler"
messages:
all: "Alle"
+ inbox: "Indbakke"
+ sent: "Sendt"
+ archive: "Arkiv"
groups: "Mine grupper"
+ bulk_select: "Vælg beskeder"
+ move_to_inbox: "Flyt til Indbakke"
+ move_to_archive: "Arkiv"
+ failed_to_move: "Kunne ikke flytte valgt beskeder (måske problemer med netværket)"
+ select_all: "Vælg alle"
change_password:
success: "(e-mail sendt)"
in_progress: "(sender e-mail)"
@@ -596,6 +631,21 @@ da:
same_as_email: "Dit password er det samme som din email adresse."
ok: "Din adgangskode ser fin ud."
instructions: "Mindst %{count} tegn"
+ summary:
+ title: "Resume"
+ stats: "Statistik"
+ topic_count: "Emner oprettet"
+ post_count: "Indlæg oprettet"
+ likes_given: "Likes givet"
+ likes_received: "Likes modtaget"
+ days_visited: "Dage besøgt"
+ posts_read_count: "Indlæg læst"
+ top_replies: "Top svar"
+ top_topics: "Top emner"
+ top_badges: "Top badges"
+ more_topics: "Flere emner"
+ more_replies: "Flere svar"
+ more_badges: "Flere badges"
associated_accounts: "Logins"
ip_address:
title: "Sidste IP-adresse"
@@ -667,8 +717,8 @@ da:
value_prop: "Når du opretter en konto, så kan vi huske hvad du har læst, så du altid kan fortsætte, hvor du er kommet til. Du får også notifikationer - her og på email - når nye interessante indlæg postes. Og du kan like indlæg og dele begejstringen. :heartbeat:"
summary:
enabled_description: "Du ser et sammendrag af dette emne: kun de mest interessante indlæg som andre finder interresante."
- description: "Der er {{count}} svar."
- description_time: "Der er {{count}} svar og det vil tage ca. {{readingTime}} minutter at læse."
+ description: "Der er {{replyCount}} svar."
+ description_time: "Der er {{replyCount}} svar og det vil tage ca. {{readingTime}} minutter at læse."
enable: 'Opsummér dette emne'
disable: 'Vis alle indlæg'
deleted_filter:
@@ -752,6 +802,7 @@ da:
ctrl: 'Ctrl'
alt: 'Alt'
composer:
+ emoji: "Emoji :)"
more_emoji: "mere..."
options: "Indstillinger"
whisper: "hvisken"
@@ -848,6 +899,9 @@ da:
moved_post: "
{{username}} moved {{description}}
"
linked: "
{{username}} {{description}}
"
granted_badge: "
Du blev tildelt '{{description}}'
"
+ group_message_summary:
+ one: "
{{count}} besked i din {{group_name}} inbox
"
+ other: "
{{count}} beskeder i din {{group_name}} inbox
"
alt:
mentioned: "Nævnt af"
quoted: "Citeret af"
@@ -862,8 +916,10 @@ da:
moved_post: "Dit indlæg blev flyttet af"
linked: "Link til dit indlæg"
granted_badge: "Badge tildelt"
+ group_message_summary: "Besker i gruppens indbakke"
popup:
mentioned: '{{username}} nævnte dig i "{{topic}}" - {{site_title}}'
+ group_mentioned: '{{username}} nævnte dig i "{{topic}}" - {{site_title}}'
quoted: '{{username}} citerede dig i "{{topic}}" - {{site_title}}'
replied: '{{username}} svarede dig i "{{topic}}" - {{site_title}}'
posted: '{{username}} skrev i "{{topic}}" - {{site_title}}'
@@ -964,6 +1020,12 @@ da:
create: 'Nyt emne'
create_long: 'Opret et nyt emne i debatten'
private_message: 'Start en besked'
+ archive_message:
+ help: 'Flyt beskeder til dit arkiv'
+ title: 'Arkiv'
+ move_to_inbox:
+ title: 'Flyt til Indbakke'
+ help: 'Flyt beskeder tilbage til Indbakke'
list: 'Emner'
new: 'nyt emne'
unread: 'ulæste'
@@ -1014,6 +1076,7 @@ da:
auto_close_title: 'Indstillinger for automatisk lukning'
auto_close_save: "Gem"
auto_close_remove: "Luk ikke dette emne automatisk"
+ auto_close_immediate: "Seneste indlæg i emnet er allerede %{hours} timer gammelt så emnet bliver lukket med det samme."
progress:
title: emnestatus
go_top: "top"
@@ -1134,6 +1197,7 @@ da:
success: "Vi har inviteret denne bruger til at være med i denne besked."
error: "Beklager, der skete en fejl, da vi forsøgte at invitere brugeren."
group_name: "gruppe navn"
+ controls: "Emnestyring"
invite_reply:
title: 'Invitér'
username_placeholder: "brugernavn"
@@ -1250,6 +1314,8 @@ da:
yes_value: "Ja"
via_email: "dette indlæg blev oprettet via email"
whisper: "dette indlæg er en privat hvisken for moderatorer"
+ wiki:
+ about: "dette indlæg er en wiki"
archetypes:
save: 'Gem indstillinger'
controls:
@@ -1682,6 +1748,7 @@ da:
refresh_report: "Genopfrisk rapporten"
start_date: "Start dato"
end_date: "Slut dato"
+ groups: "Alle grupper"
commits:
latest_changes: "Seneste ændringer: opdatér ofte!"
by: "af"
@@ -1964,13 +2031,17 @@ da:
name: 'wiki'
description: "Basis farven der bruges som baggrund i wiki posts."
email:
+ title: "Emails"
settings: "Indstillinger"
+ templates: "Skabeloner"
preview_digest: "Forhåndsvisning af sammendrag"
sending_test: "Sender test email..."
error: "ERROR - %{server_error}"
test_error: "Der opstod et problem med at sende test emailen. Dobbelt check dine email indstillinger, verificer at din server ikke blokerer email forbindelser og prøv så igen."
sent: "Sendt"
skipped: "Droppet"
+ received: "Modtaget"
+ rejected: "Afvist"
sent_at: "Sendt"
time: "Tidspunkt"
user: "Bruger"
@@ -1988,6 +2059,19 @@ da:
last_seen_user: "Sidst sete bruge:"
reply_key: "Svarnøgle"
skipped_reason: "Begrundelse"
+ incoming_emails:
+ from_address: "Fra"
+ to_addresses: "Til"
+ cc_addresses: "Cc"
+ subject: "Emne"
+ error: "Fejl"
+ none: "Ingen indkommende emails fundet"
+ filters:
+ from_placeholder: "from@example.com"
+ to_placeholder: "to@example.com"
+ cc_placeholder: "cc@example.com"
+ subject_placeholder: "Emne..."
+ error_placeholder: "Fejl"
logs:
none: "Ingen logs fundet"
filters:
@@ -2037,6 +2121,7 @@ da:
change_site_setting: "skift indstillinger for site"
change_site_customization: "skift tilpasning af site"
delete_site_customization: "slet tilpasning af site"
+ change_site_text: "skift tekst for site"
suspend_user: "suspendér user"
unsuspend_user: "ophæv suspendering af bruger"
grant_badge: "tildel badge"
@@ -2050,6 +2135,12 @@ da:
change_category_settings: "ret kategori-indstillinger"
delete_category: "slet kategori"
create_category: "opret kategori"
+ block_user: "bloker bruger"
+ unblock_user: "fjern blokering af bruger"
+ grant_admin: "tildel admin"
+ revoke_admin: "fjern admin"
+ grant_moderation: "tildel moderation"
+ revoke_moderation: "fjern moderation"
screened_emails:
title: "Blokerede e-mails"
description: "Følgende e-mail-adresser kontrolleres når nogen prøver at oprette en konto, og oprettelsen vil enten blive blokeret, eller der vil blive foretaget en anden handling."
@@ -2215,6 +2306,8 @@ da:
deactivate_failed: "Der opstod et problem ved deaktivering af brugeren."
unblock_failed: 'Der opstod et problem ved ophævelsen af brugerens blokering.'
block_failed: 'Der opstod et problem ved blokering af brugeren.'
+ block_confirm: 'Er du sikker på, at du vil blokere brugeren? Bruger kan ikke længere oprette emner eller indlæg.'
+ block_accept: 'Ja, bloker brugeren'
deactivate_explanation: "En deaktiveret bruger skal genvalidere deres e-mail."
suspended_explanation: "En suspenderet bruger kan ikke logge ind."
block_explanation: "En blokeret bruger kan ikke oprette indlæg eller starte emner."
@@ -2228,6 +2321,7 @@ da:
unlock_trust_level: "Lås tillidsniveau op"
tl3_requirements:
title: "Krav for fortrolighedsniveau 3"
+ table_title: "I de sidste %{time_period} dage:"
value_heading: "værdi"
requirement_heading: "Obligatoriske"
visits: "Besøg"
@@ -2495,6 +2589,10 @@ da:
mark_tracking: 'm, t Følg emne'
mark_watching: 'm, w Iagtag emne'
badges:
+ earned_n_times:
+ one: "Fortjente dette badge 1 gang"
+ other: "Fortjente dette badge %{count} gange."
+ more_with_badge: "Andre med dette badge"
title: Badges
allow_title: "kan bruges som titel"
multiple_grant: "kan gives flere gange"
diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml
index 30a9605535..f726d1e024 100644
--- a/config/locales/client.de.yml
+++ b/config/locales/client.de.yml
@@ -372,7 +372,7 @@ de:
reorder:
title: "Kategorien neu sortieren"
title_long: "Neustrukturierung der Kategorieliste"
- fix_order: "Positionen fixieren"
+ fix_order: "Positionen korrigieren"
fix_order_tooltip: "Nicht alle Kategorien haben eine eindeutige Positionsnummer, was zu unerwarteten Ergebnissen führen kann."
save: "Reihenfolge speichern"
apply_all: "Anwenden"
@@ -459,7 +459,7 @@ de:
tracked_categories: "Verfolgt"
tracked_categories_instructions: "Du wirst automatisch allen neuen Themen in diesen Kategorien folgen. Die Anzahl der neuen Antworten wird bei den betroffenen Themen angezeigt."
muted_categories: "Stummgeschaltet"
- muted_categories_instructions: "Du erhältst keine Benachrichtigungen über neue Themen in dieser Kategorie und die Themen werden auch nicht in der Liste der letzten Themen erscheinen."
+ muted_categories_instructions: "Du erhältst keine Benachrichtigungen über neue Themen in dieser Kategorie und die Themen werden auch nicht in der Liste der aktuellen Themen erscheinen."
delete_account: "Lösche mein Benutzerkonto"
delete_account_confirm: "Möchtest du wirklich dein Benutzerkonto permanent löschen? Diese Aktion kann nicht rückgängig gemacht werden!"
deleted_yourself: "Dein Benutzerkonto wurde erfolgreich gelöscht."
@@ -731,8 +731,8 @@ de:
value_prop: "Wenn du ein Benutzerkonto anlegst, merken wir uns, was du gelesen hast, damit du immer dort fortsetzten kannst, wo du aufgehört hast. Du kannst auch Benachrichtigungen – hier oder per E-Mail – erhalten, wenn neue Beiträge verfasst werden. Beiträge, die dir gefallen, kannst du mit einem Like versehen und diese Freude mit allen teilen. :heartbeat:"
summary:
enabled_description: "Du siehst gerade eine Zusammenfassung des Themas: die interessantesten Beiträge, die von der Community bestimmt wurden."
- description: "Es gibt {{count}} Antworten."
- description_time: "Es gibt {{count}} Antworten mit einer geschätzten Lesezeit von {{readingTime}} Minuten."
+ description: "Es gibt {{replyCount}} Antworten."
+ description_time: "Es gibt {{replyCount}} Antworten mit einer geschätzten Lesezeit von {{readingTime}} Minuten."
enable: 'Zusammenfassung vom Thema erstellen'
disable: 'Alle Beiträge anzeigen'
deleted_filter:
@@ -2068,7 +2068,7 @@ de:
format: "Format"
html: "HTML"
text: "Text"
- last_seen_user: "Letzter Benutzer:"
+ last_seen_user: "Benutzer zuletzt gesehen:"
reply_key: "Antwort-Schlüssel"
skipped_reason: "Grund des Überspringens"
incoming_emails:
@@ -2254,7 +2254,7 @@ de:
moderator: "Moderator?"
admin: "Administrator?"
blocked: "Geblockt?"
- staged: "Insziniert?"
+ staged: "Vorbereitet?"
show_admin_profile: "Administration"
edit_title: "Titel bearbeiten"
save_title: "Titel speichern"
@@ -2324,7 +2324,7 @@ de:
deactivate_explanation: "Ein deaktivierter Benutzer muss seine E-Mail-Adresse erneut bestätigen."
suspended_explanation: "Ein gesperrter Benutzer kann sich nicht anmelden."
block_explanation: "Ein geblockter Benutzer kann keine Themen erstellen oder Beiträge veröffentlichen."
- stage_explanation: "Ein inszenierter Nutzer kann nur via E-Mail zu gewissen Themen beitragen."
+ stage_explanation: "Ein vorbereiteter Nutzer kann nur via E-Mail zu gewissen Themen beitragen."
trust_level_change_failed: "Beim Wechsel der Vertrauensstufe ist ein Fehler aufgetreten."
suspend_modal_title: "Benutzer sperren"
trust_level_2_users: "Benutzer mit Vertrauensstufe 2"
@@ -2525,7 +2525,7 @@ de:
crawling_description: "Wenn Discourse Themen für deine Beiträge erstellt wird es falls kein RSS/ATOM-Feed verfügbar ist versuchen, den Inhalt aus dem HTML-Code zu extrahieren. Dies ist teilweise schwierig, weshalb hier CSS-Regeln angegeben werden können, die die Extraktion erleichtern."
embed_by_username: "Benutzername für Beitragserstellung"
embed_post_limit: "Maximale Anzahl der Beiträge, welche eingebettet werden"
- embed_username_key_from_feed: "Schlüssel, um Discourse-Benutzernamen aus Feed zu extrahieren."
+ embed_username_key_from_feed: "Schlüssel, um Discourse-Benutzernamen aus Feed zu ermitteln."
embed_truncate: "Kürze die eingebetteten Beiträge"
embed_whitelist_selector: "CSS Selektor für Elemente, die in Einbettungen erlaubt sind."
embed_blacklist_selector: "CSS Selektor für Elemente, die in Einbettungen entfernt werden."
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 6891ca5432..af4246d77d 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -193,6 +193,8 @@ en:
more: "More"
less: "Less"
never: "never"
+ every_30_minutes: "every 30 minutes"
+ every_hour: "every hour"
daily: "daily"
weekly: "weekly"
every_two_weeks: "every two weeks"
@@ -511,7 +513,7 @@ en:
muted_users: "Muted"
muted_users_instructions: "Suppress all notifications from these users."
muted_topics_link: "Show muted topics"
- automatically_unpin_topics: "Automatically unpin topics when you reach the bottom."
+ automatically_unpin_topics: "Automatically unpin topics when I reach the bottom."
staff_counters:
flags_given: "helpful flags"
@@ -627,18 +629,27 @@ en:
website: "Web Site"
email_settings: "Email"
+ like_notification_frequency:
+ title: "Notify when liked"
+ always: "Always"
+ first_time_and_daily: "First time a post is liked and daily"
+ first_time: "First time a post is liked"
+ never: "Never"
email_previous_replies:
- title: "Include previous replies"
+ title: "Include previous replies at the bottom of emails"
unless_emailed: "unless previously sent"
always: "always"
never: "never"
email_digests:
title: "When I don't visit here, send an email digest of what's new:"
+ every_30_minutes: "every 30 minutes"
+ every_hour: "hourly"
daily: "daily"
every_three_days: "every three days"
weekly: "weekly"
every_two_weeks: "every two weeks"
+ email_in_reply_to: "Include an excerpt of replied to post in emails"
email_direct: "Send me an email when someone quotes me, replies to my post, mentions my @username, or invites me to a topic"
email_private_messages: "Send me an email when someone messages me"
email_always: "Send me email notifications even when I am active on the site"
@@ -776,9 +787,11 @@ en:
read_only_mode:
enabled: "This site is in read only mode. Please continue to browse, but replying, likes, and other actions are disabled for now."
login_disabled: "Login is disabled while the site is in read only mode."
+ logout_disabled: "Logout is disabled while the site is in read only mode."
too_few_topics_and_posts_notice: "Let's get this discussion started! There are currently %{currentTopics} / %{requiredTopics} topics and %{currentPosts} / %{requiredPosts} posts. New visitors need some conversations to read and respond to."
too_few_topics_notice: "Let's get this discussion started! There are currently %{currentTopics} / %{requiredTopics} topics. New visitors need some conversations to read and respond to."
too_few_posts_notice: "Let's get this discussion started! There are currently %{currentPosts} / %{requiredPosts} posts. New visitors need some conversations to read and respond to."
+ logs_error_rate_exceeded_notice: "%{timestamp}: Current rate of %{rate} errors/%{duration} has exceeded site settings's limit of %{siteSettingLimit} errors/%{duration}."
learn_more: "learn more..."
@@ -882,6 +895,9 @@ en:
twitter:
title: "with Twitter"
message: "Authenticating with Twitter (make sure pop up blockers are not enabled)"
+ instagram:
+ title: "with Instagram"
+ message: "Authenticating with Instagram (make sure pop up blockers are not enabled)"
facebook:
title: "with Facebook"
message: "Authenticating with Facebook (make sure pop up blockers are not enabled)"
@@ -1002,6 +1018,10 @@ en:
posted: "
{{username}} {{description}}
"
edited: "
{{username}} {{description}}
"
liked: "
{{username}} {{description}}
"
+ liked_2: "
{{username}}, {{username2}} {{description}}
"
+ liked_many:
+ one: "
{{username}}, {{username2}} and 1 other {{description}}
"
+ other: "
{{username}}, {{username2}} and {{count}} others {{description}}
"
private_message: "
{{username}} {{description}}
"
invited_to_private_message: "
{{username}} {{description}}
"
invited_to_topic: "
{{username}} {{description}}
"
@@ -1535,17 +1555,14 @@ en:
like: "Undo like"
vote: "Undo vote"
people:
- off_topic: "{{icons}} flagged this as off-topic"
- spam: "{{icons}} flagged this as spam"
- spam_with_url: "{{icons}} flagged this as spam"
- inappropriate: "{{icons}} flagged this as inappropriate"
- notify_moderators: "{{icons}} notified moderators"
- notify_moderators_with_url: "{{icons}} notified moderators"
- notify_user: "{{icons}} sent a message"
- notify_user_with_url: "{{icons}} sent a message"
- bookmark: "{{icons}} bookmarked this"
- like: "{{icons}} liked this"
- vote: "{{icons}} voted for this"
+ off_topic: "flagged this as off-topic"
+ spam: "flagged this as spam"
+ inappropriate: "flagged this as inappropriate"
+ notify_moderators: "notified moderators"
+ notify_user: "sent a message"
+ bookmark: "bookmarked this"
+ like: "liked this"
+ vote: "voted for this"
by_you:
off_topic: "You flagged this as off-topic"
spam: "You flagged this as spam"
@@ -1701,7 +1718,6 @@ en:
flagging:
title: 'Thanks for helping to keep our community civil!'
- private_reminder: 'flags are private, only visible to staff'
action: 'Flag Post'
take_action: "Take Action"
notify_action: 'Message'
@@ -1713,7 +1729,7 @@ en:
submit_tooltip: "Submit the private flag"
take_action_tooltip: "Reach the flag threshold immediately, rather than waiting for more community flags"
cant: "Sorry, you can't flag this post at this time."
- notify_staff: 'Notify Staff'
+ notify_staff: 'Notify staff privately'
formatted_name:
off_topic: "It's Off-Topic"
inappropriate: "It's Inappropriate"
@@ -2356,6 +2372,7 @@ en:
revoke_admin: "revoke admin"
grant_moderation: "grant moderation"
revoke_moderation: "revoke moderation"
+ backup_operation: "backup operation"
screened_emails:
title: "Screened Emails"
description: "When someone tries to create a new account, the following email addresses will be checked and the registration will be blocked, or some other action performed."
diff --git a/config/locales/client.es.yml b/config/locales/client.es.yml
index b65b513439..1bc738d842 100644
--- a/config/locales/client.es.yml
+++ b/config/locales/client.es.yml
@@ -731,8 +731,8 @@ es:
value_prop: "Cuando te registras, recordamos lo que has leído, para que puedas volver justo donde estabas leyendo. También recibes notificaciones, por aquí y por email, cuando se publican nuevos mensajes. ¡También puedes darle a Me gusta a los mensajes! :heartbeat:"
summary:
enabled_description: "Estás viendo un resumen de este tema: los posts más interesantes determinados por la comunidad."
- description: "Hay {{count}} respuestas."
- description_time: "Hay {{count}} respuestas con un tiempo de lectura estimado de {{readingTime}} minutos."
+ description: "Hay {{replyCount}} respuestas."
+ description_time: "Hay {{replyCount}} respuestas con un tiempo de lectura estimado de {{readingTime}} minutos."
enable: 'Resumir este Tema'
disable: 'Ver Todos los Posts'
deleted_filter:
diff --git a/config/locales/client.fa_IR.yml b/config/locales/client.fa_IR.yml
index ae24711f45..3f4ea08d51 100644
--- a/config/locales/client.fa_IR.yml
+++ b/config/locales/client.fa_IR.yml
@@ -81,6 +81,8 @@ fa_IR:
other: "%{count} ماه بعد"
x_years:
other: "%{count} سال بعد"
+ previous_month: 'ماه پیشین'
+ next_month: 'ماه بعد'
share:
topic: 'پیوندی به این موضوع را به اشتراک بگذارید'
post: 'ارسال #%{postNumber}'
@@ -226,7 +228,6 @@ fa_IR:
has_pending_posts:
other: "این عنوان دارای {{count}} نوشتهی در انتظار تایید است"
confirm: "ذخیره سازی تغییرها"
- delete_prompt: "آیا مطمئن هستی از پاک کردن این %{username}? این باعث پاک شدن تمام پست ها و منجر به بلاک شدن ایمیل و IP می شود."
approval:
title: "نوشته نیاز به تایید دارد"
description: "ما نوشته شما را دریافت کرده ایم ولی نیاز به تایید آن توسط یکی از مدیران است قبل از اینکه نمایش داده شود. لطفا صبر داشته باشید."
@@ -384,9 +385,7 @@ fa_IR:
perm_default: "فعال کردن اعلانات"
perm_denied_btn: "دسترسی رد شد"
disable: "غیرفعال کردن اعلانات"
- currently_enabled: "(در حال حاضر فعال است)"
enable: "فعال کردن اعلانات"
- currently_disabled: "(در حال حاضر غیرفعال است)"
each_browser_note: "نکته: شما باید این تنظیمات را در هر مرورگری که استفاده میکنید تغییر دهید."
dismiss_notifications: "علامت گذاری همه به عنوان خوانده شده"
dismiss_notifications_tooltip: "علامت گذاری همه اطلاعیه های خوانده نشده به عنوان خوانده شده"
@@ -662,8 +661,6 @@ fa_IR:
value_prop: "وقتی که شما یک حساب کابری ایجاد میکنید, ما به خاطر میسپاریم که شما دقیقا در حال خواندن چه چیزی بودید, بنابراین شما همیشه برمی گردید از جایی که خواندن را رها کردید. همچنین شما اعلانات را دریافت میکنید, اینجا و از طریق ایمیل, هر زمان که ارسال جدیدی فرستاده شود. و شما میتوانید ارسال ها را پسند کنید تا در محبت آن سهیم باشید. :heartbeat:"
summary:
enabled_description: "شما خلاصه ای از این موضوع را می بینید: بالاترین نوشته های انتخاب شده توسط انجمن."
- description: "{{count}} پاسخ"
- description_time: "وجود دارد {{count}} پاسخ ها برا اساس زمان خواندن{{readingTime}} دقیقه."
enable: 'خلاصه این موضوع'
disable: 'نمایش همه نوشتهها'
deleted_filter:
@@ -936,9 +933,6 @@ fa_IR:
category: "هیچ موضوعاتی در {{category}} نیست."
top: "موضوع برتر وجود ندارد."
search: " هیچ نتیجه جستجویی وجود ندارد."
- educate:
- new: '
موضوعات جدید در اینجا قرار می گیرند.
به طور پیش فرض، موضوعات جدید در نظر گرفته خواهند شد و نشان داده می شوند جدید شاخص اگر آنها در 2 روز گذشته ایجاد شده باشند
'
bottom:
latest: "موضوع تازهٔ دیگری نیست."
hot: "موضوع داغ دیگری نیست."
@@ -1273,18 +1267,6 @@ fa_IR:
bookmark: "برداشتن نشانک"
like: "خنثی سازی لایک"
vote: "خنثی سازی امتیاز"
- people:
- off_topic: "{{icons}} برای این مورد پرچم آف-تاپیک زد"
- spam: "{{icons}} برای این مورد پرچم هرزنامه زد"
- spam_with_url: "{{icons}} پرچم گذاری شداین یک هرزنامه است"
- inappropriate: "{{icons}} با پرچم گزاری این مورد را نامناسب بدان"
- notify_moderators: "{{icons}} مدیران را آگاه کرد"
- notify_moderators_with_url: "{{icons}} مدیران را آگاه کرد"
- notify_user: "{{icons}} ارسال یک پیام خصوصی"
- notify_user_with_url: "{{icons}} ارسال پیام خصوصی"
- bookmark: "{{icons}} این را نشانهگذاری کرد"
- like: "{{icons}} این مورد را پسندید"
- vote: "{{icons}} رأی داد به این "
by_you:
off_topic: "شما برای این مورد پرچم آف-تاپیک زدید"
spam: "شما برای این مورد پرچم هرزنامه زدید"
@@ -1796,11 +1778,9 @@ fa_IR:
is_disabled: "بازگردانی در تنظیمات سایت از کار انداخته شده است."
label: "بازیابی"
title: "بازیابی پشتیبان"
- confirm: "آیا مطمئنید که میخواهید پشتیبان را برگردانید؟"
rollback:
label: "عقبگرد"
title: "عقب گرد پایگاه داده به حالت کار قبلی"
- confirm: "آیا مطمئن هستید به بازگشت به حالت کار قبلی پایگاه داده ؟"
export_csv:
user_archive_confirm: "آیا مطمئنید که میخواهید نوشتههایتان را دانلود کنید؟"
success: "فرایند برون ریزی، به شما از طریق پیام اطلاع رسانی خواهد شد وقتی این فرایند تکمیل شود."
@@ -1903,9 +1883,6 @@ fa_IR:
love:
name: 'دوست داشتن'
description: "رنگ دکمه های لایک"
- wiki:
- name: 'ویکی'
- description: "رنگ پایه استفاده شده برای پس زمینه نوشته ها ی ویکی ."
email:
settings: "تنظیمات"
preview_digest: "پیشنمایش خلاصه"
diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml
index e3f9a11817..9d22b193b9 100644
--- a/config/locales/client.fi.yml
+++ b/config/locales/client.fi.yml
@@ -269,7 +269,7 @@ fi:
one: "1 viesti ketjussa odottaa hyväksyntää"
other: "{{count}} viestiä ketjussa odottaa hyväksyntää"
confirm: "Tallenna muutokset"
- delete_prompt: "Haluatko varmasti poistaa käyttäjän %{username}? Kaikki käyttäjän kirjoittamat viestit poistetaan ja tämän sähköposti- sekä IP-osoitteille asetetaan esto."
+ delete_prompt: "Haluatko todella poistaa käyttäjän %{username}? Kaikki hänen kirjoittamansa viestit poistetaan. Lisäksi hänen sähköposti- ja IP-osoitteillensa laitetaan esto."
approval:
title: "Viesti odottaa hyväksyntää"
description: "Olemme vastaanottaneet viestisi, mutta se täytyy vielä hyväksyä ennen, kuin se näytetään sivustolla. Ole kärsivällinen."
@@ -433,9 +433,7 @@ fi:
perm_denied_btn: "Ei oikeuksia"
perm_denied_expl: "Olet kieltänyt ilmoitukset. Salli ilmoitukset selaimesi asetuksista."
disable: "Poista ilmoitukset käytöstä"
- currently_enabled: "(nyt käytössä)"
enable: "Näytä ilmoituksia"
- currently_disabled: "(pois käytöstä)"
each_browser_note: "Huom: Sinun täytyy vaihtaa tämä asetus kaikissa selaimista, joita käytät."
dismiss_notifications: "Merkitse kaikki luetuiksi"
dismiss_notifications_tooltip: "Merkitse kaikki lukemattomat ilmoitukset luetuiksi"
@@ -571,12 +569,18 @@ fi:
title: "Käyttäjäkortin tunnus"
website: "Nettisivu"
email_settings: "Sähköposti"
+ email_previous_replies:
+ title: "Liitä aiemmat vastaukset mukaan sähköpostin alaosaan"
+ unless_emailed: "ellei aiemmin lähetetty"
+ always: "aina"
+ never: "ei koskaan"
email_digests:
title: "Lähetä tiivistelmä uusista viesteistä sähköpostilla, jos en käy sivustolla "
daily: "päivittäin"
every_three_days: "joka kolmas päivä"
weekly: "viikottain"
every_two_weeks: "joka toinen viikko"
+ email_in_reply_to: "Liitä sähköpostiin lyhennelmä viestistä, johon vastataan"
email_direct: "Lähetä minulle sähköposti, jos joku lainaa viestiäni, vastaa viestiini, viittaa @nimeeni, tai kutsuu minut viestiketjuun"
email_private_messages: "Lähetä minulle sähköposti, kun joku lähettää minulle viestin"
email_always: "Lähetä sähköposti-ilmoitukset, vaikka olen aktiivinen palstalla."
@@ -731,8 +735,8 @@ fi:
value_prop: "Kun luot tilin, muistamme mitä olet lukenut, jotta voit aina palata keskusteluissa takaisin oikeaan kohtaan. Saat myös ilmoituksia, täällä tai sähköpostilla, kun uusia viestejä kirjoitetaan. Voit myös tykätä viesteistä. :heartbeat:"
summary:
enabled_description: "Tarkastelet tiivistelmää tästä ketjusta, sen mielenkiintoisimpia viestejä käyttäjien toiminnan perusteella."
- description: "Tässä ketjussa on {{count}} viestiä."
- description_time: "Ketjussa on {{count}} viestiä, joiden arvioitu lukemisaika on {{readingTime}} minuuttia."
+ description: "Vastauksia on {{replyCount}} kpl."
+ description_time: "Vastauksia on {{replyCount}}. Niiden lukemiseen menee arviolta {{readingTime}} minuuttia."
enable: 'Näytä ketjun tiivistelmä'
disable: 'Näytä kaikki viestit'
deleted_filter:
@@ -1012,9 +1016,6 @@ fi:
category: "Alueella {{category}} ei ole ketjua."
top: "Huippuketjuja ei ole."
search: "Hakutuloksia ei löytynyt."
- educate:
- new: '
Uudet ketjut ilmestyvät tähän.
Oletuksena, ketjut tulkitaan uusiksi ja niiden yhteydessä näytetäänuusi-merkki, kun ne on luotu edellisen kahden päivän aikana.
'
bottom:
latest: "Tuoreimpia ketjuja ei ole enempää."
hot: "Kuumia ketjuja ei ole enempää."
@@ -1378,18 +1379,6 @@ fi:
bookmark: "Peru kirjanmerkki"
like: "Peru tykkäys"
vote: "Peru ääni"
- people:
- off_topic: "{{icons}} liputtivat tämän asiaan kuulumattomaksi"
- spam: "{{icons}} liputtivat tämän roskapostiksi"
- spam_with_url: "{{icons}} liputtivat tämän roskapostiksi"
- inappropriate: "{{icons}} liputtivat tämän asiattomaksi"
- notify_moderators: "{{icons}} ilmoittivat valvojille"
- notify_moderators_with_url: "{{icons}} ilmoittivat valvojille"
- notify_user: "{{icons}} lähetti viestin"
- notify_user_with_url: "{{icons}} lähetti viestin"
- bookmark: "{{icons}} lisäsivät tämän kirjanmerkkeihinsä"
- like: "{{icons}} tykkäsivät tästä"
- vote: "{{icons}} äänestivät tätä"
by_you:
off_topic: "Liputit tämän asiaankuulumattomaksi"
spam: "Liputit tämän roskapostiksi"
@@ -1934,11 +1923,9 @@ fi:
is_disabled: "Palautus on estetty sivuston asetuksissa."
label: "Palauta"
title: "Palauta varmuuskopio"
- confirm: "Oletko varma, että haluat palauttaa tämän varmuuskopion?"
rollback:
label: "Palauta"
title: "Palauta tietokanta edelliseen toimivaan tilaan"
- confirm: "Oletko varma, että haluat palauttaa tietokannan edelliseen toimivaan tilaan?"
export_csv:
user_archive_confirm: "Oletko varma, että haluat ladata viestisi?"
success: "Vienti on käynnissä. Saat ilmoituksen viestillä, kun prosessi on valmis."
@@ -2041,9 +2028,6 @@ fi:
love:
name: 'tykkäys'
description: "Tykkäyspainikkeen väri."
- wiki:
- name: 'wiki'
- description: "Wiki-viestien taustaväri."
email:
title: "Sähköpostit"
settings: "Asetukset"
@@ -2080,6 +2064,13 @@ fi:
subject: "Otsikko"
error: "Virhe"
none: "Uusia sähköpostiviestejä ei löydetty."
+ modal:
+ date: "Päivämäärä"
+ from: "Lähettäjä"
+ to: "Vastaanottaja"
+ cc: "Kopio"
+ subject: "Otsikko"
+ body: "Leipäteksti"
filters:
from_placeholder: "from@example.com"
to_placeholder: "to@example.com"
@@ -2155,6 +2146,7 @@ fi:
revoke_admin: "peru ylläpitäjän oikeudet"
grant_moderation: "myönnä valvojan oikeudet"
revoke_moderation: "peru valvojan oikeudet"
+ backup_operation: "varmuuskopiointi"
screened_emails:
title: "Seulottavat sähköpostiosoitteet"
description: "Uuden käyttäjätunnuksen luonnin yhteydessä annettua sähköpostiosoitetta verrataan alla olevaan listaan ja tarvittaessa tunnuksen luonti joko estetään tai suoritetaan muita toimenpiteitä."
diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml
index 9b5f0f066b..ca39f64ba3 100644
--- a/config/locales/client.fr.yml
+++ b/config/locales/client.fr.yml
@@ -380,7 +380,7 @@ fr:
posts: "Messages"
topics: "Sujets"
latest: "Récents"
- latest_by: "dernièr sujet de"
+ latest_by: "dernier sujet de"
toggle_ordering: "modifier le mode du tri"
subcategories: "Sous-catégories"
topic_stats: "Le nombre de nouveaux sujets."
@@ -433,9 +433,7 @@ fr:
perm_denied_btn: "Permission Refusée"
perm_denied_expl: "Vous n'avez pas autorisé les notifications. Autorisez-les depuis les paramètres de votre navigateur."
disable: "Désactiver les notifications"
- currently_enabled: "(activé actuellement)"
enable: "Activer les notifications"
- currently_disabled: "(désactivé actuellement)"
each_browser_note: "Note : Vous devez changer ce paramètre sur chaque navigateur que vous utilisez."
dismiss_notifications: "Marquer tout comme lu"
dismiss_notifications_tooltip: "Marquer comme lues toutes les notifications non lues"
@@ -571,12 +569,18 @@ fr:
title: "Badge pour la carte de l'utilisateur"
website: "Site internet"
email_settings: "Courriel"
+ email_previous_replies:
+ title: "Inclure les réponses précédentes en bas des courriels"
+ unless_emailed: "sauf si déjà envoyé"
+ always: "toujours"
+ never: "jamais"
email_digests:
title: "Quand je ne visite pas ce site, m'envoyer un résumé des nouveautés par courriel:"
daily: "quotidien"
every_three_days: "tous les trois jours"
weekly: "hebdomadaire"
every_two_weeks: "toutes les deux semaines"
+ email_in_reply_to: "Inclure un extrait du message auquel il a été répondu dans les courriels"
email_direct: "M'envoyer un courriel quand quelqu'un me cite, répond à mon message ou mentionne mon @pseudo ou m'invite à rejoindre un sujet"
email_private_messages: "M'envoyer un courriel quand quelqu'un m'envoie un message privé"
email_always: "Recevoir des notifications par email même lorsque je suis actif sur le site"
@@ -731,8 +735,8 @@ fr:
value_prop: "Quand vous créez votre compte, nous stockons ce que vous avez lu pour vous positionner systématiquement sur le bon emplacement à votre retour. Vous avez également des notifications, ici et par courriel, quand de nouveaux messages sont postés. Et vous pouvez aimer les messages pour partager vos coups de cœurs. :heartbeat:"
summary:
enabled_description: "Vous visualisez un résumé de ce sujet : les messages importants choisis par la communauté."
- description: "Il y a {{count}} réponses."
- description_time: "Il y a {{count}} réponses avec un temps estimé de lecture de {{readingTime}} minutes."
+ description: "Il y a {{replyCount}} réponses."
+ description_time: "Il y a {{replyCount}} réponses avec un temps estimé de lecture de {{readingTime}} minutes."
enable: 'Résumer ce sujet'
disable: 'Afficher tous les messages'
deleted_filter:
@@ -1013,12 +1017,8 @@ fr:
top: "Il n'y a pas de meilleurs sujets."
search: "Votre recherche ne retourne aucun résultat."
educate:
- new: '
Vos nouveaux sujets apparaissent ici
Par défaut, les sujets sont considérés comme nouveau et affiche l''indicateur nouveau lorsqu''ils ont été crées dans les deux derniers jours.
-
- Vous pouvez modifier cela dans vos préférences.
'
- unread: '
Vos sujets non-lus apparaissent ici
Par défaut, les sujets sont considérés comme non-lus et affichent le nombre de messages non-lus 1 sont ceux:
-
-
Que vous avez crées
Auxquels vous avez répondu
Que vous avez lu plus de 4 minutes
Ou que vous avez explicitement suivis ou surveillés
'
bottom:
latest: "Il n'y a plus de sujet à lire."
hot: "Il n'y a plus de sujet populaire à lire."
@@ -1383,17 +1383,14 @@ fr:
like: "Annuler j'aime"
vote: "Retirer votre vote"
people:
- off_topic: "{{icons}} l'ont signalé comme étant hors-sujet"
- spam: "{{icons}} l'ont signalé comme étant du spam"
- spam_with_url: "{{icons}} signalé ceci comme spam"
- inappropriate: "{{icons}} l'ont signalé comme inapproprié"
- notify_moderators: "{{icons}} l'ont signalé pour modération"
- notify_moderators_with_url: "{{icons}} l'ont signalé pour modération"
- notify_user: "{{icons}} a envoyé un message"
- notify_user_with_url: "{{icons}} a envoyé un message"
- bookmark: "{{icons}} l'ont ajouté à leurs signets"
- like: "{{icons}} l'ont aimé"
- vote: "{{icons}} ont voté pour"
+ off_topic: "signalé comme hors-sujet."
+ spam: "signalé comme spam"
+ inappropriate: "signalé comme inapproprié"
+ notify_moderators: "signalé aux modérateurs"
+ notify_user: "a envoyé un message"
+ bookmark: "ajouté aux signets"
+ like: "a aimé ceci"
+ vote: "a voté pour ce message"
by_you:
off_topic: "Vous l'avez signalé comme étant hors-sujet"
spam: "Vous l'avez signalé comme étant du spam"
@@ -1942,7 +1939,7 @@ fr:
rollback:
label: "Revenir en arrière"
title: "Restaurer (RollBack) la base de données à l'état de travail précédent"
- confirm: "Êtes-vous sûr de vouloir restaurer (rollback) la base de données à l'état de fonctionnement précédent?"
+ confirm: "Êtes-vous sûr de vouloir restaurer la base de données à l'état de fonctionnement précédent?"
export_csv:
user_archive_confirm: "Êtes-vous sûr de vouloir télécharger vos messages?"
success: "L'exportation a été initialisé. Vous serez averti par message lorsque le traitement sera terminé."
@@ -2045,9 +2042,6 @@ fr:
love:
name: 'aimer'
description: "La couleur du bouton \"J'aime\"."
- wiki:
- name: 'wiki'
- description: "Couleur de base utilisée pour le fond des messages de type wiki."
email:
title: "Courriels"
settings: "Paramètrage"
@@ -2084,6 +2078,19 @@ fr:
subject: "Objet"
error: "Erreur"
none: "Aucun courriel reçu."
+ modal:
+ title: "Détails du courriel entrant"
+ error: "Erreur"
+ return_path: "Return-Path"
+ message_id: "Message-Id"
+ in_reply_to: "In-Reply-To"
+ references: "References"
+ date: "Date"
+ from: "From"
+ to: "à"
+ cc: "Cc"
+ subject: "Objet"
+ body: "Corps"
filters:
from_placeholder: "from@example.com"
to_placeholder: "to@example.com"
@@ -2159,6 +2166,7 @@ fr:
revoke_admin: "Révoquer les droits d'admin"
grant_moderation: "Accorder les droits de modération"
revoke_moderation: "Révoquer les droits de modération"
+ backup_operation: "sauvegarde"
screened_emails:
title: "Courriels affichés"
description: "Lorsque quelqu'un essaye de créé un nouveau compte, les adresses de courriel suivantes seront vérifiées et l'inscription sera bloquée, ou une autre action sera réalisée."
diff --git a/config/locales/client.he.yml b/config/locales/client.he.yml
index dcd24e4f39..c2a191f2ae 100644
--- a/config/locales/client.he.yml
+++ b/config/locales/client.he.yml
@@ -686,8 +686,8 @@ he:
value_prop: "כשאתה נרשם, אנחנו זוכרים בדיוק מה קראת כך כשאתה חוזר אתה ממשיך בדיוק מאיפה שהפסקת. בנוסף אתה תקבל התראות דרך האתר ודרך הדואר האלקטרוני שלך כשפוסטים חדשים נוצרים ועוד משהו, אתה יכול לעשות לייק לפוסטים שאהבת. :heartbeat:"
summary:
enabled_description: "אתם צופים בסיכום פוסט זה: הפרסומים המעניינים ביותר כפי שסומנו על ידי הקהילה."
- description: "ישנן {{count}} תגובות"
- description_time: "ישנן {{count}} תגובות, עם הערכת זמן קריאה של כ- {{readingTime}} דקות ."
+ description: "ישנן {{replyCount}} תגובות"
+ description_time: "ישנן {{replyCount}} תגובות, עם הערכת זמן קריאה של כ- {{readingTime}} דקות ."
enable: 'סכם פוסט זה'
disable: 'הצג את כל ההודעות'
deleted_filter:
diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml
index 01638e495a..4a714c6e7d 100644
--- a/config/locales/client.it.yml
+++ b/config/locales/client.it.yml
@@ -712,8 +712,8 @@ it:
value_prop: "Quando hai un account ci ricordiamo esattamente cosa stavi leggendo, così potrai riprendere da dove ti eri fermato. Inoltre ricevi le notifiche, sia qui sia via email, ogni volta che ci saranno nuovi messaggi. Inoltre potrai metterei i \"Mi piace\" ai messaggi e condividerne l'apprezzamento. :heartbeat:"
summary:
enabled_description: "Stai visualizzando un riepilogo dell'argomento: è la comunità a determinare quali sono i messaggi più interessanti."
- description: "Ci sono {{count}} risposte."
- description_time: "Ci sono {{count}} risposte con un tempo stimato di lettura di {{readingTime}} minuti."
+ description: "Ci sono {{replyCount}} risposte."
+ description_time: "Ci sono {{replyCount}} risposte con un tempo stimato di lettura di {{readingTime}} minuti."
enable: 'Riassumi Questo Argomento'
disable: 'Mostra Tutti i Messaggi'
deleted_filter:
diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml
index dd1989681a..481d6608ef 100644
--- a/config/locales/client.ja.yml
+++ b/config/locales/client.ja.yml
@@ -199,6 +199,7 @@ ja:
revert: "戻す"
failed: "失敗"
switch_to_anon: "匿名モード"
+ switch_from_anon: "匿名モード停止"
banner:
close: "バナーを閉じる。"
edit: "このバナーを編集 >>"
@@ -593,8 +594,8 @@ ja:
sign_up: "新しいアカウントを作成"
summary:
enabled_description: "トピックのまとめを表示されています。"
- description: "{{count}} 返信があります。"
- description_time: "全てを確認するのに {{readingTime}} 分 前後を要する {{count}} 個の回答があります。"
+ description: "{{replyCount}} 返信があります。"
+ description_time: "全てを確認するのに {{readingTime}} 分 前後を要する {{replyCount}} 個の回答があります。"
enable: 'このトピックを要訳する'
disable: '全ての投稿を表示する'
deleted_filter:
diff --git a/config/locales/client.ko.yml b/config/locales/client.ko.yml
index b68af57710..a57b3f0944 100644
--- a/config/locales/client.ko.yml
+++ b/config/locales/client.ko.yml
@@ -244,7 +244,7 @@ ko:
has_pending_posts:
other: "이 토픽은 {{count}}개의 승인 대기중인 게시글이 있습니다."
confirm: "변경사항 저장"
- delete_prompt: "정말로 %{username} 회원을 삭제하시겠습니까? 게시글이 모두 삭제되고 IP와 이메일이 블락됩니다."
+ delete_prompt: "정말로 %{username}; 회원을 삭제하시겠습니까? 게시글이 모두 삭제되고 IP와 이메일이 차단됩니다."
approval:
title: "게시글 승인 필요"
description: "새로운 게시글이 있습니다. 그러나 이 게시글이 보여지려면 운영자의 승인이 필요합니다."
@@ -307,7 +307,7 @@ ko:
members_mods_and_admins: "그룹 멤버, 운영자, 관리자만"
everyone: "모두"
trust_levels:
- title: "멤버들이 추가될때 멤버들의 Trust level이 자동으로 획득됩니다."
+ title: "멤버들이 추가되면 회원등급이 자동으로 부여됩니다:"
none: "없음"
notifications:
watching:
@@ -403,9 +403,7 @@ ko:
perm_denied_btn: "권한 거부"
perm_denied_expl: "통지를 위한 허용을 거절했었습니다. 브라우저 설정을 통해서 통지를 허용해주세요."
disable: "알림 비활성화"
- currently_enabled: "(현재 활성화됨)"
enable: "알림 활성화"
- currently_disabled: "(현재 비활성화됨)"
each_browser_note: "노트: 사용하시는 모든 브라우저에서 이 설정을 변경해야합니다."
dismiss_notifications: "모두 읽음으로 표시"
dismiss_notifications_tooltip: "읽지 않은 알림을 모두 읽음으로 표시"
@@ -417,10 +415,10 @@ ko:
change: "변경"
moderator: "{{user}}님은 운영자입니다"
admin: "{{user}}님은 관리자 입니다"
- moderator_tooltip: "이 사용자는 운영자 입니다"
- admin_tooltip: "이 사용자는 관리자입니다."
- blocked_tooltip: "이 사용자는 차단되었습니다"
- suspended_notice: "이 사용자는 {{date}}까지 접근 금지 되었습니다."
+ moderator_tooltip: "이 회원은 운영자 입니다"
+ admin_tooltip: "이 회원은 관리자입니다."
+ blocked_tooltip: "이 회원은 차단되었습니다"
+ suspended_notice: "이 회원은 {{date}}까지 접근 금지 되었습니다."
suspended_reason: "이유: "
github_profile: "Github"
mailing_list_mode: "(토픽이나 카테고리의 알림을 끄지 않는 한) 모든 새로운 글에 대해 메일을 보내주세요."
@@ -436,9 +434,9 @@ ko:
delete_yourself_not_allowed: "지금은 계정을 삭제할 수 없습니다. 관리자에게 연락해 주세요."
unread_message_count: "메시지"
admin_delete: "삭제"
- users: "사용자"
+ users: "회원"
muted_users: "알람 끄기"
- muted_users_instructions: "이 사용자들이 보낸 알림 모두 숨김"
+ muted_users_instructions: "이 회원이 보낸 알림 모두 숨김"
muted_topics_link: "알림을 끈 토픽 보기"
automatically_unpin_topics: "토픽을 끝까지 보면 자동으로 핀이 해제됩니다."
staff_counters:
@@ -537,15 +535,21 @@ ko:
log_out: "로그아웃"
location: "위치"
card_badge:
- title: "사용자 카드 뱃지"
+ title: "사용자 카드 배지"
website: "웹사이트"
email_settings: "이메일"
+ email_previous_replies:
+ title: "이메일 밑부분에 이전 댓글을 포함합니다."
+ unless_emailed: "예전에 발송된 것이 아닌 한"
+ always: "항상"
+ never: "절대"
email_digests:
title: "사이트 방문이 없을 경우, 새로운 글을 요약하여 메일로 보냄"
daily: "매일"
every_three_days: "매 3일마다"
weekly: "매주"
every_two_weeks: "격주"
+ email_in_reply_to: "이메일에 글 응답내용을 발췌해서 포함하기 "
email_direct: "누군가 나를 인용했을 때, 내 글에 답글을 달았을때, 내 이름을 멘션했을때 혹은 토픽에 나를 초대했을 떄 이메일 보내기"
email_private_messages: "누군가 나에게 메시지를 보냈을때 이메일 보내기"
email_always: "사이트를 이용중 일 때도 이메일 알림 보내기"
@@ -615,18 +619,18 @@ ko:
summary:
title: "요약"
stats: "통계"
- topic_count: "생성된 토픽"
- post_count: "생성된 포스트"
- likes_given: "좋아요 누름"
- likes_received: "좋아요 받음"
- days_visited: "접속한 날짜"
- posts_read_count: "읽은 포스트"
- top_replies: "최고 인기 댓글"
- top_topics: "최고 인기 토픽"
- top_badges: "최고 뱃지"
- more_topics: "다른이에게 준 좋아요"
- more_replies: "더 많은 답글"
- more_badges: "뱃지 더 보기"
+ topic_count: "새토픽 갯수"
+ post_count: "새글 갯수"
+ likes_given: "좋아요 눌러준 횟수"
+ likes_received: "좋아요 선물받은 횟수"
+ days_visited: "방문일수"
+ posts_read_count: "읽은글 갯수"
+ top_replies: "인기 댓글"
+ top_topics: "인기 토픽"
+ top_badges: "인기 배지"
+ more_topics: "토픽 더 보기"
+ more_replies: "답글 더 보기"
+ more_badges: "배지 더 보기"
associated_accounts: "로그인"
ip_address:
title: "마지막 IP 주소"
@@ -671,6 +675,9 @@ ko:
read_only_mode:
enabled: "이 사이트는 현재 읽기전용 모드입니다. 브라우징은 가능하지만, 댓글달기, 좋아요 등 다른 행위들은 현재 비활성화 되어있습니다."
login_disabled: "사이트가 읽기 전용모드로 되면서 로그인은 비활성화되었습니다."
+ too_few_topics_and_posts_notice: "토론을 시작하시죠! 현재 %{currentTopics} / %{requiredTopics} 토픽과 %{currentPosts} / %{requiredPosts} 글이 있습니다. 새 방문자는 읽고 응답할 대화꺼리가 좀 필요해요."
+ too_few_topics_notice: "토론을 시작하시죠! 현재 %{currentTopics} / %{requiredTopics} 토픽이 있습니다. 새 방문자는 읽고 응답할 대화꺼리가 좀 필요해요."
+ too_few_posts_notice: "토론을 시작하시죠! 현재 %{currentPosts} / %{requiredPosts} 글이 있습니다. 새 방문자는 읽고 응답할 대화꺼리가 좀 필요해요."
learn_more: "더 배우기"
year: '년'
year_desc: '지난 365일간 생성된 토픽'
@@ -695,8 +702,8 @@ ko:
value_prop: "회원가입 하시면 글을 어디까지 읽으셨는지 저희가 기억하기 때문에, 언제든지 마지막 읽은 위치로 바로 돌아갈 수 있답니다. 그리고 새글이 뜰때마다 이 화면과 이메일로 알림을 받을수도 있고, 좋아요를 클릭해서 글에 대한 애정을 표현하실 수도 있어요. :heartbeat:"
summary:
enabled_description: "현재 커뮤니티에서 가장 인기있는 토픽의 요약본을 보고 있습니다:"
- description: "{{count}}개의 답글이 있습니다."
- description_time: "총 {{count}}개의 댓글이 있습니다. 예상 소요 시간은 {{readingTime}}분입니다.."
+ description: "댓글이 {{replyCount}}개 있습니다."
+ description_time: "댓글이 {{replyCount}}개 있고 다 읽는데 {{readingTime}} 분이 걸립니다."
enable: '이 토픽을 요약Show All Posts'
disable: '모든 포스트 보기'
deleted_filter:
@@ -710,10 +717,10 @@ ko:
remove_allowed_user: "{{name}}에게서 온 메시지를 삭제할까요?"
email: '이메일'
username: '아이디'
- last_seen: '마지막 접근'
+ last_seen: '마지막 접속'
created: '생성'
created_lowercase: '최초 글'
- trust_level: '신뢰도'
+ trust_level: '회원등급'
search_hint: '아이디, 이메일 혹은 IP 주소'
create_account:
title: "회원 가입"
@@ -792,6 +799,7 @@ ko:
saved_local_draft_tip: "로컬로 저장됩니다."
similar_topics: "작성하려는 내용과 비슷한 토픽들..."
drafts_offline: "초안"
+ group_mentioned: "{{group}}을 이용해서 {{count}} 명의 회원에게 알림을 보내려고 합니다."
error:
title_missing: "제목은 필수 항목입니다"
title_too_short: "제목은 최소 {{min}} 글자 이상이어야 합니다."
@@ -812,6 +820,7 @@ ko:
title_placeholder: "이야기 나누고자 하는 내용을 한문장으로 적는다면?"
edit_reason_placeholder: "why are you editing?"
show_edit_reason: "(add edit reason)"
+ reply_placeholder: "여기에 타이핑 하세요. 마크다운 또는 BBCode, HTML 포맷을 이용하세요. 이미지를 끌어오거나 붙여넣기 하세요."
view_new_post: "새로운 글을 볼 수 있습니다."
saving: "저장 중..."
saved: "저장 완료!"
@@ -862,6 +871,7 @@ ko:
more: "이전 알림을 볼 수 있습니다."
total_flagged: "관심 표시된 총 글"
mentioned: "
{{username}} {{description}}
"
+ group_mentioned: "
{{username}} {{description}}
"
quoted: "
{{username}} {{description}}
"
replied: "
{{username}} {{description}}
"
posted: "
{{username}} {{description}}
"
@@ -873,7 +883,9 @@ ko:
invitee_accepted: "
{{username}} accepted your invitation
"
moved_post: "
{{username}} moved {{description}}
"
linked: "
{{username}} {{description}}
"
- granted_badge: "
'{{description}}' 뱃지를 받았습니다.
"
+ granted_badge: "
'{{description}}' 배지를 받았습니다.
"
+ group_message_summary:
+ other: "
{{group_name}} 메시지상자에 {{count}}개의 메시지가 있습니다
"
alt:
mentioned: "멘션 by"
quoted: "인용 by"
@@ -887,10 +899,11 @@ ko:
invitee_accepted: "다음 사람에 의해 초대가 수락됨."
moved_post: "다음 사람에 의해서 당신의 글이 이동됨"
linked: "당신 글로 링크하기"
- granted_badge: "뱃지가 수여됨."
+ granted_badge: "배지가 수여됨."
group_message_summary: "그룹 메시지함의 메시지"
popup:
mentioned: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 나를 멘션했습니다'
+ group_mentioned: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 당신을 언급했습니다'
quoted: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 나를 인용했습니다'
replied: '"{{topic}}" - {{site_title}}에서 {{username}} 님이 내게 답글을 달았습니다'
posted: '"{{topic}}" - {{site_title}}에서 {{username}}님이 글을 게시하였습니다'
@@ -902,18 +915,24 @@ ko:
from_my_computer: "컴퓨터에서 가져오기"
from_the_web: "인터넷에서 가져오기"
remote_tip: "이미지 링크"
+ remote_tip_with_attachments: "이미니자 파일 링크 {{authorized_extensions}}"
local_tip: "기기에서 이미지 선택"
+ local_tip_with_attachments: "디바이스에서 이미지나 파일을 선택하세요 {{authorized_extensions}}"
hint: "(드래그&드랍으로 업로드 가능)"
+ hint_for_supported_browsers: "편집창에 이미지를 끌어다 놓거나 붙여넣기 할 수도 있습니다"
uploading: "업로드 중입니다..."
select_file: "파일 선택"
image_link: "이 이미지를 누르면 이동할 링크"
search:
sort_by: "다음으로 정렬"
+ relevance: "관련성"
latest_post: "가장 최근 글"
most_viewed: "가장 많이 본"
most_liked: "가장 많이 좋아요를 받은"
select_all: "모두 선택"
clear_all: "다 지우기"
+ result_count:
+ other: "\"{{term}}\" 검색결과 {{count}} 개"
title: "토픽, 글, 사용자, 카테고리 검색"
no_results: "검색 결과가 없습니다"
no_more_results: "더 이상 결과가 없습니다."
@@ -932,11 +951,14 @@ ko:
current_user: '사용자 페이지로 이동'
topics:
bulk:
+ unlist_topics: "토픽 내리기"
reset_read: "읽기 초기화"
delete: "토픽 삭제"
dismiss: "해지"
dismiss_read: "읽지않음 전부 해지"
dismiss_button: "해지..."
+ dismiss_tooltip: "새 글을 무시하거나 토픽 추적 멈추기"
+ also_dismiss_topics: "이 토픽 추적하는 걸 멈추고 내가 읽지 않은 걸 다시는 보여주지 않습니다"
dismiss_new: "새글 제거"
toggle: "토픽 복수 선택"
actions: "일괄 적용"
@@ -959,8 +981,8 @@ ko:
top: "Top 토픽이 없습니다."
search: "검색 결과가 없습니다."
educate:
- new: '
새로운 토픽은 여기에서 볼 수 있습니다.
기본 설정으로 2일 이내에 생성된 토픽은 새로운 것으로 간주되며 new 표시가 나타납니다.
'
bottom:
latest: "더 이상 읽을 최신 토픽이 없습니다"
hot: "더 이상 읽을 인기있는 토픽이 없습니다"
@@ -974,15 +996,18 @@ ko:
search: "더이상 검색 결과가 없습니다."
topic:
unsubscribe:
+ stop_notifications: "{{title}}에 대한 알림은 이제 덜 받게 됩니다."
change_notification_state: "현재 당신의 알림 설정 : "
filter_to: " {{post_count}} 게시글 in 토픽"
create: '새 토픽 만들기'
create_long: '새로운 토픽 만들기'
private_message: '메시지 시작'
archive_message:
+ help: '메시지를 아카이브로 옮기기'
title: '저장됨'
move_to_inbox:
title: '수신함으로 이동'
+ help: '메시지를 편지함으로 되돌리기'
list: '토픽 목록'
new: '새로운 토픽'
unread: '읽지 않은'
@@ -1027,6 +1052,7 @@ ko:
auto_close_title: '자동으로 닫기 설정'
auto_close_save: "저장"
auto_close_remove: "이 토픽을 자동으로 닫지 않기"
+ auto_close_immediate: "토픽에 마지막 글이 올라온 지 %{hours} 시간 지났기 때문에 이 토픽은 즉시 닫힐 예정입니다."
progress:
title: 진행 중인 토픽
go_top: "맨위"
@@ -1076,6 +1102,7 @@ ko:
description: "이 메시지에 대해 어떠한 알림도 받지 않지 않습니다."
muted:
title: "알림 없음"
+ description: "이 토픽에 대해 어떠한 알림도 받지 않고 최신글 목록에도 나타나지 않을 것입니다."
actions:
recover: "토픽 다시 복구"
delete: "토픽 삭제"
@@ -1085,7 +1112,7 @@ ko:
auto_close: "자동으로 닫기..."
pin: "토픽 고정..."
unpin: "토픽 고정 취소..."
- unarchive: "보관 안된 토픽"
+ unarchive: "토픽 보관 취소"
archive: "토픽 보관"
invisible: "목록에서 제외하기"
visible: "목록에 넣기"
@@ -1106,9 +1133,9 @@ ko:
title: '공유'
help: '이 토픽의 링크를 공유'
flag_topic:
- title: '신고'
- help: '운영자에게 이 글을 신고합니다.'
- success_message: '성공적으로 토픽을 신고 하였습니다.'
+ title: '신고하기'
+ help: '이 토픽을 주의깊게 보거나 비밀리에 주의성 알림을 보내기 위해 신고합니다'
+ success_message: '신고했습니다'
feature_topic:
title: "Feature 토픽"
pin: " {{categoryLink}} 카테고리 토픽 목록 상단에 고정 until"
@@ -1116,14 +1143,23 @@ ko:
unpin: "이 토픽을 {{categoryLink}} 카테고리 상단에서 제거 합니다."
unpin_until: "{{categoryLink}} 카테고리 토픽 목록 상단에서 이 토픽을 제거하거나 %{until}까지 기다림."
pin_note: "개별적으로 사용자가 토픽 고정을 취소할 수 있습니다."
+ pin_validation: "토픽을 고정하려면 날짜를 지정해야 합니다."
+ not_pinned: " {{categoryLink}} 카테고리에 고정된 토픽이 없습니다."
+ already_pinned:
+ other: "{{categoryLink}}에 고정된 토픽 갯수: {{count}}"
pin_globally: "모든 토픽 목록 상단 고정 until"
confirm_pin_globally: "이미 {{count}}개의 토픽이 전역적으로 고정되어 있습니다. 너무 많은 토픽이 고정되어 있으면 새로운 사용자나 익명사용자에게 부담이 될 수 있습니다. 정말로 이 토픽을 전역적으로 고정하시겠습니까?"
unpin_globally: "모든 토픽 목록 상단에서 이 토픽을 제거"
unpin_globally_until: "모든 토픽 목록 상단에서 이 토픽을 제거하거나 %{until}까지 기다림."
global_pin_note: "개별적으로 사용자가 토픽 고정을 취소할 수 있습니다."
+ not_pinned_globally: "전역적으로 고정된 토픽이 없습니다."
+ already_pinned_globally:
+ other: "전역적으로 고정된 토픽 갯수: {{count}}"
make_banner: "이 토픽을 모든 페이지의 상단에 나타나는 배너로 만들기"
remove_banner: "모든 페이지에서 나타나는 배너에서 제거"
banner_note: "사용자는 배너를 닫음으로써 배너를 나타나지 않게 할 수 있습니다. 단지 어떤 기간동안 딱 하나의 토픽만이 배너로 지정 가능합니다."
+ no_banner_exists: "배너 토픽이 없습니다."
+ banner_exists: "현재 배너 토픽이 있습니다."
inviting: "초대 중..."
automatically_add_to_groups_optional: "이 초대는 다음 그룹에 대한 접근 권한을 포함합니다: (선택, 관리자만 가능)"
automatically_add_to_groups_required: "이 초대는 다음 그룹에 대한 접근 권한을 포함합니다: (필수, 관리자만 가능)"
@@ -1180,6 +1216,8 @@ ko:
change_timestamp:
title: "타임스탬프 변경"
action: "타임스탬프 변경"
+ invalid_timestamp: "타임스탬프는 미래값으로 할 수 없습니다."
+ error: "토픽 타임스탬프를 바꾸는 중 에러가 발생하였습니다."
multi_select:
select: '선택'
selected: '({{count}})개가 선택됨'
@@ -1204,7 +1242,7 @@ ko:
show_full: "전체 글 보기"
show_hidden: '숨겨진 내용을 표시'
deleted_by_author:
- other: "(작성자에 의해 취소된 글입니다. 신고당한 글이 아니면 %{count} 시간 뒤에 자동으로 삭제됩니다)"
+ other: "(작성자에 의해 취소된 글입니다. 글이 신고된 것이 아닌 한 %{count} 시간 뒤에 자동으로 삭제됩니다)"
expand_collapse: "확장/축소"
gap:
other: "{{count}}개의 숨겨진 답글 보기"
@@ -1216,6 +1254,9 @@ ko:
other: "{{count}} 좋아요"
has_likes_title:
other: "{{count}}명이 이 글을 좋아합니다"
+ has_likes_title_only_you: "당신이 이 글을 좋아합니다."
+ has_likes_title_you:
+ other: "당신 외 {{count}}명이 이 글을 좋아합니다"
errors:
create: "죄송합니다. 글을 만드는 동안 오류가 발생했습니다. 다시 시도하십시오."
edit: "죄송합니다. 글을 수정하는 중에 오류가 발생했습니다. 다시 시도하십시오."
@@ -1234,6 +1275,8 @@ ko:
yes_value: "예"
via_email: "이 토픽은 이메일을 통해 등록되었습니다."
whisper: "이 포스트는 운영자를 위한 비공개 귓말입니다."
+ wiki:
+ about: "이 글은 위키(wiki) 입니다."
archetypes:
save: '옵션 저장'
controls:
@@ -1243,7 +1286,7 @@ ko:
undo_like: "'좋아요' 취소"
edit: "이 글 편집"
edit_anonymous: "이 토픽을 수정하려면 먼저 로그인을 해야합니다."
- flag: "운영자에게 이 글을 신고합니다."
+ flag: "이 토픽에 관심을 가지기 위해 깃발을 표시해두고 개인적으로 알림을 받습니다"
delete: "이 글을 삭제합니다."
undelete: "이 글 삭제를 취소합니다."
share: "이 글에 대한 링크를 공유합니다."
@@ -1260,18 +1303,19 @@ ko:
revert_to_regular: "스태프 색상 제거하기"
rebake: "HTML 다시 빌드하기"
unhide: "숨기지 않기"
+ change_owner: "소유자 변경"
actions:
- flag: '신고'
+ flag: '신고하기'
defer_flags:
- other: "신고 연기"
+ other: "신고 보류하기"
it_too:
- off_topic: "Flag it too"
- spam: "저도 신고합니다"
- inappropriate: "저도 신고합니다"
- custom_flag: "신고 추가하기"
- bookmark: "Bookmark it too"
- like: "저도 '좋아요' 줄래요"
- vote: "Vote for it too"
+ off_topic: "나도 신고하기"
+ spam: "나도 신고하기"
+ inappropriate: "나도 신고하기"
+ custom_flag: "나도 신고하기"
+ bookmark: "나도 북마크하기"
+ like: "나도 좋아해요"
+ vote: "나도 투표하기"
undo:
off_topic: "신고 취소"
spam: "신고 취소"
@@ -1280,60 +1324,57 @@ ko:
like: "좋아요 취소"
vote: "투표 취소"
people:
- off_topic: "{{icons}}님이 이 글을 토픽에서 제외했습니다."
- spam: "{{icons}} 스팸으로 신고되었습니다"
- spam_with_url: "{{icons}} 스팸으로 표시됨"
- inappropriate: "{{icons}} 부적절하다고 신고했습니다"
- notify_moderators: "{{icons}}님은 이 글을 운영자에게 보고했습니다."
- notify_moderators_with_url: "{{icons}}님은 이 글을 운영자에게 보고했습니다."
- notify_user: "{{icons}} 메시지를 보냈습니다"
- notify_user_with_url: "{{icons}} 메시지를 보냈습니다."
- bookmark: "{{icons}}님이 북마크했습니다."
- like: "{{icons}}님이 좋아합니다."
- vote: "{{icons}}님이 투표했습니다."
+ off_topic: "주제에서 벗어났다고 신고했습니다"
+ spam: "스팸으로 신고했습니다"
+ inappropriate: "부적절한 글로 신고했습니다"
+ notify_moderators: "운영자에게 알렸습니다"
+ notify_user: "글쓴이에게 메시지를 보냈습니다"
+ bookmark: "북마크 했습니다"
+ like: "좋아해요"
+ vote: "이곳에 투표했습니다"
by_you:
- off_topic: "이 글을 토픽에서 벗어남으로 신고함"
- spam: "이 글을 스팸으로 신고함"
- inappropriate: "이 글을 부적절로 신고함"
- notify_moderators: "이 글을 운영자에게 보고함"
- notify_user: "이 사용자에게 메시지를 보냈습니다."
- bookmark: "이 글을 북마크함"
- like: "'좋아요' 했습니다"
- vote: "이 글에 투표함"
+ off_topic: "이글을 주제에서 벗어났다고 신고했습니다"
+ spam: "이글을 스팸으로 신고했습니다"
+ inappropriate: "이 글을 부적절한 컨텐츠로 신고했습니다"
+ notify_moderators: "운영자에게 알렸습니다"
+ notify_user: "글쓴이에게 메시지를 보냈습니다"
+ bookmark: "이 글을 북마크했습니다"
+ like: "좋아해요"
+ vote: "이 글에 투표했습니다"
by_you_and_others:
off_topic:
- other: "나와 {{count}}명의 다른 사용자가 이 글을 토픽에서 제외했습니다."
+ other: "당신 외 {{count}}명이 주제에서 벗어났다고 신고했습니다"
spam:
- other: "나와 {{count}}명의 다른 사람들이 스팸이라고 신고했습니다"
+ other: "당신 외 {{count}}명이 스팸이라고 신고했습니다"
inappropriate:
- other: "나와 {{count}}명의 다른 사람들이 부적절하다고 신고했습니다"
+ other: "당신 외 {{count}}명이 부적절한 컨텐츠라고 신고했습니다"
notify_moderators:
- other: "나와 {{count}}명의 다른 사람들이 적당하다고 표시했습니다."
+ other: "당신 외 {{count}}명이 운영자에게 알렸습니다"
notify_user:
- other: "나와 {{count}}명의 사용자가 이 사용자에게 메시지를 보냈습니다."
+ other: "당신 외 {{count}}명이 글쓴이에게 메시지를 보냈습니다"
bookmark:
- other: "나와 {{count}}명의 다른 사람들이 북마크 했습니다."
+ other: "당신 외 {{count}}명이 북마크 했습니다"
like:
- other: "나와 {{count}}명의 다른 사람들이 좋아합니다."
+ other: "당신 외 {{count}}명이 좋아합니다"
vote:
- other: "나와 {{count}}명의 다른 사람들이 이 포스트에 투표했습니다."
+ other: "당신 외 {{count}}명이 이 글에 투표했습니다"
by_others:
off_topic:
- other: "{{count}}명의 사용자가 이 글을 토픽에서 제외했습니다."
+ other: "{{count}}명이 주제에서 벗어났다고 신고했습니다"
spam:
- other: "{{count}}명의 사람들이 스팸이라고 신고했습니다"
+ other: "{{count}}명의 스팸이라고 신고했습니다"
inappropriate:
- other: "{{count}}명의 사람들이 부적절하다고 신고했습니다"
+ other: "{{count}}명이 부적절한 컨텐츠라고 신고했습니다"
notify_moderators:
- other: "{{count}}명의 사람들이 이 글을 운영자에게 신고했습니다"
+ other: "{{count}}명이 운영자에게 알렸습니다"
notify_user:
- other: "{{count}}명이 이 사용자에게 메시지를 보냈습니다."
+ other: "{{count}}명이 글쓴이에게 메시지를 보냈습니다"
bookmark:
- other: "{{count}}명의 사용자가 이 글을 북마크했습니다."
+ other: "{{count}}명이 북마크했습니다"
like:
- other: "{{count}}명이 이 글을 좋아합니다"
+ other: "{{count}}명이 좋아합니다"
vote:
- other: "{{count}}명의 사용자가 이 글을 추천했습니다."
+ other: "{{count}}명이 이 글에 투표했습니다"
delete:
confirm:
other: "모든 글들을 삭제하시겠습니까?"
@@ -1369,6 +1410,7 @@ ko:
topic_template: "토픽 템플릿"
delete: '카테고리 삭제'
create: '새 카테고리'
+ create_long: '새 카테고리 만들기'
save: '카테고리 저장'
slug: '카테고리 Slug'
slug_placeholder: '(Optional) dashed-words for url'
@@ -1379,7 +1421,7 @@ ko:
topic: "카테고리 토픽"
logo: "카테고리 로고 이미지"
background_image: "카테고리 백그라운드 이미지"
- badge_colors: "뱃지 색상"
+ badge_colors: "배지 색상"
background_color: "배경 색상"
foreground_color: "글씨 색상"
name_placeholder: "짧고 간결해야합니다"
@@ -1398,7 +1440,8 @@ ko:
email_in_allow_strangers: "계정이 없는 익명 유저들에게 이메일을 받습니다."
email_in_disabled: "이메일로 새 토픽 작성하기 기능이 비활성화되어 있습니다. 사이트 설정에서 '이메일로 새 토픽작성하기'를 활성화 해주세요."
email_in_disabled_click: '"email in" 활성화'
- allow_badges_label: "뱃지가 이 카테고리에서 주어질 수 있도록 허용"
+ suppress_from_homepage: "홈페이지에서 이 카테고리를 감춥니다."
+ allow_badges_label: "배지가 이 카테고리에서 주어질 수 있도록 허용"
edit_permissions: "권한 수정"
add_permission: "권한 추가"
this_year: "올해"
@@ -1418,33 +1461,34 @@ ko:
muted:
title: "알림 꺼짐"
flagging:
- title: '우리 커뮤니티에 기여해 주셔서 감사합니다.'
- private_reminder: '신고는 오직 관리자만 볼 수 있습니다.'
- action: '글 신고하기'
- take_action: "조치를 취하기"
- notify_action: '메시지'
- delete_spammer: "스팸 사용자 삭제"
- delete_confirm: "이 사용자의 %{posts}개의 게시글과 %{topics}개의 토픽을 삭제하고 IP주소 %{ip_address}와 이메일 %{email}을 영구 블락하려고 합니다. 이 사용자가 악성 사용자임이 확실합니까? "
- yes_delete_spammer: "예, 스팸 사용자 삭제."
+ title: '우리 커뮤니티 질서를 지키는데 도와주셔서 감사합니다!'
+ private_reminder: '신고는 비밀이기 때문에 오직 운영진들만 볼 수 있습니다'
+ action: '글 신고했습니다'
+ take_action: "조치하기"
+ notify_action: '메시지 보내기'
+ delete_spammer: "네, 스패머 회원을 삭제합니다"
+ delete_confirm: "이 회원의 글 %{posts}개 및 토픽 %{topics}개를 삭제하고 IP주소 %{ip_address}와 이메일 %{email}을 영구 차단하려고 합니다. 이 회원이 정말 스패머 확실합니까?"
+ yes_delete_spammer: "예, 스팸 회원을 삭제합니다"
ip_address_missing: "(알 수 없음)"
- hidden_email_address: "(감춰짐)"
- submit_tooltip: "신고 접수하기"
+ hidden_email_address: "(숨김)"
+ submit_tooltip: "비밀 신고하기"
take_action_tooltip: "커뮤니티의 신고 수가 채워지기 기다리지 않고, 바로 신고 수를 제재 수준까지 채웁니다."
- cant: "죄송합니다, 지금 이 글을 신고 할 수 없습니다."
+ cant: "죄송합니다, 지금은 이 글을 신고할 수 없습니다"
+ notify_staff: '운영진에게 알리기'
formatted_name:
- off_topic: "오프 토픽입니다."
- inappropriate: "부적절함"
+ off_topic: "주제에 벗어났습니다"
+ inappropriate: "부적절 컨텐츠입니다"
spam: "스팸입니다"
custom_placeholder_notify_user: "구체적이고, 건설적이며, 항상 친절하세요."
- custom_placeholder_notify_moderators: "구체적으로 사용자님께서 걱정하는 것과 가능한 모든 관련된 링크를 제공해주세요."
+ custom_placeholder_notify_moderators: "구체적으로 회원님이 걱정하는 내용과 가능한 모든 관련된 링크를 제공해주세요."
custom_message:
at_least: "최소한 {{n}}자를 입력하세요"
more: "{{n}} 이동합니다"
left: "{{n}} 나머지"
flagging_topic:
- title: "우리 커뮤니티에 기여해 주셔서 감사합니다."
- action: "신고된 토픽"
- notify_action: "메시지"
+ title: "우리 커뮤니티 질서를 지키는데 도와주셔서 감사합니다!"
+ action: "토픽 신고하기"
+ notify_action: "메시지 보내기"
topic_map:
title: "토픽 요약"
participants_title: "빈번한 게시자"
@@ -1505,6 +1549,9 @@ ko:
with_topics: "%{filter} 토픽"
with_category: "%{filter} %{category} 토픽"
latest:
+ title: "최근글"
+ title_with_count:
+ other: "최근글 ({{count}})"
help: "가장 최근 토픽"
hot:
title: "인기 있는 글"
@@ -1520,9 +1567,19 @@ ko:
title_in: "카테고리 - {{categoryName}}"
help: "카테고리별로 그룹화 된 모든 토픽"
unread:
+ title: "읽지 않은 글"
+ title_with_count:
+ other: "읽지 않은 글 ({{count}})"
help: "지켜보거나 추적 중인 읽지 않은 토픽 "
+ lower_title_with_count:
+ other: "{{count}} unread"
new:
+ lower_title_with_count:
+ other: "{{count}} new"
lower_title: "new"
+ title: "새글"
+ title_with_count:
+ other: "새글 ({{count}})"
help: "며칠 내에 만들어진 토픽"
posted:
title: "내 글"
@@ -1531,9 +1588,12 @@ ko:
title: "북마크"
help: "북마크된 토픽"
category:
+ title: "{{categoryName}}"
+ title_with_count:
+ other: "{{categoryName}} ({{count}})"
help: "{{categoryName}}카테고리의 최신 토픽"
top:
- title: "인기"
+ title: "인기글"
help: "작년 또는 지난 달, 지난 주, 어제에 활발했던 토픽"
all:
title: "전체 시간"
@@ -1610,6 +1670,7 @@ ko:
refresh_report: "보고서 새로고침"
start_date: "시작일"
end_date: "종료일"
+ groups: "모든 그룹"
commits:
latest_changes: "최근 변경 사항: 자주 업데이트하십시오!"
by: "에 의해"
@@ -1618,31 +1679,31 @@ ko:
old: "지난"
active: "활성화된"
agree: "동의"
- agree_title: "이 신고가 올바르고 타당한지 확인하세요."
+ agree_title: "이 신고가 올바르고 타당함을 확인합니다"
agree_flag_modal_title: "동의 및 ..."
- agree_flag_hide_post: "동의 (포스트 숨기기 + 개인 메시지 보내기)"
- agree_flag_hide_post_title: "Hide this post and automatically send the user a message urging them to edit it"
- agree_flag_restore_post: "동의하기(글 복원)"
+ agree_flag_hide_post: "동의 (글 숨기기 + 개인 메시지 보내기)"
+ agree_flag_hide_post_title: "이 글을 숨기고 글쓴이에게 글을 수정하라고 개인메시지 자동발송하기"
+ agree_flag_restore_post: "동의 (글 복원)"
agree_flag_restore_post_title: "글을 복원하기"
agree_flag: "신고에 동의함"
agree_flag_title: "신고에 동의하며 글이 수정되지 않도록 유지하기"
defer_flag: "연기"
- defer_flag_title: "신고 제거하기. 현재 어떠한 행위를 할 필요 없음"
+ defer_flag_title: "신고 제거하기. 별도추가조치는 더이상 필요없습니다"
delete: "삭제"
delete_title: "신고에서 멘션된 글 삭제하기"
- delete_post_defer_flag: "글을 삭제하고 신고에 결정을 따름"
+ delete_post_defer_flag: "글을 삭제하고 신고를 보류함"
delete_post_defer_flag_title: "글을 삭제하고 첫번째 글이면 토픽 삭제하기"
delete_post_agree_flag: "글을 삭제하고 신고에 동의함"
delete_post_agree_flag_title: "글을 삭제하고 첫번째 글이면 토픽 삭제하기"
delete_flag_modal_title: "삭제하고.."
delete_spammer: "스패머 삭제"
- delete_spammer_title: "사용자와 사용자가 작성한 모든 토픽과 글을 삭제함 "
- disagree_flag_unhide_post: "Disagree (글 감추기 취소)"
+ delete_spammer_title: "글쓴이의 모든 글과 토픽을 삭제하고 회원계정도 제거하기"
+ disagree_flag_unhide_post: "동의안함 (글 숨김 취소)"
disagree_flag_unhide_post_title: "글의 모든 신고를 삭제하고 글을 볼 수 있도록 변경"
- disagree_flag: "Disagree"
+ disagree_flag: "동의안함"
disagree_flag_title: "신고를 유효하지 않거나 올바르지 않은 것으로 거부함"
clear_topic_flags: "완료"
- clear_topic_flags_title: "이 토픽을 조사하였고 이슈는 해결되었습니다. 플래그를 지우기 위해 완료를 클리하세요"
+ clear_topic_flags_title: "토픽 조사를 끝냈고 이슈를 해결했습니다. 신고를 지우기 위해 완료를 클릭하세요"
more: "(더 많은 답글...)"
dispositions:
agreed: "agreed"
@@ -1685,15 +1746,23 @@ ko:
delete_confirm: "이 그룹을 삭제 하시겠습니까?"
delete_failed: "이것은 자동으로 생성된 그룹입니다. 삭제할 수 없습니다."
delete_member_confirm: "'%{group}' 그룹에서 '%{username}'을 제외시키겠습니까?"
+ delete_owner_confirm: "'%{username}' 님에게서 소유자권한을 제거할까요?"
name: "이름"
add: "추가"
add_members: "사용자 추가하기"
custom: "Custom"
+ bulk_complete: "회원들이 그룹에 추가되었습니다."
+ bulk: "그룹에 한꺼번에 추가하기"
+ bulk_paste: "한 줄당 하나씩 아이디 또는 이메일 리스트를 붙여넣기 하세요."
+ bulk_select: "(그룹을 선택하세요)"
automatic: "자동화"
automatic_membership_email_domains: "이 목록의 있는 항목과 사용자들이 등록한 이메일 도메인이 일치할때 이 그룹에 포함"
automatic_membership_retroactive: "이미 등록된 사용자에게 같은 이메일 도메인 규칙 적용하기"
default_title: "Default title for all users in this group"
primary_group: "Automatically set as primary group"
+ group_owners: 소유자
+ add_owners: 소유자 추가하기
+ incoming_email_placeholder: "이메일 주소를 입력하세요"
api:
generate_master: "마스터 API 키 생성"
none: "지금 활성화된 API 키가 없습니다."
@@ -1767,11 +1836,11 @@ ko:
is_disabled: "사이트 설정에서 '복구 기능'이 비활성화 되어있습니다."
label: "복구"
title: "백업을 이용하여 복구"
- confirm: "정말 이 백업을 이용하여 복구할까요?"
+ confirm: "정말 이 백업으로 복원할까요?"
rollback:
label: "롤백"
title: "데이터베이스를 이전 workiong state로 되돌리기"
- confirm: "정말로 이전 작업 상태로 데이터베이스를 롤백하시겠습니까?"
+ confirm: "데이타베이스를 이전 상태로 롤백 또는 되돌리기 할까요?"
export_csv:
user_archive_confirm: "정말로 내 글을 다운로드 받습니까?"
success: "Export initiated, you will be notified via message when the process is complete."
@@ -1823,6 +1892,10 @@ ko:
opacity: "투명도"
copy: "복사"
email_templates:
+ title: "이메일 템플릿"
+ subject: "제목"
+ multiple_subjects: "이 이메일 양식은 제목이 여러가지 있습니다."
+ body: "본문"
none_selected: "편집하려는 이메일 템플릿을 선택하세요."
revert: "변경사항 취소"
revert_confirm: "정말로 변경사항을 되돌리시겠습니까?"
@@ -1870,9 +1943,6 @@ ko:
love:
name: '사랑'
description: "좋아요 버튼 색"
- wiki:
- name: '위키'
- description: "위키 글의 배경색으로 사용될 기본 색상"
email:
title: "이메일"
settings: "설정"
@@ -1902,6 +1972,31 @@ ko:
last_seen_user: "마지막으로 본 사용자"
reply_key: "답글 단축키"
skipped_reason: "생략 이유"
+ incoming_emails:
+ from_address: "보내는사람"
+ to_addresses: "받는사람"
+ cc_addresses: "참조"
+ subject: "제목"
+ error: "에러"
+ none: "수신된 이메일이 없습니다."
+ modal:
+ error: "에러"
+ return_path: "Return-Path"
+ message_id: "Message-Id"
+ in_reply_to: "In-Reply-To"
+ references: "레퍼런스"
+ date: "날짜"
+ from: "보내는사람"
+ to: "받는사람"
+ cc: "참조"
+ subject: "제목"
+ body: "본문"
+ filters:
+ from_placeholder: "from@example.com"
+ to_placeholder: "to@example.com"
+ cc_placeholder: "cc@example.com"
+ subject_placeholder: "제목..."
+ error_placeholder: "에러"
logs:
none: "로그가 없습니다."
filters:
@@ -1945,8 +2040,8 @@ ko:
no_previous: "이전 값이 없습니다."
deleted: "새로운 값이 없습니다. 기록이 삭제되었습니다."
actions:
- delete_user: "사용자 삭제"
- change_trust_level: "신뢰도 변경"
+ delete_user: "회원 삭제"
+ change_trust_level: "회원등급 변경"
change_username: "아이디 변경"
change_site_setting: "사이트 설정 변경"
change_site_customization: "사이트 커스텀화 변경"
@@ -1954,8 +2049,8 @@ ko:
change_site_text: "site text 변경"
suspend_user: "suspend user"
unsuspend_user: "unsuspend user"
- grant_badge: "뱃지 부여"
- revoke_badge: "뱃지 회수"
+ grant_badge: "배지 부여"
+ revoke_badge: "배지 회수"
check_email: "이메일 확인"
delete_topic: "토픽 삭제"
delete_post: "글 삭제"
@@ -1967,6 +2062,11 @@ ko:
create_category: "카테고리 만들기"
block_user: "사용자 차단"
unblock_user: "사용자 차단 해제"
+ grant_admin: "관리자권한 부여"
+ revoke_admin: "관리자권한 회수"
+ grant_moderation: "운영자권한 부여"
+ revoke_moderation: "운영자권한 회수"
+ backup_operation: "백업 작업"
screened_emails:
title: "블락된 이메일들"
description: "누군가가 새로운 계정을 만들면 아래 이메일 주소는 체크되고 등록은 블락됩니다, 또는 다른 조치가 취해집니다."
@@ -2026,16 +2126,16 @@ ko:
reject_selected:
other: "거부한 사용자 ({{count}}명)"
titles:
- active: '활성화된 사용자'
- new: '새로운 사용자'
- pending: '검토가 필요한 사용자'
- newuser: '사용자 신뢰도 0 (새로운 사용자)'
- basic: '사용자 신뢰도 1 (초보 사용자)'
- member: '사용자 신뢰도 2 (회원)'
- regular: '사용자 신뢰도 3 (정규)'
- leader: '사용자 신뢰도 4 (지도자)'
+ active: '활동적인 회원'
+ new: '신규회원'
+ pending: '검토 대기중인 회원'
+ newuser: '0등급 회원 (신규가입 회원)'
+ basic: '1등급 회원 (초보 회원)'
+ member: '2등급 회원 (부회원)'
+ regular: '3등급 회원 (정회원)'
+ leader: '4등급 회원 (리더)'
staff: "스태프"
- admins: '관리자 사용자 목록'
+ admins: '관리자'
moderators: '운영자'
blocked: '블락된 사용자들'
suspended: '접근 금지된 사용자들'
@@ -2064,6 +2164,7 @@ ko:
moderator: "운영자?"
admin: "관리자?"
blocked: "블락"
+ staged: "격리조치?"
show_admin_profile: "관리자"
edit_title: "제목 수정"
save_title: "제목 저장"
@@ -2130,39 +2231,40 @@ ko:
deactivate_explanation: "비활성화 사용자는 이메일 인증을 다시 받아야합니다."
suspended_explanation: "접근 금지된 유저는 로그인 할 수 없습니다."
block_explanation: "블락 사용자는 글을 작성하거나 토픽을 작성할 수 없습니다."
- trust_level_change_failed: "신뢰도 변경에 문제가 있습니다."
+ stage_explanation: "격리조치된 회원은 특정 토픽에만 이메일로만 글을 쓸 수 있습니다."
+ trust_level_change_failed: "회원등급 변경에 실패했습니다."
suspend_modal_title: "거부된 사용자"
- trust_level_2_users: "신뢰도 2 사용자들"
- trust_level_3_requirements: "사용자 신뢰도 3 이상이 필요"
- trust_level_locked_tip: "신뢰도 시스템이 잠겼습니다. 시스템이 사용자를 승급이나 강등시키지 않을 것 입니다."
- trust_level_unlocked_tip: "신뢰도 시스템이 잠금이 해제되었습니다. 시스템은 사용자를 승급이나 강등 시킬 것입니다."
- lock_trust_level: "신뢰도 시스템 잠금"
- unlock_trust_level: "신뢰도 시스템 잠금 해제"
+ trust_level_2_users: "2등급 회원들"
+ trust_level_3_requirements: "회원등급 3 이상이어야 합니다."
+ trust_level_locked_tip: "회원등급이 고정되었습니다. 시스템이 회원등급을 올리거나 내리지 않을 것입니다."
+ trust_level_unlocked_tip: "회원등급 고정이 풀렸습니다. 시스템이 회원등급을 자동적으로 올리거나 내릴 것입니다."
+ lock_trust_level: "회원등급 고정"
+ unlock_trust_level: "회원등급 고정 해제"
tl3_requirements:
- title: "레벨 3 권한이 필요합니다."
+ title: "3등급 회원이 되기 위한 자격"
table_title: "지난 %{time_period} 일간"
value_heading: "값"
- requirement_heading: "필수"
- visits: "방문수"
+ requirement_heading: "자격요건"
+ visits: "방문횟수"
days: "일"
- topics_replied_to: "답글 달린 토픽"
- topics_viewed: "읽은 토픽 수"
- topics_viewed_all_time: "읽은 토픽 수 (전체 기간)"
- posts_read: "읽은 글 수"
- posts_read_all_time: "읽은 글 수 (전체 기간)"
- flagged_posts: "신고된 글"
- flagged_by_users: "신고한 사용자들"
- likes_given: "선사한 '좋아요'"
- likes_received: "받은 '좋아요'"
- likes_received_days: "받은 '좋아요' : 특정일"
- likes_received_users: "받은 좋아요: 순사용자(unique users)"
- qualifies: "신뢰 등급 3의 조건에 부합합니다."
- does_not_qualify: "신뢰 등급 3의 조건에 부합하지 않습니다."
+ topics_replied_to: "댓글 달은 토픽 갯수"
+ topics_viewed: "열어본 토픽 갯수"
+ topics_viewed_all_time: "열어본 토픽 갯수 (전체 기간)"
+ posts_read: "읽은 글 갯수"
+ posts_read_all_time: "읽은 글 갯수 (전체 기간)"
+ flagged_posts: "신고당한 글 갯수"
+ flagged_by_users: "신고한 회원수"
+ likes_given: "'좋아요' 선물한 횟수"
+ likes_received: "'좋아요' 받은 횟수"
+ likes_received_days: "한번이라도 '좋아요' 받아본 날짜횟수"
+ likes_received_users: "한번이라도 '좋아요' 선물해준 회원수"
+ qualifies: "3등급회원 자격을 만족합니다"
+ does_not_qualify: "3등급회원 자격을 만족하지 않습니다"
will_be_promoted: "곧 승급 됩니다."
will_be_demoted: "곧 강등됩니다."
on_grace_period: "현재 승급 유예 기간이므로 강등되지 않습니다."
- locked_will_not_be_promoted: "신뢰도 시스템이 잠겼습니다. 승급되지 않습니다."
- locked_will_not_be_demoted: "신뢰도 시스템이 잠겼습니다. 강등되지 않습니다."
+ locked_will_not_be_promoted: "회원등급이 고정되었습니다. 승급되지 않을 것입니다."
+ locked_will_not_be_demoted: "회원등급이 고정되었습니다. 강등되지 않을 것입니다."
sso:
title: "Single Sign On"
external_id: "External ID"
@@ -2220,86 +2322,86 @@ ko:
add_url: "URL 추가"
add_host: "Host 추가"
categories:
- all_results: 'All'
+ all_results: '전체'
required: '필수'
basic: '기본 설정'
- users: '사용자'
+ users: '회원'
posting: '글'
email: '이메일'
files: '파일'
- trust: '신뢰도'
+ trust: '회원등급'
security: '보안'
onebox: "Onebox"
- seo: 'SEO'
+ seo: '검색엔진최적화(SEO)'
spam: '스팸'
rate_limits: '제한'
developer: '개발자'
embedding: "Embedding"
- legal: "합법적인"
+ legal: "법률조항"
uncategorized: '카테고리 없음'
backups: "백업"
login: "로그인"
plugins: "플러그인"
- user_preferences: "사용자 환경 설정"
+ user_preferences: "회원 환경설정"
badges:
- title: 뱃지
- new_badge: 새로운 뱃지
+ title: 배지
+ new_badge: 새 배지
new: New
name: 이름
- badge: 뱃지
+ badge: 배지
display_name: 표시 이름
description: 설명
- badge_type: 뱃지 종류
+ badge_type: 배지 종류
badge_grouping: 그룹
badge_groupings:
- modal_title: 뱃지 그룹으로 나누기
+ modal_title: 배지 그룹으로 나누기
granted_by: 배지 부여자
granted_at: 배지 수여일
- reason_help: ( 토픽이나 게시글 링크)
+ reason_help: (토픽 또는 댓글로 가는 링크)
save: 저장
delete: 삭제
- delete_confirm: 정말로 이 뱃지를 삭제하시겠습니까?
+ delete_confirm: 정말로 이 배지를 삭제할까요?
revoke: 회수
- reason: 원인
+ reason: 이유
expand: 확장 …
- revoke_confirm: 정말로 이 뱃지를 회수하시겠습니까?
- edit_badges: 뱃지 수정
- grant_badge: 뱃지 부여
- granted_badges: 부여된 뱃지
+ revoke_confirm: 정말로 이 배지를 회수할까요?
+ edit_badges: 배지 수정
+ grant_badge: 배지 부여
+ granted_badges: 부여된 배지
grant: 부여
- no_user_badges: "%{name}님은 수여받은 뱃지가 없습니다."
- no_badges: 받을 수 있는 뱃지가 없습니다.
- none_selected: "시작하려면 뱃지를 선택하세요"
- allow_title: 뱃지를 칭호로 사용 가능하도록 허용
+ no_user_badges: "%{name}님은 배지가 없습니다."
+ no_badges: 받을 수 있는 배지가 없습니다.
+ none_selected: "시작하려면 배지를 선택하세요"
+ allow_title: 배지를 칭호로 사용 가능하도록 허용
multiple_grant: 중복 부여할 수 있도록 허용
- listable: 공개 뱃지 페이지에 표시되는 뱃지입니다.
- enabled: 뱃지 기능 사용
+ listable: 공개 배지 페이지에 표시되는 배지입니다.
+ enabled: 배지 기능 사용
icon: 아이콘
image: 이미지
- icon_help: "Font Awesome class나 이미지 주소를 사용합니다"
- query: 뱃지 Query(SQL)
- target_posts: 포스트들을 타겟으로 하는 query
- auto_revoke: 매일 회수 query를 실행한다.
- show_posts: 뱃지 페이지에서 뱃지를 받게한 글을 보여줍니다.
+ icon_help: "이미지 주소로 Font Awesome 클래스 또는 URL을 사용합니다"
+ query: 배지 쿼리(SQL)
+ target_posts: 글들을 대상으로 하는 쿼리
+ auto_revoke: 회수 쿼리를 매일 실행
+ show_posts: 배지 페이지에서 배지를 받게한 글을 보여줍니다.
trigger: Trigger
trigger_type:
none: "매일 업데이트"
- post_action: "사용자가 포스트에 액션을 했을 때"
- post_revision: "사용자가 포스트를 수정거나 작성했을 때"
- trust_level_change: "사용자의 신뢰도가 변했을 떄"
- user_change: "사용자가 수정되거나 생성되었을 때"
+ post_action: "회원이 글에 액션을 할 때"
+ post_revision: "회원이 새글을 쓰거나 글을 수정할 때"
+ trust_level_change: "회원등급이 바뀔 때"
+ user_change: "회원이 생성되거나 수정될 때"
preview:
- link_text: "수여된 뱃지 미리보기"
- plan_text: "Query plan 미리보기"
- modal_title: "뱃지 Query 미리보기"
- sql_error_header: "Query에 오류가 있습니다."
- error_help: "뱃지 query의 도움말을 보려면 다음의 링크를 확인하세요."
+ link_text: "수여된 배지 미리보기"
+ plan_text: "쿼리 플랜 미리보기"
+ modal_title: "배지 쿼리 미리보기"
+ sql_error_header: "질의 중 오류가 발생했습니다"
+ error_help: "배지 쿼리 도움말을 보려면 다음 링크를 확인하세요."
bad_count_warning:
header: "주의!"
- text: "사라진 뱃지 샘플이 있습니다. 뱃지 query가 존재하지 않는 user ID나 post ID를 반환할 경우 발생합니다. 예상하지 못한 결과를 일으킬 수 있으니 query를 다시 한번 확인하세요."
- no_grant_count: "할당된 뱃지가 없습니다."
+ text: "사라진 배지 샘플이 있습니다. 배지 query가 존재하지 않는 user ID나 post ID를 반환할 경우 발생합니다. 예상하지 못한 결과를 일으킬 수 있으니 query를 다시 한번 확인하세요."
+ no_grant_count: "할당된 배지가 없습니다."
grant_count:
- other: "%{count}개의 뱃지가 할당됨."
+ other: "%{count}개의 배지가 할당됨."
sample: "샘플:"
grant:
with: %{username}
@@ -2307,28 +2409,35 @@ ko:
with_post_time: %{username} for post in %{link} at %{time}
with_time: %{username} at %{time}
emoji:
- title: "Emoji"
- help: "모든 사용자가 사용가능한 새로운 이미지를 추가. (프로 팁: 여러개의 파일을 드래그 & 드롭으로 한번에)"
- add: "새로운 Emoji 추가"
+ title: "이모지"
+ help: "모든 사람이 쓸 수 있는 이모지를 추가합니다. (팁: 여러개 파일을 한 번에 드래그 & 드롭할 수 있어요)"
+ add: "새 이모지 추가"
name: "이름"
image: "이미지"
- delete_confirm: "정말 :%{name}: emoji를 삭제하시겠습니까?"
+ delete_confirm: "정말로 :%{name}: 이모지를 삭제할까요?"
embedding:
get_started: "다른 웹사이트에 Discourse를 임베드하려면 호스트 추가부터 하세요"
confirm_delete: "정말로 host를 삭제할까요?"
- title: "Embedding"
+ sample: "Discourse 토픽을 웨사이트에 삽입(embed)하기 위해 다음 HTML코드를 이용하세요. REPLACE_ME 부분을 당신이 삽입하려는 웨사이트의 정식URL로 바꿔치기 하시면 됩니다."
+ title: "삽입(Embedding)"
host: "허용 Host"
edit: "편집"
category: "카테고리에 게시"
add_host: "Host 추가"
- settings: "Embedding 설정"
- feed_settings: "Feed 설정"
- crawling_settings: "클롤러 설정"
- embed_post_limit: "글 개수가 최대치입니다"
- embed_truncate: "임베드된 글 비우기"
+ settings: "삽입(Embedding) 설정"
+ feed_settings: "피드 설정"
+ feed_description: "당신 사이트의 RSS/ATOM 피드를 알려주시면 Discourse가 그 사이트 컨텐트를 더 잘 가져올 수 있습니다."
+ crawling_settings: "크롤러 설정"
+ crawling_description: "When Discourse creates topics for your posts, if no RSS/ATOM feed is present it will attempt to parse your content out of your HTML. Sometimes it can be challenging to extract your content, so we provide the ability to specify CSS rules to make extraction easier."
+ embed_by_username: "토픽 생성 시 사용할 회원이름(Username)"
+ embed_post_limit: "삽입(embed)할 글 최대갯수"
+ embed_username_key_from_feed: "피드에서 discourse usename을 꺼내오기 위한 키(key)"
+ embed_truncate: "임베드된 글 뒷부분 잘라내기"
+ embed_whitelist_selector: "CSS selector for elements that are allowed in embeds"
+ embed_blacklist_selector: "CSS selector for elements that are removed from embeds"
feed_polling_enabled: "RSS/ATOM으로 글 가져오기"
- feed_polling_url: "RSS/ATOM 피드로 긁을 URL"
- save: "Embedding 설정 저장하기"
+ feed_polling_url: "긁어올 RSS/ATOM 피드 URL"
+ save: "삽입(Embedding) 설정 저장하기"
permalink:
title: "고유링크"
url: "URL"
@@ -2357,8 +2466,10 @@ ko:
new: 'g, n 새로운'
unread: 'g, u 읽지 않은'
categories: 'g, c 카테고리'
- top: 'g, t 인기'
+ top: 'g, t 인기글'
bookmarks: 'g, b 북마크'
+ profile: 'g, p 프로필'
+ messages: 'g, m 메시지'
navigation:
title: 'Navigation'
jump: '# 글 번호로'
@@ -2377,6 +2488,7 @@ ko:
help: '? 키보드 도움말 열기'
dismiss_new_posts: 'x, r 새글을 읽은 상태로 표시하기'
dismiss_topics: 'x, t 토픽 무시하기'
+ log_out: 'shift+zshift+z 로그아웃'
actions:
title: 'Actions'
bookmark_topic: 'f 토글 북마크 토픽'
@@ -2397,16 +2509,19 @@ ko:
mark_tracking: 'm, t 토픽 알람 : 추적하기'
mark_watching: 'm, w 토픽 알람 : 주시하기'
badges:
- title: 뱃지
+ earned_n_times:
+ other: "이 배지를 %{count}번 받았습니다"
+ more_with_badge: "이 배지를 받은 다른사람들"
+ title: 배지
allow_title: "can be used as a title"
multiple_grant: "can be awarded multiple times"
badge_count:
- other: "뱃지 %{count}개"
+ other: "배지 %{count}개"
more_badges:
other: "+%{count} More"
granted:
other: "%{count} 개 부여"
- select_badge_for_title: 칭호로 사용할 뱃지를 선택하세요
+ select_badge_for_title: 칭호로 사용할 배지를 선택하세요
none: "<없음>"
badge_grouping:
getting_started:
@@ -2414,102 +2529,102 @@ ko:
community:
name: 커뮤니티
trust_level:
- name: 신뢰 등급
+ name: 회원등급
other:
name: 기타
posting:
name: 글 관련 배지
badge:
editor:
- name: 편집자
- description: 첫 포스트 편집
+ name: 에디터
+ description: 첫 글 작성
basic_user:
- name: 기본
- description: 부여되면 커뮤니티의 기본 기능 수행 가능
+ name: 초보회원
+ description: 초보회원은 커뮤니티의 기본기능을 사용할 수 있습니다
member:
- name: 멤버
- description: Granted invitations
+ name: 부회원
+ description: 부회원은 다른 사람을 커뮤티니에 초대할 수 있습니다
regular:
- name: Regular
- description: Granted recategorize, rename, followed links and lounge
+ name: 정회원
+ description: 정회원은 토픽 제목과 카테고리를 바꾸거나 HTML Link Follow 기능을 사용, 정회원 전용카테고리에 접근할 수 있습니다.
leader:
- name: 중견
- description: Granted global edit, pin, close, archive, split and merge
+ name: 리더
+ description: 리더는 모든 글을 수정하거나 토픽 핀고정, 토픽닫기, 토픽아카이빙, 토픽쪼개기, 토픽합치기 등을 할 수 있습니다.
welcome:
- name: 환영합니다
- description: 좋아요 받음
+ name: 웰컴
+ description: 좋아요 선물받음
autobiographer:
name: 자서전 작가
- description: 사용자의 프로필 정보를 작성함
+ description: 회원 프로필 정보를 작성했습니다
anniversary:
- name: 기념일
- description: Active member for a year, posted at least once
+ name: 1주년
+ description: 1년동안 열심히 활동하고 글도 1개이상 썼습니다
nice_post:
- name: 괜찮은 글
- description: 작성한 글이 좋아요를 10개 받았습니다. 이 뱃지는 중복 수여 가능합니다.
+ name: Nice Post
+ description: 작성한 글이 좋아요를 10개 받았습니다. 이 배지는 여러번 받을 수 있습니다.
good_post:
- name: 좋은 글
- description: 작성한 글이 좋아요를 25개 받았습니다. 이 뱃지는 중복 수여 가능합니다.
+ name: Good Post
+ description: 작성한 글이 좋아요를 25개 받았습니다. 이 배지는 여러번 받을 수 있습니다.
great_post:
- name: 굉장히 좋은 글
- description: 작성한 글이 좋아요를 50개 받았습니다. 이 뱃지는 중복 수여 가능합니다.
+ name: Great Post
+ description: 작성한 글이 좋아요를 50개 받았습니다. 이 배지는 여러번 받을 수 있습니다.
nice_topic:
- name: Nice 토픽
- description: 10개의 '좋아요'를 받았습니다. 이 뱃지는 여러번 받을 수 있습니다.
+ name: Nice Topic
+ description: 10개의 '좋아요'를 받았습니다. 이 배지는 여러번 받을 수 있습니다.
good_topic:
- name: Good 토픽
- description: 25개의 '좋아요'를 받았습니다. 이 뱃지는 여러번 받을 수 있습니다.
+ name: Good Topic
+ description: 25개의 '좋아요'를 받았습니다. 이 배지는 여러번 받을 수 있습니다.
great_topic:
- name: Great 토픽
- description: 50개의 '좋아요'를 받았습니다. 이 뱃지는 여러번 받을 수 있습니다.
+ name: Great Topic
+ description: 50개의 '좋아요'를 받았습니다. 이 배지는 여러번 받을 수 있습니다.
nice_share:
- name: Nice 공유
- description: 25명의 사용자로부터 공유되었습니다
+ name: Nice Share
+ description: 방문자 25명이 글을 공유했습니다
good_share:
- name: Good 공유
- description: 300명의 사용자로부터 공유되었습니다
+ name: Good Share
+ description: 방문자 300명의 글을 공유했습니다
great_share:
- name: Great 공유
- description: 1000명의 사용자로부터 공유되었습니다
+ name: Great Share
+ description: 방문자 1000명이 글을 공유했습니다
first_like:
- name: 첫 좋아요
+ name: 처음 좋아요
description: 처음으로 글에 '좋아요'를 했습니다.
first_flag:
- name: 첫 신고
+ name: 처음 신고해요
description: 글을 처음으로 신고하였습니다.
promoter:
- name: Promoter
- description: 사용자 초대
+ name: 후원자
+ description: 회원을 1명 초대했습니다
campaigner:
- name: Campaigner
- description: 기본 사용자 3명 초대하기 (신뢰도 1)
+ name: 운동가
+ description: 초보회원(1등급회원) 3명을 초대했습니다
champion:
- name: Champion
- description: 기본 사용자 5명 초대하기 (신뢰도 2)
+ name: 챔피언
+ description: 초보회원(2등급회원) 5명을 초대했습니다
first_share:
- name: 첫 공유
- description: 처음으로 글을 공유했습니다.
+ name: 처음 공유해요
+ description: 처음으로 글을 공유했습니다
first_link:
- name: 첫 링크
- description: 글 작성시, 다른 토픽으로 가는 링크를 처음으로 추가하였습니다.
+ name: 처음 링크걸어요
+ description: 다른 토픽으로 가는 링크를 처음으로 추가했습니다
first_quote:
- name: 첫 인용
- description: 글 작성시 다른 사용자의 글을 인용하였습니다.
+ name: 처음 인용해요
+ description: 회원을 인용했습니다
read_guidelines:
name: 가이드라인 읽음
description: 커뮤니티 가이드라인 을 읽었습니다.
reader:
name: 독서가
- description: 100개가 넘는 댓글이 달린 토픽의 댓글을 모두 읽었습니다.
+ description: 100개가 넘는 댓글이 달린 토픽의 댓글을 모두 읽었습니다
popular_link:
name: 인기 링크
- description: 50회 이상 클릭이 발생한 외부 링크 게시
+ description: 게시한 외부링크가 50회 이상 클릭되었습니다
hot_link:
- name: HOT 링크
- description: 300회 이상 클릭이 발생한 외부 링크 게시
+ name: 핫 링크
+ description: 게시한 외부링크가 300회 이상 클릭되었습니다
famous_link:
- name: Famous 링크
- description: 1000회 이상 클릭이 발생한 외부 링크 게시
+ name: 완전유명 링크
+ description: 게시한 외부링크가 1000회 이상 클릭되었습니
google_search: |
Google 검색
diff --git a/config/locales/client.nb_NO.yml b/config/locales/client.nb_NO.yml
index 4a19e0c17e..64f5311e8a 100644
--- a/config/locales/client.nb_NO.yml
+++ b/config/locales/client.nb_NO.yml
@@ -645,8 +645,8 @@ nb_NO:
value_prop: "Når du registrerer deg husker vi hvor langt du har lest, så du starter på riktig sted neste gang du åpner en tråd. Du får også varsler, her og på e-post når det skjer ting i diskusjonene du vil følge. I tillegg kan du like innlegg :heartbeat:"
summary:
enabled_description: "Du ser for øyeblikket en oppsummering av dette emnet: de mest interessante innleggene i følge nettsamfunnet."
- description: "Det er {{count}} svar."
- description_time: "Det er {{count}} svar med en estimert lesetid på {{readingTime}} minutter."
+ description: "Det er {{replyCount}} svar."
+ description_time: "Det er {{replyCount}} svar med en estimert lesetid på {{readingTime}} minutter."
enable: 'Oppsummer dette emnet'
disable: 'Vis alle innlegg'
deleted_filter:
diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml
index daab5b8e4b..76d75644f3 100644
--- a/config/locales/client.nl.yml
+++ b/config/locales/client.nl.yml
@@ -100,6 +100,8 @@ nl:
x_years:
one: "1 jaar later"
other: "%{count} jaren later"
+ previous_month: 'Vorige Maand'
+ next_month: 'Volgende Maand'
share:
topic: 'deel een link naar deze topic'
post: 'bericht #%{postNumber}'
@@ -132,6 +134,19 @@ nl:
disabled: 'niet zichtbaar %{when}'
topic_admin_menu: "Adminacties voor topic"
emails_are_disabled: "Alle uitgaande e-mails zijn uitgeschakeld door een beheerder. Geen enkele vorm van e-mail notificatie wordt verstuurd."
+ s3:
+ regions:
+ us_east_1: "US Oost (N. Virginia)"
+ us_west_1: "US West (N. California)"
+ us_west_2: "US West (Oregon)"
+ us_gov_west_1: "AWS GovCloud (US)"
+ eu_west_1: "EU (Ierland)"
+ eu_central_1: "EU (Frankfurt)"
+ ap_southeast_1: "Azië Pacific (Singapore)"
+ ap_southeast_2: "Azië Pacific (Sydney)"
+ ap_northeast_1: "Azië Pacific (Tokyo)"
+ ap_northeast_2: "Azië Pacific (Seoul)"
+ sa_east_1: "Zuid Amerika (Sao Paulo)"
edit: 'bewerk de titel en categorie van deze topic'
not_implemented: "Die functie is helaas nog niet beschikbaar. Sorry!"
no_value: "Nee"
@@ -175,6 +190,7 @@ nl:
other: "{{count}} tekens"
suggested_topics:
title: "Aanbevolen topics"
+ pm_title: "Voorgestelde Berichten"
about:
simple_title: "Over"
title: "Over %{title}"
@@ -253,7 +269,7 @@ nl:
one: "Voor deze topic staat 1 bericht klaar om goedgekeurd te worden"
other: "Voor dit topic staan {{count}} berichten klaar om goedgekeurd te worden"
confirm: "Sla wijzigingen op"
- delete_prompt: "Weet je zeker dat je %{username} wilt verwijderen? Dit zal alle zijn berichten verwijderen en zal zijn email en ip-adres blokkeren."
+ delete_prompt: "Weet je zeker dat je %{username} wilt verwijderen? Dit verwijdert al hun post en blokkeert hun IP adres en E-mail adres."
approval:
title: "Bericht vereist goedkeuring"
description: "We hebben je nieuwe bericht ontvangen, maar deze moet eerst goedgekeurd worden door een moderator voordat deze zichtbaar wordt. Wees a.u.b. geduldig."
@@ -296,6 +312,12 @@ nl:
one: "1 lid"
other: "%{count} leden"
groups:
+ empty:
+ posts: "Er zijn geen posts van leden van deze groep."
+ members: "Er zijn geen leden in deze groep."
+ mentions: "Deze groep wordt niet benoemd."
+ messages: "Er zijn geen berichten voor deze groep."
+ topics: "Er is geen onderwerp door de leden van deze groep."
add: "Voeg toe"
selector_placeholder: "Voeg leden toe"
owner: "eigenaar"
@@ -306,6 +328,7 @@ nl:
members: "Leden"
posts: "Berichten"
alias_levels:
+ title: "Wie kan deze groep een bericht sturen en taggen?"
nobody: "Niemand"
only_admins: "Alleen admins"
mods_and_admins: "Alleen moderatoren and admins"
@@ -314,6 +337,19 @@ nl:
trust_levels:
title: "Trustlevel dat automatisch wordt toegekend aan nieuwe gebruikers:"
none: "Geen"
+ notifications:
+ watching:
+ title: "Kijken naar"
+ description: "Je krijgt een notificatie bij elke nieuwe post of bericht, en het aantal nieuwe reacties wordt weergeven."
+ tracking:
+ title: "Volgen"
+ description: "Je krijgt een notificatie wanneer iemand jouw @name noemt of reageert, en het aantal nieuwe reacties wordt weergeven."
+ regular:
+ title: "Normaal"
+ description: "Je krijgt een notificatie wanneer iemand jouw @name noemt of reageert."
+ muted:
+ title: "Gedempt"
+ description: "Je krijgt geen notificatie over nieuwe onderwerpen in deze groep."
user_action_groups:
'1': "Likes gegeven"
'2': "Likes ontvangen"
@@ -332,6 +368,7 @@ nl:
all_subcategories: "alle"
no_subcategory: "geen"
category: "Categorie"
+ category_list: "Geef categorieën lijst weer."
reorder:
title: "Categorieën herschikken "
title_long: "Reorganiseer de categorielijst"
@@ -388,15 +425,15 @@ nl:
invited_by: "Uitgenodigd door"
trust_level: "Trustlevel"
notifications: "Notificaties"
+ statistics: "Statistieken "
desktop_notifications:
label: "Desktopnotificaties"
not_supported: "Notificaties worden niet ondersteund door deze browser. Sorry."
perm_default: "Notificaties aanzetten"
perm_denied_btn: "Toestemming geweigerd"
+ perm_denied_expl: "Je blokkeert notificaties. Sta deze toe in je browser instellingen."
disable: "Notificaties uitschakelen"
- currently_enabled: "(momenteel ingeschakeld)"
enable: "Notificaties inschakelen"
- currently_disabled: "(momenteel uitgeschakeld)"
each_browser_note: "Let op: Je moet deze optie instellen voor elke browser die je gebruikt."
dismiss_notifications: "Markeer alles als gelezen"
dismiss_notifications_tooltip: "Markeer alle ongelezen berichten als gelezen"
@@ -431,6 +468,7 @@ nl:
muted_users: "Negeren"
muted_users_instructions: "Negeer alle meldingen van deze leden."
muted_topics_link: "Toon gedempte topics."
+ automatically_unpin_topics: "ontspelt onderwerp automatische wanneer de bodem is bereikt."
staff_counters:
flags_given: "behulpzame markeringen"
flagged_posts: "gemarkeerde berichten"
@@ -439,6 +477,15 @@ nl:
warnings_received: "waarschuwingen"
messages:
all: "Alle"
+ inbox: "Postvak In"
+ sent: "Verzend"
+ archive: "Archiveren"
+ groups: "Mijn Groepen"
+ bulk_select: "Selecteer berichten"
+ move_to_inbox: "Verplaats naar Postvak In"
+ move_to_archive: "Archiveren"
+ failed_to_move: "Het is niet gelukt om het geselecteerde bericht te verplaatsen (Waarschijnlijk is de internetconnectie verbroken)"
+ select_all: "Selecteer Alles"
change_password:
success: "(e-mail verzonden)"
in_progress: "(e-mail wordt verzonden)"
@@ -483,6 +530,10 @@ nl:
ok: "We sturen een e-mail ter bevestiging"
invalid: "Vul een geldig e-mailadres in "
authenticated: "Je e-mail is geauthenticeerd door {{provider}}"
+ frequency_immediately: "We zullen je onmiddellijk e-mailen als je hetgeen waarover we je e-mailen niet gelezen hebt."
+ frequency:
+ one: "We zullen je alleen maar e-mailen als we je de laatste {{count}} minuten niet gezien hebben."
+ other: "We zullen je alleen maar e-mailen als we je de laatste {{count}} minuten niet gezien hebben."
name:
title: "Naam"
instructions: "Je volledige naam (optioneel)"
@@ -518,12 +569,18 @@ nl:
title: "Badge van gebruikersprofiel"
website: "Website"
email_settings: "E-mail"
+ email_previous_replies:
+ title: "Voeg de vorige reacties bij onderaan de emails"
+ unless_emailed: "tenzij eerder verzonden"
+ always: "altijd"
+ never: "nooit"
email_digests:
title: "Stuur me een mail met de laatste updates wanneer ik de site niet bezoek:"
daily: "dagelijks"
every_three_days: "elke drie dagen"
weekly: "wekelijks"
every_two_weeks: "elke twee weken"
+ email_in_reply_to: "Voeg een deel van de reactie toe in de emails"
email_direct: "Stuur me een e-mail wanneer iemand me citeert, reageert op mijn bericht, mijn @gebruikersnaam noemt of uitnodigt voor een topic."
email_private_messages: "Ontvang een mail wanneer iemand je een bericht heeft gestuurd."
email_always: "Stuur me e-mail notificaties, zelfs als ik ben actief op de site"
@@ -591,6 +648,21 @@ nl:
same_as_email: "Je wachtwoord is hetzelfde als je e-mail."
ok: "Je wachtwoord ziet er goed uit."
instructions: "Minimaal %{count} tekens."
+ summary:
+ title: "Overzicht "
+ stats: "Statistieken "
+ topic_count: "Topics gemaakt"
+ post_count: "Bericht aangemaakt"
+ likes_given: "'Vind ik leuks' gegeven"
+ likes_received: "'Vind ik leuks' ontvangen"
+ days_visited: "Dagen bezocht"
+ posts_read_count: "Berichten gelezen"
+ top_replies: "Beste Reacties"
+ top_topics: "Top Topics"
+ top_badges: "Top Badges"
+ more_topics: "Meer Topics"
+ more_replies: "Meer Antwoorden"
+ more_badges: "Meer Badges"
associated_accounts: "Logins"
ip_address:
title: "Laatste IP-adres"
@@ -633,6 +705,7 @@ nl:
logout: "Je bent uitgelogd."
refresh: "Ververs"
read_only_mode:
+ enabled: "De site is in alleen lezen modus. Interactie is niet mogelijk."
login_disabled: "Zolang de site in read-only modus is, kan er niet ingelogd worden."
too_few_topics_and_posts_notice: "Laten we de discussie starten! Er zijn al %{currentTopics} / %{requiredTopics} topics en %{currentPosts} / %{requiredPosts} berichten. Nieuwe bezoekers hebben conversaties nodig om te lezen en reageren."
too_few_topics_notice: "Laten we de discussie starten! Er zijn al %{currentTopics} / %{requiredTopics} topics en %{currentPosts} / %{requiredPosts} berichten. Nieuwe bezoekers hebben conversaties nodig om te lezen en reageren."
@@ -662,8 +735,8 @@ nl:
value_prop: "Wanneer je een account aangemaakt hebt, herinneren deze wat je gelezen hebt, zodat je direct door kan lezen vanaf waar je gestopt bent. Je krijgt ook notificaties, hier en via email, wanneer nieuwe posts gemaakt zijn. En je kan ook nog posts liken :heartbeat:"
summary:
enabled_description: "Je leest een samenvatting van dit topic: alleen de meeste interessante berichten zoals bepaald door de community. "
- description: "Er zijn {{count}} reacties."
- description_time: "Er zijn {{count}} reacties met een gemiddelde leestijd van {{readingTime}} minuten."
+ description: "Er zijn {{replyCount}} reacties."
+ description_time: "Er zijn {{replyCount}} reacties met een geschatte leestijd van{{readingTime}} minuten."
enable: 'Samenvatting Topic'
disable: 'Alle berichten'
deleted_filter:
@@ -747,6 +820,7 @@ nl:
ctrl: 'Ctrl'
alt: 'Alt'
composer:
+ emoji: "Emoji :)"
more_emoji: "meer..."
options: "Opties"
whisper: "Fluister"
@@ -758,6 +832,7 @@ nl:
saved_local_draft_tip: "lokaal opgeslagen"
similar_topics: "Jouw topic lijkt op..."
drafts_offline: "concepten offline"
+ group_mentioned: "Door het gebruik van {{group}}, sta je op het punt {{count}} op de hoogte te brengen."
error:
title_missing: "Titel is verplicht"
title_too_short: "Titel moet uit minstens {{min}} tekens bestaan"
@@ -812,6 +887,7 @@ nl:
toggler: "verberg of toon de editor"
modal_ok: "OK"
modal_cancel: "Annuleer"
+ cant_send_pm: "Sorry, je kan geen berichten sturen naar %{username}."
admin_options_title: "Optionele stafinstellingen voor deze topic"
auto_close:
label: "Tijd waarna topic automatisch wordt gesloten:"
@@ -828,6 +904,7 @@ nl:
more: "bekijk oudere notificaties"
total_flagged: "aantal gemarkeerde berichten"
mentioned: "
{{username}} {{description}}
"
+ group_mentioned: "
{{username}} {{description}}
"
quoted: "
{{username}} {{description}}
"
replied: "
{{username}} {{description}}
"
posted: "
{{username}} {{description}}
"
@@ -840,6 +917,9 @@ nl:
moved_post: "
{{username}} verplaatste {{description}}
"
linked: "
{{username}} {{description}}
"
granted_badge: "
'{{description}}' ontvangen
"
+ group_message_summary:
+ one: "
{{count}} berichten in jouw {{group_name}} inbox
"
+ other: "
{{count}} berichten in jouw {{group_name}} inbox
"
alt:
mentioned: "Genoemd door"
quoted: "Gequoot door"
@@ -854,8 +934,10 @@ nl:
moved_post: "Je bericht is verplaatst door"
linked: "Link naar je bericht"
granted_badge: "Badge toegekend"
+ group_message_summary: "Berichten in groep Postvak In"
popup:
mentioned: '{{username}} heeft je genoemd in "{{topic}}" - {{site_title}}'
+ group_mentioned: '{{username}} noemde jouw naam in "{{topic}}" - {{site_title}}'
quoted: '{{username}} heeft je geciteerd in "{{topic}}" - {{site_title}}'
replied: '{{username}} heeft je beantwoord in "{{topic}}" - {{site_title}}'
posted: '{{username}} heeft een bericht geplaats in "{{topic}}" - {{site_title}}'
@@ -911,6 +993,7 @@ nl:
dismiss_read: "Alle ongelezen afwijzen"
dismiss_button: "Afwijzen..."
dismiss_tooltip: "Alleen nieuwe posts afwijzen of stop het volgen van topics"
+ also_dismiss_topics: "Stop het volgen van deze topics, zodat deze nooit meer als ongelezen worden weergegeven. "
dismiss_new: "markeer nieuwe berichten als gelezen"
toggle: "toggle bulkselectie van topics"
actions: "Bulk Acties"
@@ -934,8 +1017,8 @@ nl:
top: "Er zijn geen top-topics."
search: "Er zijn geen zoekresultaten gevonden."
educate:
- new: '
Je nieuwe topics verschijnen hier.
Standaard worden topics als nieuw beschouwd en tonen een nieuw indicator als ze gemaakt zijn in de afgelopen 2 dagen.
'
bottom:
latest: "Er zijn geen recente topics."
hot: "Er zijn geen polulaire topics meer."
@@ -955,6 +1038,12 @@ nl:
create: 'Nieuw topic'
create_long: 'Maak een nieuw topic'
private_message: 'Stuur een bericht'
+ archive_message:
+ help: 'Verplaats berichten naar jouw archief '
+ title: 'Archiveren '
+ move_to_inbox:
+ title: 'Verplaats naar Postvak In'
+ help: 'Verplaats het bericht terug naar Postvak in'
list: 'Topics'
new: 'nieuw topic'
unread: 'ongelezen'
@@ -1005,6 +1094,7 @@ nl:
auto_close_title: 'Instellingen voor automatisch sluiten'
auto_close_save: "Opslaan"
auto_close_remove: "Sluit deze topic niet automatisch"
+ auto_close_immediate: "De laatste post in dit topic is al %{hours} uur oud, dus dit topic wordt meteen gesloten."
progress:
title: voortgang van topic
go_top: "bovenaan"
@@ -1096,14 +1186,24 @@ nl:
unpin_until: "Zet deze topic niet langer bovenaan in de {{categoryLink}} categorie of wacht tot %{until}."
pin_note: "Gebruikers kunnen het vastpinnen voor dit topic voor zichzelf ongedaan maken."
pin_validation: "Een datum is vereist om deze topic vast te pinnen."
+ not_pinned: "Er zijn geen topics vastgepind in {{categoryLink}}."
+ already_pinned:
+ one: "Topics welke vastgepind zijn in {{categoryLink}}: {{count}}"
+ other: "Topics welke vastgepind zijn in {{categoryLink}}: {{count}}."
pin_globally: "Zet deze topic bovenaan in alle topic lijsten tot"
confirm_pin_globally: "Je hebt al {{count}} globaal vastgepinde topics. Teveel vastgepinde topics kunnen storend zijn voor nieuwe en anonieme gebruikers. Weet je zeker dat je nog een topic globaal wilt vastpinnen?"
unpin_globally: "Zorg ervoor dat dit topic niet langer bovenaan alle topic lijsten komt."
unpin_globally_until: "Zet deze topic niet langer bovenaan in alle topic lijsten of wacht tot %{until}."
global_pin_note: "Gebruikers kunnen dit topic voor zichzelf ontpinnen."
+ not_pinned_globally: "Er zijn geen globaal vastgepinde topics."
+ already_pinned_globally:
+ one: "Topics welke globaal vastgepind zijn: {{count}}"
+ other: "Topics welke globaal vastgepind zijn: {{count}}."
make_banner: "Zorg ervoor dat dit topic een banner wordt welke bovenaan alle pagina's komt."
remove_banner: "Verwijder de banner die bovenaan alle pagina's staat."
banner_note: "Gebruikers kunnen de banner negeren door deze te sluiten. Er kan maar een topic gebannered zijn."
+ no_banner_exists: "Er is geen banner topic."
+ banner_exists: "Er is op het ogenblik een banner topic."
inviting: "Uitnodigen..."
automatically_add_to_groups_optional: "Deze uitnodiging geeft ook toegang tot de volgende groepen: (optioneel, alleen voor beheerders)"
automatically_add_to_groups_required: "Deze uitnodiging geeft ook toegang tot de volgende groepen: (Verplicht, alleen voor beheerders)"
@@ -1115,6 +1215,7 @@ nl:
success: "Deze gebruiker is uitgenodigd om in de conversatie deel te nemen."
error: "Sorry, er is iets misgegaan bij het uitnodigen van deze persoon"
group_name: "groepsnaam"
+ controls: "Topic Controls"
invite_reply:
title: 'Uitnodigen'
username_placeholder: "gebruikersnaam"
@@ -1209,6 +1310,10 @@ nl:
has_likes_title:
one: "iemand vind dit bericht leuk"
other: "{{count}} mensen vinden dit bericht leuk"
+ has_likes_title_only_you: "Je vind dit bericht leuk"
+ has_likes_title_you:
+ one: "jij en 1 anderen vinden dit leuk"
+ other: "jij en {{count}} anderen vinden dit leuk"
errors:
create: "Sorry, er is iets misgegaan bij het plaatsen van je bericht. Probeer het nog eens."
edit: "Sorry, er is iets misgegaan bij het bewerken van je bericht. Probeer het nog eens."
@@ -1227,6 +1332,8 @@ nl:
yes_value: "Ja, verwijderen"
via_email: "dit bericht kwam binnen via e-mail"
whisper: "deze posts zijn alleen toegankelijk voor moderators"
+ wiki:
+ about: "dit bericht is een wiki"
archetypes:
save: 'Bewaar instellingen'
controls:
@@ -1276,17 +1383,14 @@ nl:
like: "Vind het niet meer leuk"
vote: "Stem niet meer"
people:
- off_topic: "{{icons}} markeerden dit als off-topic"
- spam: "{{icons}} markeerden dit als spam"
- spam_with_url: "{{icons}} markeerde dit als spam"
- inappropriate: "{{icons}} markeerden dit als ongepast"
- notify_moderators: "{{icons}} lichtte moderators in"
- notify_moderators_with_url: "{{icons}} lichtte moderators in"
- notify_user: "{{icons}} verstuurde een bericht"
- notify_user_with_url: "{{icons}} verstuurde een bericht"
- bookmark: "{{icons}} voegden dit toe aan hun bladwijzers"
- like: "{{icons}} vinden dit leuk"
- vote: "{{icons}} hebben hier op gestemd"
+ off_topic: "heeft dit als off-topic gemeld"
+ spam: "markeerde dit als spam"
+ inappropriate: "markeerde dit als ongepast"
+ notify_moderators: "lichtte moderators in"
+ notify_user: "Stuur een bericht"
+ bookmark: "bladwijzer deze"
+ like: "Vind dit leuk"
+ vote: "stemde voor dit"
by_you:
off_topic: "Jij markeerde dit als off-topic"
spam: "Jij markeerde dit als spam"
@@ -1450,6 +1554,7 @@ nl:
submit_tooltip: "Verstuur de privé markering"
take_action_tooltip: "Bereik de vlag drempel direct, in plaats van het wachten op meer gemeenschapsvlaggen"
cant: "Sorry, je kan dit bericht momenteel niet melden."
+ notify_staff: 'Licht de staf in'
formatted_name:
off_topic: "Het is off topic"
inappropriate: "Het is ongepast"
@@ -1531,6 +1636,10 @@ nl:
with_topics: "%{filter} topics"
with_category: "%{filter} %{category} topics"
latest:
+ title: "Laatste"
+ title_with_count:
+ one: "Laatste (1)"
+ other: "Laatste ({{count}})"
help: "topics met recente reacties"
hot:
title: "Populair"
@@ -1546,9 +1655,23 @@ nl:
title_in: "Categorie - {{categoryName}}"
help: "alle topics gesorteerd op categorie"
unread:
+ title: "Ongelezen"
+ title_with_count:
+ one: "Ongelezen (1)"
+ other: "Ongelezen ({{count}})"
help: "topics die je volgt of bijhoudt met ongelezen berichten"
+ lower_title_with_count:
+ one: "1 ongelezen"
+ other: "{{count}} ongelezen"
new:
+ lower_title_with_count:
+ one: "1 nieuw"
+ other: "{{count}} nieuw"
lower_title: "nieuw"
+ title: "Nieuw"
+ title_with_count:
+ one: "Nieuw (1)"
+ other: "({{count}}) Nieuwe"
help: "topics gemaakt in de afgelopen dagen"
posted:
title: "Mijn berichten"
@@ -1557,6 +1680,10 @@ nl:
title: "Bladwijzers"
help: "topics waar je een bladwijzer aan toe hebt gevoegd"
category:
+ title: "{{categoryName}}"
+ title_with_count:
+ one: "{{categoryName}} (1)"
+ other: "{{categoryName}} ({{count}})"
help: "recente topics in de categorie {{categoryName}}"
top:
title: "Top"
@@ -1636,6 +1763,7 @@ nl:
refresh_report: "Ververs Rapport"
start_date: "Start datum"
end_date: "Eind datum"
+ groups: "Alle groepen"
commits:
latest_changes: "Laatste wijzigingen: update regelmatig!"
by: "door"
@@ -1732,6 +1860,8 @@ nl:
primary_group: "Automatisch ingesteld als primaire groep"
group_owners: Eigenaren
add_owners: Eigenaren toevoegen
+ incoming_email: "Aangepaste inkomende email adressen "
+ incoming_email_placeholder: "Voer je email adres in"
api:
generate_master: "Genereer Master API Key"
none: "Er zijn geen actieve API keys"
@@ -1805,11 +1935,11 @@ nl:
is_disabled: "Herstellen is uitgeschakeld in de instellingen."
label: "Herstel"
title: "Herstel van deze backup"
- confirm: "Weet je zeker dat je van deze backup wil herstellen?"
+ confirm: "Weet je zeker dat je deze backup wilt terugzetten? "
rollback:
label: "Herstel"
title: "Herstel de database naar de laatst werkende versie"
- confirm: "Weet je zeker dat je de database wil herstellen naar de laatste versie?"
+ confirm: "Weet je zeker dat je de database wilt terugzetten naar de vorige staat?"
export_csv:
user_archive_confirm: "Weet je zeker dat je al je berichten wil downloaden?"
success: "Exporteren is gestart, je zult gewaarschuwd worden als het proces is beeindigd."
@@ -1860,6 +1990,14 @@ nl:
color: "Kleur"
opacity: "Doorzichtigheid"
copy: "Kopieër"
+ email_templates:
+ title: "Email Sjabloon "
+ subject: "Onderwerp"
+ multiple_subjects: "Dit email sjabloon heeft meerdere onderwerpen."
+ body: "Body"
+ none_selected: "Kies een email sjabloon om te beginnen met bewerken."
+ revert: "Maak wijzigingen ongedaan"
+ revert_confirm: "Weet je zeker dat je de veranderingen ongedaan wilt maken?"
css_html:
title: "CSS/HTML"
long_title: "CSS en HTML aanpassingen"
@@ -1904,17 +2042,18 @@ nl:
love:
name: 'liefde'
description: "De like knop kleur."
- wiki:
- name: 'wiki'
- description: "Basiskleur die gebruikt wordt voor de achtergrond van wiki berichten."
email:
+ title: "E-mails"
settings: "Instellingen"
+ templates: "Sjablonen "
preview_digest: "Voorbeeld digestmail"
sending_test: "Testmail wordt verstuurd..."
error: "FOUT - %{server_error}"
test_error: "Er ging iets mis bij het versturen van de testmail. Kijk nog eens naar je mailinstellinen, controleer of je host mailconnecties niet blokkeert. Probeer daarna opnieuw."
sent: "Verzonden"
skipped: "Overgeslagen"
+ received: "Ontvangen"
+ rejected: "Geweigerd "
sent_at: "Verzonden op"
time: "Tijd"
user: "Gebruiker"
@@ -1932,6 +2071,32 @@ nl:
last_seen_user: "Laatste online:"
reply_key: "Reply key"
skipped_reason: "Reden van overslaan"
+ incoming_emails:
+ from_address: "Van"
+ to_addresses: "Naar"
+ cc_addresses: "Cc"
+ subject: "Onderwerp"
+ error: "Error"
+ none: "Geen inkomende emails gevonden."
+ modal:
+ title: "Inkomende Email Details"
+ error: "Error"
+ return_path: "Teruggaan-Pad"
+ message_id: "Bericht-Id"
+ in_reply_to: "In-Reactie-Op"
+ references: "Referenties "
+ date: "Datum"
+ from: "Van"
+ to: "Naar"
+ cc: "Cc"
+ subject: "Onderwerp"
+ body: "Body"
+ filters:
+ from_placeholder: "from@example.com"
+ to_placeholder: "to@example.com"
+ cc_placeholder: "cc@example.com"
+ subject_placeholder: "Onderwerp.."
+ error_placeholder: "Error"
logs:
none: "Geen logs gevonden."
filters:
@@ -1981,6 +2146,7 @@ nl:
change_site_setting: "verander instellingen"
change_site_customization: "verander site aanpassingen"
delete_site_customization: "verwijder site aanpassingen"
+ change_site_text: "Verander site tekst"
suspend_user: "schors gebruiker"
unsuspend_user: "hef schorsing op"
grant_badge: "ken badge toe"
@@ -1994,6 +2160,13 @@ nl:
change_category_settings: "verander categorie instellingen"
delete_category: "categorie verwijderen"
create_category: "categorie creeren"
+ block_user: "blokkeer gebruiker"
+ unblock_user: "deblokkeer gebruiker"
+ grant_admin: "Ken Beheerdersrechten toe"
+ revoke_admin: "Ontneem beheerdersrechten"
+ grant_moderation: "Geef modereerrechten"
+ revoke_moderation: "Ontneem modereerrechten"
+ backup_operation: "backup handeling"
screened_emails:
title: "Gescreende e-mails"
description: "Nieuwe accounts met een van deze mailadressen worden geblokkeerd of een andere actie wordt ondernomen."
@@ -2060,6 +2233,9 @@ nl:
pending: 'Nog niet geaccepteerde leden'
newuser: 'Leden met Trust Level 0 (Nieuw lid)'
basic: 'Leden met Trust Level 1 (Lid)'
+ member: 'Leden op Trust Level 2 (Lid)'
+ regular: 'Leden op Trust Level 3 (Vaste bezoeker)'
+ leader: 'Leden op Trust Level 4 (Leider)'
staff: "Stafleden"
admins: 'Administrators'
moderators: 'Moderators'
@@ -2092,6 +2268,7 @@ nl:
moderator: "Moderator?"
admin: "Beheerder?"
blocked: "Geblokkeerd?"
+ staged: "Opvoeren?"
show_admin_profile: "Beheerder"
edit_title: "Wijzig titel"
save_title: "Bewaar titel"
@@ -2156,9 +2333,12 @@ nl:
deactivate_failed: "Er ging iets mis bij het deactiveren van deze gebruiker."
unblock_failed: 'Er ging iets mis bij het deblokkeren van deze gebruiker.'
block_failed: 'Er ging iets mis bij het blokkeren van deze gebruiker.'
+ block_confirm: 'Weet je zeker dat je deze gebruikt wilt blokkeren? Deze gebruikers is dan niet meer in staat om nieuwe topics of berichten te plaatsen.'
+ block_accept: 'Ja, blokkeer deze gebruiker'
deactivate_explanation: "Een gedeactiveerde gebruiker moet zijn e-mailadres opnieuw bevestigen."
suspended_explanation: "Een geschorste gebruiker kan niet meer inloggen."
block_explanation: "Een geblokkeerde gebruiker kan geen topics maken of reageren op topics."
+ stage_explanation: "Een opgevoerde gebruiker kan alleen via email in bepaalde topics berichten."
trust_level_change_failed: "Er ging iets mis bij het wijzigen van het trust level van deze gebruiker."
suspend_modal_title: "Schors gebruiker"
trust_level_2_users: "Trust Level 2 leden"
@@ -2169,6 +2349,7 @@ nl:
unlock_trust_level: "Deblokkeer Trust Level"
tl3_requirements:
title: "Vereisten voor Trust Level 3"
+ table_title: "In de laatste %{time_period} dagen:"
value_heading: "Waarde"
requirement_heading: "Vereiste"
visits: "Bezoeken"
@@ -2229,7 +2410,15 @@ nl:
confirm: 'Bevestiging'
dropdown: "Uitklapbaar"
site_text:
+ description: "Je kunt alle tekst of jouw forum aanpassen. Begin met zoeken hieronder:"
+ search: "Zoek voor tekst die je graag wilt bewerken."
title: 'Tekst Inhoud'
+ edit: 'bewerk'
+ revert: "Maak wijzigingen ongedaan"
+ revert_confirm: "Weet je zeker dat je de veranderingen ongedaan wilt maken?"
+ go_back: "Terug naar zoeken"
+ recommended: "We bevelen je aan die tekst aan te passen naar je eigen ingeving. "
+ show_overriden: 'Bekijk alleen bewerkte instellingen'
site_settings:
show_overriden: 'Bekijk alleen bewerkte instellingen'
title: 'Instellingen'
@@ -2317,6 +2506,10 @@ nl:
bad_count_warning:
header: "LET OP!"
text: "Er zijn vermiste toekennings-voorbeelden. Dit gebeurt als de badge query gebruikers- of bericht-ID's retourneert die niet bestaan. Dit kan onverwachte resultaten veroorzaken op een later tijdstip - kijk a.u.b. uw query goed na."
+ no_grant_count: "Geen badges om toe te wijzen."
+ grant_count:
+ one: "1 badge toe te wijzen."
+ other: "%{count} badges toe te wijzen."
sample: "Voorbeeld:"
grant:
with: %{username}
@@ -2424,6 +2617,10 @@ nl:
mark_tracking: 'm, t Markeer topic als volgen'
mark_watching: 'm, w Markeer topic als in de gaten houden'
badges:
+ earned_n_times:
+ one: "Verdiende deze badge 1 keer"
+ other: "Verdiende deze badge %{count} keer"
+ more_with_badge: "Andere met deze badge"
title: Badges
allow_title: "kan als titel gebruikt worden"
multiple_grant: "kan meerdere keren toegekend worden"
diff --git a/config/locales/client.pl_PL.yml b/config/locales/client.pl_PL.yml
index 2d9005ccb5..cd19d4c817 100644
--- a/config/locales/client.pl_PL.yml
+++ b/config/locales/client.pl_PL.yml
@@ -700,8 +700,8 @@ pl_PL:
value_prop: "Jeśli stworzysz konto, zapamiętamy przeczytane przez Ciebie wpisy i tematy, dzięki czemu zawsze powrócisz do odpowiedniego miejsca. Otrzymasz też powiadomienia o nowych wpisach. Dodatkowo możliwe będzie polubienie ciekawych wpisów :heartbeat:"
summary:
enabled_description: "Przeglądasz podsumowanie tego tematu: widoczne są jedynie najbardziej wartościowe wpisy zdaniem uczestników. "
- description: "Istnieją {{count}} odpowiedzi."
- description_time: "Istnieją {{count}} odpowiedzi z czasem czytania oszacowanym na {{readingTime}} minut."
+ description: "Istnieją {{replyCount}} odpowiedzi."
+ description_time: "Istnieją {{replyCount}} odpowiedzi z czasem czytania oszacowanym na {{readingTime}} minut."
enable: 'Podsumuj ten temat'
disable: 'Pokaż wszystkie wpisy'
deleted_filter:
diff --git a/config/locales/client.pt.yml b/config/locales/client.pt.yml
index a555464c5e..ebd3179847 100644
--- a/config/locales/client.pt.yml
+++ b/config/locales/client.pt.yml
@@ -100,6 +100,8 @@ pt:
x_years:
one: "1 ano mais tarde"
other: "%{count} anos mais tarde"
+ previous_month: 'Mês Anterior'
+ next_month: 'Mês Seguinte'
share:
topic: 'partilhar uma hiperligação para este tópico'
post: 'Mensagem #%{postNumber}'
@@ -110,6 +112,8 @@ pt:
email: 'enviar esta hiperligação por email'
action_codes:
split_topic: "dividir este tópico %{when}"
+ invited_user: "Convidou %{who} %{when}"
+ removed_user: "Removeu %{who} %{when}"
autoclosed:
enabled: 'fechado %{when}'
disabled: 'aberto %{when}'
@@ -130,6 +134,19 @@ pt:
disabled: 'removido da lista %{when}'
topic_admin_menu: "Ações administrativas dos Tópicos"
emails_are_disabled: "Todos os envios de e-mail foram globalmente desativados por um administrador. Nenhum e-mail de notificação será enviado."
+ s3:
+ regions:
+ us_east_1: "Este dos E.U.A. (Virgínia do Norte)"
+ us_west_1: "Oeste dos E.U.A. (California do Norte)"
+ us_west_2: "Oeste dos E.U.A. (Óregon)"
+ us_gov_west_1: "AWS GovCloud (E.U.A.)"
+ eu_west_1: "U.E. (Irlanda)"
+ eu_central_1: "U.E. (Francoforte)"
+ ap_southeast_1: "Ásia-Pacífico (Singapura)"
+ ap_southeast_2: "Ásia-Pacífico (Sydney)"
+ ap_northeast_1: "Ásia-Pacífico (Tóquio)"
+ ap_northeast_2: "Ásia-Pacífico (Seoul)"
+ sa_east_1: "América do Sul (São Paulo)"
edit: 'editar o título e a categoria deste tópico'
not_implemented: "Essa funcionalidade ainda não foi implementada, pedimos desculpa!"
no_value: "Não"
@@ -173,6 +190,7 @@ pt:
other: "{{count}} caracteres"
suggested_topics:
title: "Tópicos Sugeridos"
+ pm_title: "Mensagens Sugeridas"
about:
simple_title: "Acerca"
title: "Acerca de %{title}"
@@ -413,6 +431,7 @@ pt:
not_supported: "Não são suportadas notificações neste navegador. Desculpe."
perm_default: "Ligar Notificações"
perm_denied_btn: "Permissão Negada"
+ perm_denied_expl: "Negou a permissão para as notificações. Autorize as notificações através das configurações do seu navegador."
disable: "Desativar Notificações"
currently_enabled: "(atualmente ativo)"
enable: "Ativar Notificações"
@@ -466,6 +485,7 @@ pt:
groups: "Os Meus Grupos"
bulk_select: "Selecionar mensagens"
move_to_inbox: "Mover para Caixa de Entrada"
+ move_to_archive: "Arquivo"
failed_to_move: "Falha ao mover as mensagens selecionadas (talvez a sua rede esteja em baixo)"
select_all: "Selecionar Tudo"
change_password:
@@ -624,6 +644,21 @@ pt:
same_as_email: "A sua palavra-passe é a mesma que o seu email."
ok: "A sua palavra-passe parece correta."
instructions: "Pelo menos %{count} caracteres."
+ summary:
+ title: "Sumário"
+ stats: "Estatísticas"
+ topic_count: "Tópicos Criados"
+ post_count: "Mensagens Criadas"
+ likes_given: "Gostos Dados"
+ likes_received: "Gostos Recebidos"
+ days_visited: "Dias Visitados"
+ posts_read_count: "Mensagens Lidas"
+ top_replies: "Respostas"
+ top_topics: "Melhores Tópicos"
+ top_badges: "Melhores Distintivos"
+ more_topics: "Mais Tópicos"
+ more_replies: "Mais Respostas"
+ more_badges: "Mais Distintivos"
associated_accounts: "Contas associadas"
ip_address:
title: "Último endereço IP"
@@ -666,6 +701,7 @@ pt:
logout: "A sua sessão estava encerrada."
refresh: "Atualizar"
read_only_mode:
+ enabled: "Este sítio encontra-se no modo só de leitura. Por favor continue a navegar mas responder, dar gostos e outras acções estão de momento desativadas."
login_disabled: "A função de início de sessão está desativada enquanto o sítio se encontrar no modo só de leitura."
too_few_topics_and_posts_notice: "Vamos começar esta discussão! Atualmente existem %{currentTopics} / %{requiredTopics} tópicos e %{currentPosts} / %{requiredPosts} mensagens. Novos visitantes precisam de conversações para ler e responder a."
too_few_topics_notice: "Vamos começar esta discussão! Atualmente existem %{currentTopics} / %{requiredTopics} tópios. Novos visitantes precisam de algumas conversações para ler e responder a."
@@ -695,8 +731,8 @@ pt:
value_prop: "Quando cria uma conta, nós lembramo-nos exatamente do que leu, por isso volta sempre ao sítio onde ficou. Também recebe notificações, aqui ou por email, sempre que novas mensagens são feitas. E pode gostar de mensagens para partilhar o amor. :heartbeat:"
summary:
enabled_description: "Está a ver um resumo deste tópico: as mensagens mais interessantes são determinados pela comunidade."
- description: "Existem {{count}} respostas."
- description_time: "Existem {{count}} respostas com um tempo de leitura estimado de {{readingTime}} minutos."
+ description: "Existem {{replyCount}} respostas."
+ description_time: "Existem {{replyCount}} respostas com um tempo de leitura estimado de {{readingTime}} minutos."
enable: 'Resumir Este Tópico'
disable: 'Mostrar Todas As Mensagens'
deleted_filter:
@@ -780,6 +816,7 @@ pt:
ctrl: 'Ctrl'
alt: 'Alt'
composer:
+ emoji: "Emoji :)"
more_emoji: "mais..."
options: "Opções"
whisper: "susurro"
@@ -876,6 +913,9 @@ pt:
moved_post: "
{{username}} moveu {{description}}
"
linked: "
{{username}} {{description}}
"
granted_badge: "
Ganhou '{{description}}'
"
+ group_message_summary:
+ one: "
{{count}} mensagem na caixa de entrada do seu grupo {{group_name}}
"
+ other: "
{{count}} mensagens na caixa de entrada do seu grupo {{group_name}}
"
alt:
mentioned: "Mencionado por"
quoted: "Citado por"
@@ -890,6 +930,7 @@ pt:
moved_post: "A sua mensagem foi movida por"
linked: "Hiperligação para a sua mensagem"
granted_badge: "Distintivo concedido"
+ group_message_summary: "Mensagens na caixa de entrada do seu grupo"
popup:
mentioned: '{{username}} mencionou-o em "{{topic}}" - {{site_title}}'
group_mentioned: '{{username}} mencionou-o em "{{topic}}" - {{site_title}}'
@@ -1721,6 +1762,7 @@ pt:
refresh_report: "Atualizar relatório"
start_date: "Data de Início"
end_date: "Data final"
+ groups: "Todos os grupos"
commits:
latest_changes: "Últimas alterações: atualize com frequência!"
by: "por"
@@ -2003,13 +2045,17 @@ pt:
name: 'wiki'
description: "Cor base utilizada para o fundo de mensagens wiki"
email:
+ title: "Emails"
settings: "Configurações"
+ templates: "Templates"
preview_digest: "Pré-visualizar Resumo"
sending_test: "A enviar Email de teste..."
error: "ERRO - %{server_error}"
test_error: "Occorreu um problema no envio do email de teste. Por favor verifique novamente as suas definições de email, verifique se o seu host não está a bloquear conexões de email, e tente novamente."
sent: "Enviado"
skipped: "Ignorado"
+ received: "Recebido"
+ rejected: "Rejeitado"
sent_at: "Enviado em"
time: "Tempo"
user: "Utilizador"
@@ -2027,6 +2073,19 @@ pt:
last_seen_user: "Último Utilizador Visto:"
reply_key: "Chave de Resposta"
skipped_reason: "Ignorar Motivo"
+ incoming_emails:
+ from_address: "De"
+ to_addresses: "Para"
+ cc_addresses: "Cc"
+ subject: "Assunto"
+ error: "Erro"
+ none: "Nenhum email de entrada encontrado."
+ filters:
+ from_placeholder: "de@exemplo.com"
+ to_placeholder: "para@exemplo.com"
+ cc_placeholder: "cc@exemplo.com"
+ subject_placeholder: "Assunto..."
+ error_placeholder: "Erro"
logs:
none: "Nenhuns logs encontrados."
filters:
@@ -2090,6 +2149,12 @@ pt:
change_category_settings: "alterar configurações de categoria"
delete_category: "eliminar categoria"
create_category: "criar categoria"
+ block_user: "utilizador bloqueado"
+ unblock_user: "Desbloquear utilizador"
+ grant_admin: "conceder administração"
+ revoke_admin: "revogar administração"
+ grant_moderation: "conceder moderação"
+ revoke_moderation: "revogar moderação"
screened_emails:
title: "Emails Filtrados"
description: "Quando alguém tenta criar uma nova conta, os seguintes endereços de email serão verificados e o registo será bloqueado, ou outra ação será executada."
@@ -2191,6 +2256,7 @@ pt:
moderator: "Moderador?"
admin: "Administração?"
blocked: "Bloqueado?"
+ staged: "Temporário?"
show_admin_profile: "Administração"
edit_title: "Editar Título"
save_title: "Guardar Título"
@@ -2255,9 +2321,12 @@ pt:
deactivate_failed: "Ocorreu um problema ao desativar o utilizador."
unblock_failed: 'Ocorreu um problema ao desbloquear o utilizador.'
block_failed: 'Ocorreu um problema ao bloquear o utilizador.'
+ block_confirm: 'Tem a certeza que pretende bloquear este utilizador? Este não será capaz de criar novos tópicos ou mensagens.'
+ block_accept: 'Sim, bloquear este utilizador'
deactivate_explanation: "Um utilizador desativado deve revalidar o seu email."
suspended_explanation: "Um utilizador suspenso não pode iniciar sessão."
block_explanation: "Um utilizador bloqueado não pode publicar mensagens ou iniciar tópicos."
+ stage_explanation: "Um utilizador em estado temporário pode apenas publicar por email em tópicos específicos."
trust_level_change_failed: "Ocorreu um problema ao alterar o Nível de Confiança do utilizador."
suspend_modal_title: "Utilizador Suspenso"
trust_level_2_users: "Utilizadores no Nível de Confiança 2"
@@ -2536,6 +2605,10 @@ pt:
mark_tracking: 'm, t Acompanhar tópico'
mark_watching: 'm, w Vigiar este tópico'
badges:
+ earned_n_times:
+ one: "Ganhou este distintivo 1 vez"
+ other: "Ganhou este distintivo %{count} vezes"
+ more_with_badge: "Outros com este distintivo"
title: Distintivos
allow_title: "pode ser usado como título"
multiple_grant: "pode ser premiado múltiplas vezes"
diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml
index 84dbeab8a2..3bb279e16f 100644
--- a/config/locales/client.pt_BR.yml
+++ b/config/locales/client.pt_BR.yml
@@ -688,8 +688,8 @@ pt_BR:
value_prop: "Quando você cria uma conta, nós lembramos exatamente o que você leu, assim você sempre volta exatamente aonde estava. Você também recebe notificações, aqui e por e-mail, quando novas mensagens são feitas. E você pode curtir tópicos para compartilhar o amor. :heartbeat:"
summary:
enabled_description: "Você está vendo um sumário deste tópico: os posts mais interessantes conforme determinados pela comunidade."
- description: "Há {{count}} respostas."
- description_time: "Há {{count}} respostas com um tempo de leitura estimado de {{readingTime}} minutos."
+ description: "Há {{replyCount}} respostas."
+ description_time: "Há {{replyCount}} respostas com um tempo de leitura estimado de {{readingTime}} minutos."
enable: 'Resumir Este Tópico'
disable: 'Exibir Todas as Mensagens'
deleted_filter:
diff --git a/config/locales/client.ro.yml b/config/locales/client.ro.yml
index d0ddfd41d7..aadd4603e9 100644
--- a/config/locales/client.ro.yml
+++ b/config/locales/client.ro.yml
@@ -173,7 +173,7 @@ ro:
sign_up: "Înregistrare"
log_in: "Autentificare"
age: "Vârsta"
- joined: "Adăugat"
+ joined: "Înregistrat"
admin_title: "Admin"
flags_title: "Semnalare"
show_more: "Detaliază"
@@ -661,7 +661,7 @@ ro:
network_fixed: "Se pare ca și-a revenit."
server: "Ceva nu a funcționat."
forbidden: "Nu sunteţi autorizat să vedeţi aceasta."
- not_found: "Oops, aplicatia incearca sa incarce un URL care nu exista."
+ not_found: "Oops, aplicația încearcă să încarce un URL care nu există."
unknown: "Ceva nu a funcționat."
buttons:
back: "Înapoi"
@@ -698,8 +698,8 @@ ro:
value_prop: "Cand creati un cont nou, vom retine exact ce ati citit, astfel continuati intotdeauna de unde ati ramas. Deasemenea primiti notificari, aici sau prin email atunci se posteaza ceva nou. Puteti \"aprecia\" postari pentru a impartasi iubire :heartbeat:"
summary:
enabled_description: "Vizualizați sumarul discuției: cea mai interesantă postare, așa cum a fost determinată de comunitate. Pentru toate postările, faceți click dedesubt."
- description: "Există {{count}} de răspunsuri."
- description_time: "Există {{count}} de răspunsuri cu timp de citit estimat la {{readingTime}} de minute."
+ description: "Există {{replyCount}} de răspunsuri."
+ description_time: "Există {{replyCount}} de răspunsuri cu timp de citit estimat la {{readingTime}} de minute."
enable: 'Fă sumarul discuției'
disable: 'Arată toate postările'
deleted_filter:
@@ -906,6 +906,7 @@ ro:
category: "Caută în categoria\"{{category}}\" "
topic: "Caută în această discuție"
private_messages: "Caută mesaje"
+ new_item: "nou"
go_back: 'înapoi'
not_logged_in_user: 'pagina utilizatorului cu sumarul activităților și preferințelor'
current_user: 'mergi la pagina proprie de utilizator'
@@ -960,7 +961,7 @@ ro:
new: 'discuție nouă'
unread: 'necitită'
new_topics:
- one: '1 subiect nou'
+ one: 'Un subiect nou'
few: '{{count}} subiecte noi'
other: '{{count}} subiecte noi'
unread_topics:
@@ -987,7 +988,7 @@ ro:
few: "aveţi {{count}} mesaje vechi necitite în această discuţie."
other: "aveţi {{count}} mesaje vechi necitite în această discuţie."
new_posts:
- one: "este 1 mesaj nou în această discuţie de la ultima citire"
+ one: "este un mesaj nou în această discuţie de la ultima citire"
few: "sunt {{count}} mesaje noi în această discuţie de la ultima citire"
other: "sunt {{count}} mesaje noi în această discuţie de la ultima citire"
likes:
@@ -1055,8 +1056,8 @@ ro:
actions:
recover: "Rescrie discuție"
delete: "Șterge Discuție"
- open: "Deschide discuție"
- close: "Închide discuție"
+ open: "Redeschide discuția"
+ close: "Închide discuția"
multi_select: "Selectează discuţiile ..."
auto_close: "Închide automat"
pin: "Fixează discuţia pe pagină..."
@@ -1155,6 +1156,9 @@ ro:
few: "Va rugăm să alegeţi noul propietar pentru cele {{count}} mesajele postate de {{old_user}}."
other: "Va rugăm să alegeţi noul propietar pentru cele {{count}} mesajele postate de {{old_user}}."
instructions_warn: " aveți în vedere că nicio notificare ce privește această postare nu va fi transferabilă retroactiv către noul utilizator. Avertisment: Acum, nicio informație ce depinde de postare nu va fi transferată noului utilizator. Folosiți cu grijă."
+ change_timestamp:
+ title: "Schimbă data publicării"
+ action: "schimbă data publicării"
multi_select:
select: 'selectează'
selected: 'selectate ({{count}})'
@@ -1539,8 +1543,12 @@ ro:
other: "Necitite ({{count}})"
help: "discuțiile pe care le vizualizați sau urmariți momentan ce includ postări necitite"
new:
- lower_title: "noi"
- title: "Nou"
+ lower_title: "nou"
+ title: "Noi"
+ title_with_count:
+ one: "Nou (1)"
+ few: "Noi ({{count}})"
+ other: "Noi ({{count}})"
help: "discuții create în ultimele zile"
posted:
title: "Postările mele"
@@ -1772,7 +1780,7 @@ ro:
title: "Dezactivearea modului doar-citire"
label: "Dezactivează modul doar-citire"
logs:
- none: "Nu exista rapoarte..."
+ none: "Nu există rapoarte..."
columns:
filename: "Numele fișierului"
size: "Mărime"
diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml
index 7d8afc6506..52ecb1d2eb 100644
--- a/config/locales/client.ru.yml
+++ b/config/locales/client.ru.yml
@@ -138,6 +138,8 @@ ru:
few: "%{count} года спустя"
many: "%{count} лет спустя"
other: "%{count} лет спустя"
+ previous_month: 'Предыдущий Месяц'
+ next_month: 'Следующий Месяц'
share:
topic: 'Поделиться ссылкой на эту тему'
post: 'Ссылка на сообщение №%{postNumber}'
@@ -229,6 +231,7 @@ ru:
other: "{{count}} букв"
suggested_topics:
title: "Похожие темы"
+ pm_title: "Похожие Сообщения"
about:
simple_title: "Информация"
title: "Информация про %{title}"
@@ -767,8 +770,8 @@ ru:
value_prop: "После регистрации мы сможем запоминать, где вы закончили чтение, а когда вы заглянете в ту или иную тему снова, мы откроем ее там, где вы остановились в прошлый раз. Мы также сможем уведомлять вас о новых ответах в любимых темах в вашем личном кабинете или по электронной почте. А самое приятное - после регистрации можно ставить сердечки, тем самым выражая свою симпатию автору. :heartbeat:"
summary:
enabled_description: "Вы просматриваете выдержку из темы - только самые интересные сообщения по мнению сообщества."
- description: "Есть {{count}} ответ(ов)."
- description_time: "В теме {{count}} сообщений с ожидаемым временем чтения {{readingTime}} минут."
+ description: "Есть {{replyCount}} ответ(ов)."
+ description_time: "В теме {{replyCount}} сообщений с ожидаемым временем чтения {{readingTime}} минут."
enable: 'Сводка по теме'
disable: 'Показать все сообщения'
deleted_filter:
diff --git a/config/locales/client.sk.yml b/config/locales/client.sk.yml
index f8b621c609..1785589903 100644
--- a/config/locales/client.sk.yml
+++ b/config/locales/client.sk.yml
@@ -119,6 +119,8 @@ sk:
one: "1 rok neskôr"
few: "%{count} roky neskôr"
other: "%{count} rokov neskôr"
+ previous_month: 'Predchádzajúci mesiac'
+ next_month: 'Nasledujúci mesiac'
share:
topic: 'zdieľaj odkaz na túto tému'
post: 'príspevok #%{postNumber}'
@@ -209,6 +211,7 @@ sk:
other: "{{count}} znakov"
suggested_topics:
title: "Odporúčané témy"
+ pm_title: "Odporúčané správy"
about:
simple_title: "O fóre"
title: "O %{title}"
@@ -458,6 +461,7 @@ sk:
not_supported: "Tento prehliadač nepodporuje upozornenia. Prepáčte."
perm_default: "Zapnúť upozornenia"
perm_denied_btn: "Prístup zamietnutý"
+ perm_denied_expl: "Povolenie pre zobrazenie notifikácií ste zakázali. Notifikácie povolíte v nastaveniach vášho prehliadača."
disable: "Zakázať upozornenia"
currently_enabled: "(momentálne povolené)"
enable: "Povoliť upozornenia"
@@ -511,6 +515,7 @@ sk:
groups: "Moje skupiny"
bulk_select: "Označ správy"
move_to_inbox: "Presuň do prijatej pošty"
+ move_to_archive: "Archív"
failed_to_move: "Zlyhalo presunutie označených správ (možno je chyba vo vašom pripojení)"
select_all: "Označ všetky"
change_password:
@@ -759,8 +764,8 @@ sk:
value_prop: "Keď si vytvoríte účet, zapamätáme si čo ste čítali, takže sa môžete vrátiť presne tam, kde ste prestali. Okrem toho dostanete upozornenie tu, aj na váš e-mail, vždy keď pribudnú nové príspevky. A môžete označiť príspevky ktoré sa vám páčia. :heartbeat:"
summary:
enabled_description: "Pozeráte sa na zhrnutie tejto témy: najzaujímavejšie príspevky podľa výberu komunity."
- description: "Je tu {{count}} odpovedí."
- description_time: "Je tu {{count}} odpovedí s priemerným časom čítania {{readingTime}} minút."
+ description: "Je tu {{replyCount}} odpovedí."
+ description_time: "Je tu {{replyCount}} odpovedí s priemerným časom čítania {{readingTime}} minút."
enable: 'Zhrnutie tejto témy'
disable: 'Zobraziť všetky príspevky'
deleted_filter:
@@ -941,6 +946,10 @@ sk:
moved_post: "
{{username}} presunul {{description}}
"
linked: "
{{username}} {{description}}
"
granted_badge: "
Získal '{{description}}'
"
+ group_message_summary:
+ one: "
{{count}} správa vo vašej {{group_name}} schránke
"
+ few: "
{{count}} správy vo vašej {{group_name}} schránke
"
+ other: "
{{count}} správ vo vašej {{group_name}} schránke
"
alt:
mentioned: "Spomenutý od"
quoted: "Citovaný od"
@@ -955,6 +964,7 @@ sk:
moved_post: "Váš príspevok bol presunutý "
linked: "Odkaz na váš príspevok"
granted_badge: "Priznaný odznak"
+ group_message_summary: "Správy v skupinovej schránke"
popup:
mentioned: '{{username}} vás spomenul v "{{topic}}" - {{site_title}}'
group_mentioned: '{{username}} vás spomenul v "{{topic}}" - {{site_title}}'
@@ -1836,6 +1846,7 @@ sk:
refresh_report: "Obnoviť report"
start_date: "Od"
end_date: "Do"
+ groups: "Všetky skupiny"
commits:
latest_changes: "Najnov3ie zmeny. Prosime aktualizujte čo najčastejšie!"
by: "podľa"
@@ -2229,6 +2240,10 @@ sk:
create_category: "vytvoriť kategóriu"
block_user: "blokovať používateľa"
unblock_user: "odblokovať používateľa"
+ grant_admin: "udeliť admin"
+ revoke_admin: "odobrať admin"
+ grant_moderation: "udeliť moderovanie"
+ revoke_moderation: "odvolať moderovanie"
screened_emails:
title: "Kontrolované emaily"
description: "Keď niekto skúsi vytvoriť nový účet, nasledujúce emailove adresy budú preverené a registrácia bude zablokovaná, alebo bude vykonaná nejaka iná akcia. "
diff --git a/config/locales/client.sq.yml b/config/locales/client.sq.yml
index d8fe81d4fa..85c7110c0f 100644
--- a/config/locales/client.sq.yml
+++ b/config/locales/client.sq.yml
@@ -615,8 +615,8 @@ sq:
hide_forever: "jo faleminderit"
summary:
enabled_description: "You're viewing a summary of this topic: the most interesting posts as determined by the community."
- description: "Janë {{count}} përgjigje."
- description_time: "There are {{count}} replies with an estimated read time of {{readingTime}} minutes."
+ description: "Janë {{replyCount}} përgjigje."
+ description_time: "There are {{replyCount}} replies with an estimated read time of {{readingTime}} minutes."
enable: 'Përmbidhë këtë Diskutim'
disable: 'Shfaq të gjithë Postimet'
deleted_filter:
diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml
index 7f9de18c7d..3917f6b597 100644
--- a/config/locales/client.sv.yml
+++ b/config/locales/client.sv.yml
@@ -633,8 +633,8 @@ sv:
hide_forever: "Nej tack"
summary:
enabled_description: "Sammanfattning över de inlägg som användarna tycker är mest intressanta."
- description: "Det finns {{count}} svar."
- description_time: "Det finns {{count}} svar med en uppskattad lästid på {{readingTime}} minuter."
+ description: "Det finns {{replyCount}} svar."
+ description_time: "Det finns {{replyCount}} svar med en uppskattad lästid på {{readingTime}} minuter."
enable: 'Sammanfatta detta ämne'
disable: 'Visa alla inlägg'
deleted_filter:
diff --git a/config/locales/client.te.yml b/config/locales/client.te.yml
index 78510ca5d0..a9a8ab6c39 100644
--- a/config/locales/client.te.yml
+++ b/config/locales/client.te.yml
@@ -489,8 +489,8 @@ te:
last_post: చివరి టపా
summary:
enabled_description: "మీరు ఈ విషయపు సారాంశము చదువుతున్నారు. ఆసక్తికర టపాలు కమ్యునిటీ ఎంచుకుంటుంది. "
- description: "అక్కడ మొత్తం {{count}} జవాబులు ఉన్నాయి"
- description_time: "అక్కడ మొత్తం {{count}} జవాబులు ఉన్నాయి. వీటిని చదవడానికి సుమారుగా {{readingTime}} నిమిషాలు పడ్తాయి."
+ description: "అక్కడ మొత్తం {{replyCount}} జవాబులు ఉన్నాయి"
+ description_time: "అక్కడ మొత్తం {{replyCount}} జవాబులు ఉన్నాయి. వీటిని చదవడానికి సుమారుగా {{readingTime}} నిమిషాలు పడ్తాయి."
enable: 'ఈ విషయాన్ని సంగ్రహించు'
disable: 'అన్ని టపాలూ చూపు'
deleted_filter:
diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml
index dd61fc96fb..140fafe2ff 100644
--- a/config/locales/client.tr_TR.yml
+++ b/config/locales/client.tr_TR.yml
@@ -659,8 +659,8 @@ tr_TR:
value_prop: "Bir hesap oluşturduğunuzda, tam olarak neyi okuyor olduğunuzu hatırlarız, böylece her zaman okumayı bırakmış olduğunuz yere geri gelirsiniz. Ayrıca burada, yeni gönderiler yağıldığında email yoluyla bildirim alırsınız. Ve sevgiyi paylaşmak için gönderileri beğenebilirsiniz. :heartbeat:"
summary:
enabled_description: "Bu konunun özetini görüntülemektesiniz: topluluğun en çok ilgisini çeken gönderiler"
- description: "{{count}} sayıda cevap var."
- description_time: "Tahmini okunma süresi {{readingTime}} dakika olan {{count}} sayıda cevap var."
+ description: "{{replyCount}} sayıda cevap var."
+ description_time: "Tahmini okunma süresi {{readingTime}} dakika olan {{replyCount}} sayıda cevap var."
enable: 'Bu Konuyu Özetle.'
disable: 'Tüm Gönderileri Göster'
deleted_filter:
diff --git a/config/locales/client.vi.yml b/config/locales/client.vi.yml
index 7623c339b5..b3451cc2dd 100644
--- a/config/locales/client.vi.yml
+++ b/config/locales/client.vi.yml
@@ -698,8 +698,8 @@ vi:
value_prop: "Khi bạn tạo tài khoản, website nhớ chính xác những gì bạn đã đọc, vì vậy bạn sẽ luôn trở lại đúng nơi đã rời đi. Bạn cũng có thể nhận thông báo ở đây hoặc qua email mỗi khi có bài viết mới. Bạn cũng có thể like bài viết để chia sẻ cảm xúc của mình. :heartbeat:"
summary:
enabled_description: "Bạn đang xem một bản tóm tắt của chủ đề này: các bài viết thú vị nhất được xác định bởi cộng đồng."
- description: "Có {{count}} trả lời"
- description_time: "Đây là {{count}} trả lời tương ứng với thời gian đọc {{readingTime}} phút."
+ description: "Có {{replyCount}} trả lời"
+ description_time: "Đây là {{replyCount}} trả lời tương ứng với thời gian đọc {{readingTime}} phút."
enable: 'Tóm tắt lại chủ đề'
disable: 'HIển thị tất cả các bài viết'
deleted_filter:
diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml
index e65ef2746d..2ac5a03f3b 100644
--- a/config/locales/client.zh_CN.yml
+++ b/config/locales/client.zh_CN.yml
@@ -58,7 +58,7 @@ zh_CN:
almost_x_years:
other: "近%{count}年"
date_month: "MMMDo"
- date_year: "YY-MM-D"
+ date_year: "YY年MMM"
medium:
x_minutes:
other: "%{count}分钟"
@@ -93,6 +93,8 @@ zh_CN:
email: '用电子邮件发送这个链接'
action_codes:
split_topic: "于%{when}分割了该主题"
+ invited_user: "于%{when}邀请%{who}"
+ removed_user: "于%{when}移除%{who}"
autoclosed:
enabled: '于%{when}关闭'
disabled: '于%{when}开启'
@@ -161,7 +163,7 @@ zh_CN:
weekly: "每周"
every_two_weeks: "每两周"
every_three_days: "每三天"
- max_of_count: "最多 {{count}}"
+ max_of_count: "不超过 {{count}}"
alternation: "或"
character_count:
other: "%{count} 个字符"
@@ -172,8 +174,8 @@ zh_CN:
simple_title: "关于"
title: "关于%{title}"
stats: "站点统计"
- our_admins: "我们的管理员们"
- our_moderators: "我们的版主们"
+ our_admins: "我们的管理员"
+ our_moderators: "我们的版主"
stat:
all_time: "所有时间内"
last_7_days: "7 天以内"
@@ -184,7 +186,7 @@ zh_CN:
user_count: "新用户"
active_user_count: "活跃用户"
contact: "联系我们"
- contact_info: "在遇到影响站点的重大错误或者紧急事件时,请通过 %{contact_info} 联系我们。"
+ contact_info: "当有重大或者紧急事件时,请通过 %{contact_info} 联系我们。"
bookmarked:
title: "书签"
clear_bookmarks: "删除书签"
@@ -199,7 +201,7 @@ zh_CN:
remove: "删除书签"
confirm_clear: "你确定要删除该主题的所有书签吗?"
topic_count_latest:
- other: "{{count}} 个新主题或更新的主题。"
+ other: "{{count}} 个近期的主题或更新的主题。"
topic_count_unread:
other: "{{count}} 未读主题。"
topic_count_new:
@@ -216,14 +218,14 @@ zh_CN:
uploaded: "上传完成!"
enable: "启用"
disable: "禁用"
- undo: "重做"
+ undo: "重置"
revert: "撤销"
failed: "失败"
switch_to_anon: "匿名模式"
switch_from_anon: "退出匿名模式"
banner:
close: "隐藏横幅。"
- edit: "编辑横幅>>"
+ edit: "编辑该横幅 >>"
choose_topic:
none_found: "没有找到主题。"
title:
@@ -242,7 +244,7 @@ zh_CN:
has_pending_posts:
other: "这个主题有 {{count}} 个帖子等待审核"
confirm: "保存修改"
- delete_prompt: "你确定要删除%{username}?这将删除他们的所有帖子并封禁这个邮箱和 IP 地址。"
+ delete_prompt: "你确定要删除%{username}吗?这将删除他们的所有帖子并封禁这个邮箱和 IP 地址。"
approval:
title: "帖子需要审核"
description: "我们已经保存了你的帖子,不过帖子需要由管理员先审核才能显示。请耐心。"
@@ -284,11 +286,11 @@ zh_CN:
other: "%{count} 位用户"
groups:
empty:
- posts: "此小组成员没有回复"
- members: "此小组没有成员"
- mentions: "此小组没有通知"
- messages: "此小组没有消息"
- topics: "此小组成员没有主题帖"
+ posts: "此小组的成员没有发表过帖子。"
+ members: "此小组没有成员。"
+ mentions: "此小组没有被提及过。"
+ messages: "此小组没有发送过消息。"
+ topics: "此小组的成员没有发表过主题。"
add: "添加"
selector_placeholder: "添加成员"
owner: "所有者"
@@ -401,9 +403,7 @@ zh_CN:
perm_denied_btn: "拒绝授权"
perm_denied_expl: "你拒绝了通知提醒的权限。设置浏览器允许通知提醒。"
disable: "禁用通知"
- currently_enabled: "(目前已启用)"
enable: "启用通知"
- currently_disabled: "(目前已禁用)"
each_browser_note: "注意:你必须在任何你使用的浏览器中更改这项设置。"
dismiss_notifications: "标记所有为已读"
dismiss_notifications_tooltip: "标记所有未读通知为已读"
@@ -538,12 +538,18 @@ zh_CN:
title: "用户资料徽章"
website: "网站"
email_settings: "电子邮箱"
+ email_previous_replies:
+ title: "包括邮件底下的以前的回复"
+ unless_emailed: "除非曾经发送过"
+ always: "总是"
+ never: "从不"
email_digests:
title: "当我不访问时,向我的邮箱发送最新信息:"
daily: "每天"
every_three_days: "每三天"
weekly: "每周"
every_two_weeks: "每两周"
+ email_in_reply_to: "在邮件中包含回复的摘要文本"
email_direct: "当有人引用我、回复我的帖子,@提及你或邀请你至主题时发送一封邮件给我"
email_private_messages: "当有人给发消息给我时发送一封邮件给我"
email_always: "即使我在论坛中活跃时也发送电子邮件提醒给我"
@@ -696,8 +702,8 @@ zh_CN:
value_prop: "当你创建了账户,我们能准确地追踪你的阅读进度,所以你能够在下一次访问时回到你上次阅读到的地方。你也可以在有新帖子的时候收到网页和邮件通知。并且你可以赞任何帖子来分享你的感谢。:heartbeat:"
summary:
enabled_description: "你正在查看这个主题的概括版本:由社群认定的最有意思的帖子。"
- description: "有 {{count}} 个回复。"
- description_time: "主题有 {{count}} 个回复,大约要花 {{readingTime}} 分钟阅读。"
+ description: "有 {{replyCount}} 个回复。"
+ description_time: "有 {{replyCount}} 个回复,大约要花 {{readingTime}} 分钟阅读。"
enable: '概括本主题'
disable: '显示所有帖子'
deleted_filter:
@@ -964,7 +970,7 @@ zh_CN:
selected:
other: "你已经选择了 {{count}}个主题"
none:
- unread: "你没有未阅主题。"
+ unread: "你没有未读主题。"
new: "你没有新主题可读。"
read: "你尚未阅读任何主题。"
posted: "你尚未在任何主题中发帖。"
@@ -975,8 +981,8 @@ zh_CN:
top: "没有最佳主题。"
search: "没有搜索结果。"
educate:
- new: '
"),
- $poll = $(this),
- pollName = $poll.data("poll-name"),
- pollView = createPollView(container, post, polls[pollName], votes[pollName]);
-
- $poll.replaceWith($div);
- Em.run.next(() => pollView.renderer.replaceIn(pollView, $div[0]));
- pollViews[pollName] = pollView;
- });
-
- this.set("pollViews", pollViews);
- },
-
- @on("willClearRender")
- _cleanUpPollViews() {
- if (this.get("pollViews")) {
- _.forEach(this.get("pollViews"), v => v.destroy());
- }
- }
- });
+ initialize() {
+ withPluginApi('0.1', initializePolls);
}
};
diff --git a/plugins/poll/config/locales/client.ko.yml b/plugins/poll/config/locales/client.ko.yml
index e2b5da05e1..52454181ce 100644
--- a/plugins/poll/config/locales/client.ko.yml
+++ b/plugins/poll/config/locales/client.ko.yml
@@ -15,6 +15,12 @@ ko:
average_rating: "평균: %{average}."
multiple:
help:
+ at_least_min_options:
+ other: "적어도 %{count}개의 옵션은 선택해야 합니다."
+ up_to_max_options:
+ other: "옵션은 %{count} 개까지 선택할 수 있습니다."
+ x_options:
+ other: "옵션은 %{count} 개 선택해야 합니다."
between_min_and_max_options: "%{min}개에서 %{max}개까지 선택할 수 있습니다."
cast-votes:
title: "표 던지기"
diff --git a/public/images/emoji/apple/airplane_arriving.png b/public/images/emoji/apple/airplane_arriving.png
new file mode 100644
index 0000000000..5b7bfeb801
Binary files /dev/null and b/public/images/emoji/apple/airplane_arriving.png differ
diff --git a/public/images/emoji/apple/airplane_departure.png b/public/images/emoji/apple/airplane_departure.png
new file mode 100644
index 0000000000..3d2f9379ef
Binary files /dev/null and b/public/images/emoji/apple/airplane_departure.png differ
diff --git a/public/images/emoji/apple/airplane_small.png b/public/images/emoji/apple/airplane_small.png
new file mode 100644
index 0000000000..a3a07e0f37
Binary files /dev/null and b/public/images/emoji/apple/airplane_small.png differ
diff --git a/public/images/emoji/apple/alembic.png b/public/images/emoji/apple/alembic.png
new file mode 100644
index 0000000000..1e47e111a4
Binary files /dev/null and b/public/images/emoji/apple/alembic.png differ
diff --git a/public/images/emoji/apple/amphora.png b/public/images/emoji/apple/amphora.png
new file mode 100644
index 0000000000..35f8769144
Binary files /dev/null and b/public/images/emoji/apple/amphora.png differ
diff --git a/public/images/emoji/apple/anger_right.png b/public/images/emoji/apple/anger_right.png
new file mode 100644
index 0000000000..bb53b70b07
Binary files /dev/null and b/public/images/emoji/apple/anger_right.png differ
diff --git a/public/images/emoji/apple/atom.png b/public/images/emoji/apple/atom.png
new file mode 100644
index 0000000000..21841ed317
Binary files /dev/null and b/public/images/emoji/apple/atom.png differ
diff --git a/public/images/emoji/apple/badminton.png b/public/images/emoji/apple/badminton.png
new file mode 100644
index 0000000000..4770463742
Binary files /dev/null and b/public/images/emoji/apple/badminton.png differ
diff --git a/public/images/emoji/apple/ballot_box.png b/public/images/emoji/apple/ballot_box.png
new file mode 100644
index 0000000000..e2ccbccd0b
Binary files /dev/null and b/public/images/emoji/apple/ballot_box.png differ
diff --git a/public/images/emoji/apple/basketball_player.png b/public/images/emoji/apple/basketball_player.png
new file mode 100644
index 0000000000..244f3dd463
Binary files /dev/null and b/public/images/emoji/apple/basketball_player.png differ
diff --git a/public/images/emoji/apple/beach.png b/public/images/emoji/apple/beach.png
new file mode 100644
index 0000000000..6801405016
Binary files /dev/null and b/public/images/emoji/apple/beach.png differ
diff --git a/public/images/emoji/apple/beach_umbrella.png b/public/images/emoji/apple/beach_umbrella.png
new file mode 100644
index 0000000000..8e380d70da
Binary files /dev/null and b/public/images/emoji/apple/beach_umbrella.png differ
diff --git a/public/images/emoji/apple/bed.png b/public/images/emoji/apple/bed.png
new file mode 100644
index 0000000000..94261fa5a7
Binary files /dev/null and b/public/images/emoji/apple/bed.png differ
diff --git a/public/images/emoji/apple/bellhop.png b/public/images/emoji/apple/bellhop.png
new file mode 100644
index 0000000000..77900e7215
Binary files /dev/null and b/public/images/emoji/apple/bellhop.png differ
diff --git a/public/images/emoji/apple/biohazard.png b/public/images/emoji/apple/biohazard.png
new file mode 100644
index 0000000000..9fae39a844
Binary files /dev/null and b/public/images/emoji/apple/biohazard.png differ
diff --git a/public/images/emoji/apple/bow_and_arrow.png b/public/images/emoji/apple/bow_and_arrow.png
new file mode 100644
index 0000000000..b0c8684ddd
Binary files /dev/null and b/public/images/emoji/apple/bow_and_arrow.png differ
diff --git a/public/images/emoji/apple/burrito.png b/public/images/emoji/apple/burrito.png
new file mode 100644
index 0000000000..18f30ae5a6
Binary files /dev/null and b/public/images/emoji/apple/burrito.png differ
diff --git a/public/images/emoji/apple/calendar_spiral.png b/public/images/emoji/apple/calendar_spiral.png
new file mode 100644
index 0000000000..9f0d0f20a0
Binary files /dev/null and b/public/images/emoji/apple/calendar_spiral.png differ
diff --git a/public/images/emoji/apple/camera_with_flash.png b/public/images/emoji/apple/camera_with_flash.png
new file mode 100644
index 0000000000..1689926e26
Binary files /dev/null and b/public/images/emoji/apple/camera_with_flash.png differ
diff --git a/public/images/emoji/apple/camping.png b/public/images/emoji/apple/camping.png
new file mode 100644
index 0000000000..463e13d77c
Binary files /dev/null and b/public/images/emoji/apple/camping.png differ
diff --git a/public/images/emoji/apple/candle.png b/public/images/emoji/apple/candle.png
new file mode 100644
index 0000000000..db982079ab
Binary files /dev/null and b/public/images/emoji/apple/candle.png differ
diff --git a/public/images/emoji/apple/card_box.png b/public/images/emoji/apple/card_box.png
new file mode 100644
index 0000000000..851c3b2f5c
Binary files /dev/null and b/public/images/emoji/apple/card_box.png differ
diff --git a/public/images/emoji/apple/chains.png b/public/images/emoji/apple/chains.png
new file mode 100644
index 0000000000..dadbfd85e5
Binary files /dev/null and b/public/images/emoji/apple/chains.png differ
diff --git a/public/images/emoji/apple/champagne.png b/public/images/emoji/apple/champagne.png
new file mode 100644
index 0000000000..21240556f6
Binary files /dev/null and b/public/images/emoji/apple/champagne.png differ
diff --git a/public/images/emoji/apple/cheese.png b/public/images/emoji/apple/cheese.png
new file mode 100644
index 0000000000..f397292e14
Binary files /dev/null and b/public/images/emoji/apple/cheese.png differ
diff --git a/public/images/emoji/apple/chipmunk.png b/public/images/emoji/apple/chipmunk.png
new file mode 100644
index 0000000000..e3d61a3810
Binary files /dev/null and b/public/images/emoji/apple/chipmunk.png differ
diff --git a/public/images/emoji/apple/city_dusk.png b/public/images/emoji/apple/city_dusk.png
new file mode 100644
index 0000000000..e9841b4148
Binary files /dev/null and b/public/images/emoji/apple/city_dusk.png differ
diff --git a/public/images/emoji/apple/cityscape.png b/public/images/emoji/apple/cityscape.png
new file mode 100644
index 0000000000..023e1049d7
Binary files /dev/null and b/public/images/emoji/apple/cityscape.png differ
diff --git a/public/images/emoji/apple/classical_building.png b/public/images/emoji/apple/classical_building.png
new file mode 100644
index 0000000000..dd1bc910e8
Binary files /dev/null and b/public/images/emoji/apple/classical_building.png differ
diff --git a/public/images/emoji/apple/clock.png b/public/images/emoji/apple/clock.png
new file mode 100644
index 0000000000..03bbdaf3c8
Binary files /dev/null and b/public/images/emoji/apple/clock.png differ
diff --git a/public/images/emoji/apple/cloud_lightning.png b/public/images/emoji/apple/cloud_lightning.png
new file mode 100644
index 0000000000..637f618d06
Binary files /dev/null and b/public/images/emoji/apple/cloud_lightning.png differ
diff --git a/public/images/emoji/apple/cloud_rain.png b/public/images/emoji/apple/cloud_rain.png
new file mode 100644
index 0000000000..704e3fa822
Binary files /dev/null and b/public/images/emoji/apple/cloud_rain.png differ
diff --git a/public/images/emoji/apple/cloud_snow.png b/public/images/emoji/apple/cloud_snow.png
new file mode 100644
index 0000000000..a502b63a4b
Binary files /dev/null and b/public/images/emoji/apple/cloud_snow.png differ
diff --git a/public/images/emoji/apple/cloud_tornado.png b/public/images/emoji/apple/cloud_tornado.png
new file mode 100644
index 0000000000..df48b70f5d
Binary files /dev/null and b/public/images/emoji/apple/cloud_tornado.png differ
diff --git a/public/images/emoji/apple/cn.png b/public/images/emoji/apple/cn.png
index 22db7b69bc..4be941fa0b 100644
Binary files a/public/images/emoji/apple/cn.png and b/public/images/emoji/apple/cn.png differ
diff --git a/public/images/emoji/apple/coffin.png b/public/images/emoji/apple/coffin.png
new file mode 100644
index 0000000000..08b08c3951
Binary files /dev/null and b/public/images/emoji/apple/coffin.png differ
diff --git a/public/images/emoji/apple/comet.png b/public/images/emoji/apple/comet.png
new file mode 100644
index 0000000000..2e54816809
Binary files /dev/null and b/public/images/emoji/apple/comet.png differ
diff --git a/public/images/emoji/apple/compression.png b/public/images/emoji/apple/compression.png
new file mode 100644
index 0000000000..281e7b250d
Binary files /dev/null and b/public/images/emoji/apple/compression.png differ
diff --git a/public/images/emoji/apple/construction_site.png b/public/images/emoji/apple/construction_site.png
new file mode 100644
index 0000000000..a78635ffec
Binary files /dev/null and b/public/images/emoji/apple/construction_site.png differ
diff --git a/public/images/emoji/apple/control_knobs.png b/public/images/emoji/apple/control_knobs.png
new file mode 100644
index 0000000000..9b2a45d0dc
Binary files /dev/null and b/public/images/emoji/apple/control_knobs.png differ
diff --git a/public/images/emoji/apple/couch.png b/public/images/emoji/apple/couch.png
new file mode 100644
index 0000000000..0fe1d1dc72
Binary files /dev/null and b/public/images/emoji/apple/couch.png differ
diff --git a/public/images/emoji/apple/crab.png b/public/images/emoji/apple/crab.png
new file mode 100644
index 0000000000..fc81d467c7
Binary files /dev/null and b/public/images/emoji/apple/crab.png differ
diff --git a/public/images/emoji/apple/crayon.png b/public/images/emoji/apple/crayon.png
new file mode 100644
index 0000000000..1527eabeaf
Binary files /dev/null and b/public/images/emoji/apple/crayon.png differ
diff --git a/public/images/emoji/apple/cricket.png b/public/images/emoji/apple/cricket.png
new file mode 100644
index 0000000000..fad7fbf328
Binary files /dev/null and b/public/images/emoji/apple/cricket.png differ
diff --git a/public/images/emoji/apple/cross.png b/public/images/emoji/apple/cross.png
new file mode 100644
index 0000000000..605f15122d
Binary files /dev/null and b/public/images/emoji/apple/cross.png differ
diff --git a/public/images/emoji/apple/crossed_swords.png b/public/images/emoji/apple/crossed_swords.png
new file mode 100644
index 0000000000..79b38cf12d
Binary files /dev/null and b/public/images/emoji/apple/crossed_swords.png differ
diff --git a/public/images/emoji/apple/cruise_ship.png b/public/images/emoji/apple/cruise_ship.png
new file mode 100644
index 0000000000..c3db46e31f
Binary files /dev/null and b/public/images/emoji/apple/cruise_ship.png differ
diff --git a/public/images/emoji/apple/dagger.png b/public/images/emoji/apple/dagger.png
new file mode 100644
index 0000000000..76ecf22803
Binary files /dev/null and b/public/images/emoji/apple/dagger.png differ
diff --git a/public/images/emoji/apple/dark_sunglasses.png b/public/images/emoji/apple/dark_sunglasses.png
new file mode 100644
index 0000000000..3a24fb7fd6
Binary files /dev/null and b/public/images/emoji/apple/dark_sunglasses.png differ
diff --git a/public/images/emoji/apple/de.png b/public/images/emoji/apple/de.png
index 52908ea565..1eea32e76a 100644
Binary files a/public/images/emoji/apple/de.png and b/public/images/emoji/apple/de.png differ
diff --git a/public/images/emoji/apple/desert.png b/public/images/emoji/apple/desert.png
new file mode 100644
index 0000000000..eed6da83a9
Binary files /dev/null and b/public/images/emoji/apple/desert.png differ
diff --git a/public/images/emoji/apple/desktop.png b/public/images/emoji/apple/desktop.png
new file mode 100644
index 0000000000..651803e109
Binary files /dev/null and b/public/images/emoji/apple/desktop.png differ
diff --git a/public/images/emoji/apple/dividers.png b/public/images/emoji/apple/dividers.png
new file mode 100644
index 0000000000..90fdd826d3
Binary files /dev/null and b/public/images/emoji/apple/dividers.png differ
diff --git a/public/images/emoji/apple/dove.png b/public/images/emoji/apple/dove.png
new file mode 100644
index 0000000000..6dc892768b
Binary files /dev/null and b/public/images/emoji/apple/dove.png differ
diff --git a/public/images/emoji/apple/es.png b/public/images/emoji/apple/es.png
index c3eef9db3f..2e7761c07a 100644
Binary files a/public/images/emoji/apple/es.png and b/public/images/emoji/apple/es.png differ
diff --git a/public/images/emoji/apple/eye.png b/public/images/emoji/apple/eye.png
new file mode 100644
index 0000000000..2e04514af4
Binary files /dev/null and b/public/images/emoji/apple/eye.png differ
diff --git a/public/images/emoji/apple/ferry.png b/public/images/emoji/apple/ferry.png
new file mode 100644
index 0000000000..a3a798ec02
Binary files /dev/null and b/public/images/emoji/apple/ferry.png differ
diff --git a/public/images/emoji/apple/field_hockey.png b/public/images/emoji/apple/field_hockey.png
new file mode 100644
index 0000000000..3c107b28d5
Binary files /dev/null and b/public/images/emoji/apple/field_hockey.png differ
diff --git a/public/images/emoji/apple/file_cabinet.png b/public/images/emoji/apple/file_cabinet.png
new file mode 100644
index 0000000000..e5a2ed1eea
Binary files /dev/null and b/public/images/emoji/apple/file_cabinet.png differ
diff --git a/public/images/emoji/apple/film_frames.png b/public/images/emoji/apple/film_frames.png
new file mode 100644
index 0000000000..6bd06eb564
Binary files /dev/null and b/public/images/emoji/apple/film_frames.png differ
diff --git a/public/images/emoji/apple/flag_black.png b/public/images/emoji/apple/flag_black.png
new file mode 100644
index 0000000000..c132e2c23e
Binary files /dev/null and b/public/images/emoji/apple/flag_black.png differ
diff --git a/public/images/emoji/apple/flag_cn.png b/public/images/emoji/apple/flag_cn.png
new file mode 100644
index 0000000000..0b265515a9
Binary files /dev/null and b/public/images/emoji/apple/flag_cn.png differ
diff --git a/public/images/emoji/apple/flag_de.png b/public/images/emoji/apple/flag_de.png
new file mode 100644
index 0000000000..24aa3d0d8b
Binary files /dev/null and b/public/images/emoji/apple/flag_de.png differ
diff --git a/public/images/emoji/apple/flag_es.png b/public/images/emoji/apple/flag_es.png
new file mode 100644
index 0000000000..d2cfcef840
Binary files /dev/null and b/public/images/emoji/apple/flag_es.png differ
diff --git a/public/images/emoji/apple/flag_fr.png b/public/images/emoji/apple/flag_fr.png
new file mode 100644
index 0000000000..aab8b4737e
Binary files /dev/null and b/public/images/emoji/apple/flag_fr.png differ
diff --git a/public/images/emoji/apple/flag_gb.png b/public/images/emoji/apple/flag_gb.png
new file mode 100644
index 0000000000..d4ad5e4a9c
Binary files /dev/null and b/public/images/emoji/apple/flag_gb.png differ
diff --git a/public/images/emoji/apple/flag_it.png b/public/images/emoji/apple/flag_it.png
new file mode 100644
index 0000000000..e5d64a1db7
Binary files /dev/null and b/public/images/emoji/apple/flag_it.png differ
diff --git a/public/images/emoji/apple/flag_jp.png b/public/images/emoji/apple/flag_jp.png
new file mode 100644
index 0000000000..6eb4257c86
Binary files /dev/null and b/public/images/emoji/apple/flag_jp.png differ
diff --git a/public/images/emoji/apple/flag_kr.png b/public/images/emoji/apple/flag_kr.png
new file mode 100644
index 0000000000..57757ef4a9
Binary files /dev/null and b/public/images/emoji/apple/flag_kr.png differ
diff --git a/public/images/emoji/apple/flag_ru.png b/public/images/emoji/apple/flag_ru.png
new file mode 100644
index 0000000000..77666f357d
Binary files /dev/null and b/public/images/emoji/apple/flag_ru.png differ
diff --git a/public/images/emoji/apple/flag_us.png b/public/images/emoji/apple/flag_us.png
new file mode 100644
index 0000000000..a3f9378086
Binary files /dev/null and b/public/images/emoji/apple/flag_us.png differ
diff --git a/public/images/emoji/apple/flag_white.png b/public/images/emoji/apple/flag_white.png
new file mode 100644
index 0000000000..6b6becc253
Binary files /dev/null and b/public/images/emoji/apple/flag_white.png differ
diff --git a/public/images/emoji/apple/fleur-de-lis.png b/public/images/emoji/apple/fleur-de-lis.png
new file mode 100644
index 0000000000..5f98df5b2d
Binary files /dev/null and b/public/images/emoji/apple/fleur-de-lis.png differ
diff --git a/public/images/emoji/apple/fog.png b/public/images/emoji/apple/fog.png
new file mode 100644
index 0000000000..2f2c2080b5
Binary files /dev/null and b/public/images/emoji/apple/fog.png differ
diff --git a/public/images/emoji/apple/fork_knife_plate.png b/public/images/emoji/apple/fork_knife_plate.png
new file mode 100644
index 0000000000..0abb5afedc
Binary files /dev/null and b/public/images/emoji/apple/fork_knife_plate.png differ
diff --git a/public/images/emoji/apple/frame_photo.png b/public/images/emoji/apple/frame_photo.png
new file mode 100644
index 0000000000..75b50f2600
Binary files /dev/null and b/public/images/emoji/apple/frame_photo.png differ
diff --git a/public/images/emoji/apple/frowning2.png b/public/images/emoji/apple/frowning2.png
new file mode 100644
index 0000000000..917fc06cbc
Binary files /dev/null and b/public/images/emoji/apple/frowning2.png differ
diff --git a/public/images/emoji/apple/gb.png b/public/images/emoji/apple/gb.png
index a468f28195..1ff35d0715 100644
Binary files a/public/images/emoji/apple/gb.png and b/public/images/emoji/apple/gb.png differ
diff --git a/public/images/emoji/apple/gear.png b/public/images/emoji/apple/gear.png
new file mode 100644
index 0000000000..465d74e5f6
Binary files /dev/null and b/public/images/emoji/apple/gear.png differ
diff --git a/public/images/emoji/apple/golfer.png b/public/images/emoji/apple/golfer.png
new file mode 100644
index 0000000000..ddbe2baefb
Binary files /dev/null and b/public/images/emoji/apple/golfer.png differ
diff --git a/public/images/emoji/apple/hammer_pick.png b/public/images/emoji/apple/hammer_pick.png
new file mode 100644
index 0000000000..d18d84cf96
Binary files /dev/null and b/public/images/emoji/apple/hammer_pick.png differ
diff --git a/public/images/emoji/apple/hand_splayed.png b/public/images/emoji/apple/hand_splayed.png
new file mode 100644
index 0000000000..f26ba2724d
Binary files /dev/null and b/public/images/emoji/apple/hand_splayed.png differ
diff --git a/public/images/emoji/apple/head_bandage.png b/public/images/emoji/apple/head_bandage.png
new file mode 100644
index 0000000000..f3fb32796f
Binary files /dev/null and b/public/images/emoji/apple/head_bandage.png differ
diff --git a/public/images/emoji/apple/heart_exclamation.png b/public/images/emoji/apple/heart_exclamation.png
new file mode 100644
index 0000000000..6b4ad655b3
Binary files /dev/null and b/public/images/emoji/apple/heart_exclamation.png differ
diff --git a/public/images/emoji/apple/helmet_with_cross.png b/public/images/emoji/apple/helmet_with_cross.png
new file mode 100644
index 0000000000..e93c2897c7
Binary files /dev/null and b/public/images/emoji/apple/helmet_with_cross.png differ
diff --git a/public/images/emoji/apple/hockey.png b/public/images/emoji/apple/hockey.png
new file mode 100644
index 0000000000..b6fb640c5c
Binary files /dev/null and b/public/images/emoji/apple/hockey.png differ
diff --git a/public/images/emoji/apple/hole.png b/public/images/emoji/apple/hole.png
new file mode 100644
index 0000000000..dba53ead68
Binary files /dev/null and b/public/images/emoji/apple/hole.png differ
diff --git a/public/images/emoji/apple/homes.png b/public/images/emoji/apple/homes.png
new file mode 100644
index 0000000000..08f06a1fd2
Binary files /dev/null and b/public/images/emoji/apple/homes.png differ
diff --git a/public/images/emoji/apple/hot_pepper.png b/public/images/emoji/apple/hot_pepper.png
new file mode 100644
index 0000000000..70669ca874
Binary files /dev/null and b/public/images/emoji/apple/hot_pepper.png differ
diff --git a/public/images/emoji/apple/hotdog.png b/public/images/emoji/apple/hotdog.png
new file mode 100644
index 0000000000..262c1cde79
Binary files /dev/null and b/public/images/emoji/apple/hotdog.png differ
diff --git a/public/images/emoji/apple/house_abandoned.png b/public/images/emoji/apple/house_abandoned.png
new file mode 100644
index 0000000000..91de077016
Binary files /dev/null and b/public/images/emoji/apple/house_abandoned.png differ
diff --git a/public/images/emoji/apple/hugging.png b/public/images/emoji/apple/hugging.png
new file mode 100644
index 0000000000..efe205463b
Binary files /dev/null and b/public/images/emoji/apple/hugging.png differ
diff --git a/public/images/emoji/apple/ice_skate.png b/public/images/emoji/apple/ice_skate.png
new file mode 100644
index 0000000000..ed97c898b5
Binary files /dev/null and b/public/images/emoji/apple/ice_skate.png differ
diff --git a/public/images/emoji/apple/island.png b/public/images/emoji/apple/island.png
new file mode 100644
index 0000000000..d5957062bf
Binary files /dev/null and b/public/images/emoji/apple/island.png differ
diff --git a/public/images/emoji/apple/it.png b/public/images/emoji/apple/it.png
index fdee93be2a..c332890a00 100644
Binary files a/public/images/emoji/apple/it.png and b/public/images/emoji/apple/it.png differ
diff --git a/public/images/emoji/apple/joystick.png b/public/images/emoji/apple/joystick.png
new file mode 100644
index 0000000000..198d724907
Binary files /dev/null and b/public/images/emoji/apple/joystick.png differ
diff --git a/public/images/emoji/apple/jp.png b/public/images/emoji/apple/jp.png
index eacde52533..beb79a4ace 100644
Binary files a/public/images/emoji/apple/jp.png and b/public/images/emoji/apple/jp.png differ
diff --git a/public/images/emoji/apple/kaaba.png b/public/images/emoji/apple/kaaba.png
new file mode 100644
index 0000000000..7319c5b065
Binary files /dev/null and b/public/images/emoji/apple/kaaba.png differ
diff --git a/public/images/emoji/apple/key2.png b/public/images/emoji/apple/key2.png
new file mode 100644
index 0000000000..0fe04f3d27
Binary files /dev/null and b/public/images/emoji/apple/key2.png differ
diff --git a/public/images/emoji/apple/keyboard.png b/public/images/emoji/apple/keyboard.png
new file mode 100644
index 0000000000..f4e6fa7ee6
Binary files /dev/null and b/public/images/emoji/apple/keyboard.png differ
diff --git a/public/images/emoji/apple/kr.png b/public/images/emoji/apple/kr.png
index da1b1cd4f9..e9b0b623f7 100644
Binary files a/public/images/emoji/apple/kr.png and b/public/images/emoji/apple/kr.png differ
diff --git a/public/images/emoji/apple/label.png b/public/images/emoji/apple/label.png
new file mode 100644
index 0000000000..b1d0009545
Binary files /dev/null and b/public/images/emoji/apple/label.png differ
diff --git a/public/images/emoji/apple/level_slider.png b/public/images/emoji/apple/level_slider.png
new file mode 100644
index 0000000000..3a1eef0fa8
Binary files /dev/null and b/public/images/emoji/apple/level_slider.png differ
diff --git a/public/images/emoji/apple/levitate.png b/public/images/emoji/apple/levitate.png
new file mode 100644
index 0000000000..2021cb1ce7
Binary files /dev/null and b/public/images/emoji/apple/levitate.png differ
diff --git a/public/images/emoji/apple/lifter.png b/public/images/emoji/apple/lifter.png
new file mode 100644
index 0000000000..f86ca73335
Binary files /dev/null and b/public/images/emoji/apple/lifter.png differ
diff --git a/public/images/emoji/apple/lion_face.png b/public/images/emoji/apple/lion_face.png
new file mode 100644
index 0000000000..0be5ba6dfe
Binary files /dev/null and b/public/images/emoji/apple/lion_face.png differ
diff --git a/public/images/emoji/apple/map.png b/public/images/emoji/apple/map.png
new file mode 100644
index 0000000000..0faacb80f8
Binary files /dev/null and b/public/images/emoji/apple/map.png differ
diff --git a/public/images/emoji/apple/medal.png b/public/images/emoji/apple/medal.png
new file mode 100644
index 0000000000..c75dc457c4
Binary files /dev/null and b/public/images/emoji/apple/medal.png differ
diff --git a/public/images/emoji/apple/menorah.png b/public/images/emoji/apple/menorah.png
new file mode 100644
index 0000000000..27a8a09c96
Binary files /dev/null and b/public/images/emoji/apple/menorah.png differ
diff --git a/public/images/emoji/apple/metal.png b/public/images/emoji/apple/metal.png
new file mode 100644
index 0000000000..ef19c2fee1
Binary files /dev/null and b/public/images/emoji/apple/metal.png differ
diff --git a/public/images/emoji/apple/microphone2.png b/public/images/emoji/apple/microphone2.png
new file mode 100644
index 0000000000..1adc026c0c
Binary files /dev/null and b/public/images/emoji/apple/microphone2.png differ
diff --git a/public/images/emoji/apple/middle_finger.png b/public/images/emoji/apple/middle_finger.png
new file mode 100644
index 0000000000..3159f7b765
Binary files /dev/null and b/public/images/emoji/apple/middle_finger.png differ
diff --git a/public/images/emoji/apple/military_medal.png b/public/images/emoji/apple/military_medal.png
new file mode 100644
index 0000000000..552eabc99b
Binary files /dev/null and b/public/images/emoji/apple/military_medal.png differ
diff --git a/public/images/emoji/apple/money_mouth.png b/public/images/emoji/apple/money_mouth.png
new file mode 100644
index 0000000000..7942cbe6c7
Binary files /dev/null and b/public/images/emoji/apple/money_mouth.png differ
diff --git a/public/images/emoji/apple/mosque.png b/public/images/emoji/apple/mosque.png
new file mode 100644
index 0000000000..2b3126dfd2
Binary files /dev/null and b/public/images/emoji/apple/mosque.png differ
diff --git a/public/images/emoji/apple/motorboat.png b/public/images/emoji/apple/motorboat.png
new file mode 100644
index 0000000000..2e2a7ac718
Binary files /dev/null and b/public/images/emoji/apple/motorboat.png differ
diff --git a/public/images/emoji/apple/motorcycle.png b/public/images/emoji/apple/motorcycle.png
new file mode 100644
index 0000000000..2db9d397cd
Binary files /dev/null and b/public/images/emoji/apple/motorcycle.png differ
diff --git a/public/images/emoji/apple/motorway.png b/public/images/emoji/apple/motorway.png
new file mode 100644
index 0000000000..d2cdd05982
Binary files /dev/null and b/public/images/emoji/apple/motorway.png differ
diff --git a/public/images/emoji/apple/mountain.png b/public/images/emoji/apple/mountain.png
new file mode 100644
index 0000000000..372fc7e677
Binary files /dev/null and b/public/images/emoji/apple/mountain.png differ
diff --git a/public/images/emoji/apple/mountain_snow.png b/public/images/emoji/apple/mountain_snow.png
new file mode 100644
index 0000000000..eb618233dd
Binary files /dev/null and b/public/images/emoji/apple/mountain_snow.png differ
diff --git a/public/images/emoji/apple/mouse_three_button.png b/public/images/emoji/apple/mouse_three_button.png
new file mode 100644
index 0000000000..15d3480e24
Binary files /dev/null and b/public/images/emoji/apple/mouse_three_button.png differ
diff --git a/public/images/emoji/apple/nerd.png b/public/images/emoji/apple/nerd.png
new file mode 100644
index 0000000000..f7fdc39095
Binary files /dev/null and b/public/images/emoji/apple/nerd.png differ
diff --git a/public/images/emoji/apple/newspaper2.png b/public/images/emoji/apple/newspaper2.png
new file mode 100644
index 0000000000..2371b569da
Binary files /dev/null and b/public/images/emoji/apple/newspaper2.png differ
diff --git a/public/images/emoji/apple/notepad_spiral.png b/public/images/emoji/apple/notepad_spiral.png
new file mode 100644
index 0000000000..ca00c4e0c9
Binary files /dev/null and b/public/images/emoji/apple/notepad_spiral.png differ
diff --git a/public/images/emoji/apple/oil.png b/public/images/emoji/apple/oil.png
new file mode 100644
index 0000000000..a0d4f87c17
Binary files /dev/null and b/public/images/emoji/apple/oil.png differ
diff --git a/public/images/emoji/apple/om_symbol.png b/public/images/emoji/apple/om_symbol.png
new file mode 100644
index 0000000000..abe320afa7
Binary files /dev/null and b/public/images/emoji/apple/om_symbol.png differ
diff --git a/public/images/emoji/apple/orthodox_cross.png b/public/images/emoji/apple/orthodox_cross.png
new file mode 100644
index 0000000000..510d19c1d0
Binary files /dev/null and b/public/images/emoji/apple/orthodox_cross.png differ
diff --git a/public/images/emoji/apple/paintbrush.png b/public/images/emoji/apple/paintbrush.png
new file mode 100644
index 0000000000..cc4b8ef70d
Binary files /dev/null and b/public/images/emoji/apple/paintbrush.png differ
diff --git a/public/images/emoji/apple/paperclips.png b/public/images/emoji/apple/paperclips.png
new file mode 100644
index 0000000000..04c736a409
Binary files /dev/null and b/public/images/emoji/apple/paperclips.png differ
diff --git a/public/images/emoji/apple/park.png b/public/images/emoji/apple/park.png
new file mode 100644
index 0000000000..ebd8a9e958
Binary files /dev/null and b/public/images/emoji/apple/park.png differ
diff --git a/public/images/emoji/apple/pause_button.png b/public/images/emoji/apple/pause_button.png
new file mode 100644
index 0000000000..aac27c376b
Binary files /dev/null and b/public/images/emoji/apple/pause_button.png differ
diff --git a/public/images/emoji/apple/peace.png b/public/images/emoji/apple/peace.png
new file mode 100644
index 0000000000..7001b6a4e7
Binary files /dev/null and b/public/images/emoji/apple/peace.png differ
diff --git a/public/images/emoji/apple/pen_ballpoint.png b/public/images/emoji/apple/pen_ballpoint.png
new file mode 100644
index 0000000000..14b06985eb
Binary files /dev/null and b/public/images/emoji/apple/pen_ballpoint.png differ
diff --git a/public/images/emoji/apple/pen_fountain.png b/public/images/emoji/apple/pen_fountain.png
new file mode 100644
index 0000000000..5e9a10292e
Binary files /dev/null and b/public/images/emoji/apple/pen_fountain.png differ
diff --git a/public/images/emoji/apple/pick.png b/public/images/emoji/apple/pick.png
new file mode 100644
index 0000000000..70ad820ce3
Binary files /dev/null and b/public/images/emoji/apple/pick.png differ
diff --git a/public/images/emoji/apple/ping_pong.png b/public/images/emoji/apple/ping_pong.png
new file mode 100644
index 0000000000..186e254d75
Binary files /dev/null and b/public/images/emoji/apple/ping_pong.png differ
diff --git a/public/images/emoji/apple/place_of_worship.png b/public/images/emoji/apple/place_of_worship.png
new file mode 100644
index 0000000000..b66a3f0f65
Binary files /dev/null and b/public/images/emoji/apple/place_of_worship.png differ
diff --git a/public/images/emoji/apple/play_pause.png b/public/images/emoji/apple/play_pause.png
new file mode 100644
index 0000000000..b12ac1f131
Binary files /dev/null and b/public/images/emoji/apple/play_pause.png differ
diff --git a/public/images/emoji/apple/popcorn.png b/public/images/emoji/apple/popcorn.png
new file mode 100644
index 0000000000..ec9fe13950
Binary files /dev/null and b/public/images/emoji/apple/popcorn.png differ
diff --git a/public/images/emoji/apple/prayer_beads.png b/public/images/emoji/apple/prayer_beads.png
new file mode 100644
index 0000000000..dee68150bd
Binary files /dev/null and b/public/images/emoji/apple/prayer_beads.png differ
diff --git a/public/images/emoji/apple/printer.png b/public/images/emoji/apple/printer.png
new file mode 100644
index 0000000000..39a692c648
Binary files /dev/null and b/public/images/emoji/apple/printer.png differ
diff --git a/public/images/emoji/apple/projector.png b/public/images/emoji/apple/projector.png
new file mode 100644
index 0000000000..e944d739e8
Binary files /dev/null and b/public/images/emoji/apple/projector.png differ
diff --git a/public/images/emoji/apple/race_car.png b/public/images/emoji/apple/race_car.png
new file mode 100644
index 0000000000..0b9dc36daf
Binary files /dev/null and b/public/images/emoji/apple/race_car.png differ
diff --git a/public/images/emoji/apple/radioactive.png b/public/images/emoji/apple/radioactive.png
new file mode 100644
index 0000000000..f9c1d5e8a6
Binary files /dev/null and b/public/images/emoji/apple/radioactive.png differ
diff --git a/public/images/emoji/apple/railway_track.png b/public/images/emoji/apple/railway_track.png
new file mode 100644
index 0000000000..d664615901
Binary files /dev/null and b/public/images/emoji/apple/railway_track.png differ
diff --git a/public/images/emoji/apple/record_button.png b/public/images/emoji/apple/record_button.png
new file mode 100644
index 0000000000..578fc82947
Binary files /dev/null and b/public/images/emoji/apple/record_button.png differ
diff --git a/public/images/emoji/apple/reminder_ribbon.png b/public/images/emoji/apple/reminder_ribbon.png
new file mode 100644
index 0000000000..bc905d6454
Binary files /dev/null and b/public/images/emoji/apple/reminder_ribbon.png differ
diff --git a/public/images/emoji/apple/robot.png b/public/images/emoji/apple/robot.png
new file mode 100644
index 0000000000..751776d185
Binary files /dev/null and b/public/images/emoji/apple/robot.png differ
diff --git a/public/images/emoji/apple/rolling_eyes.png b/public/images/emoji/apple/rolling_eyes.png
new file mode 100644
index 0000000000..f29bda511f
Binary files /dev/null and b/public/images/emoji/apple/rolling_eyes.png differ
diff --git a/public/images/emoji/apple/rosette.png b/public/images/emoji/apple/rosette.png
new file mode 100644
index 0000000000..0c47885097
Binary files /dev/null and b/public/images/emoji/apple/rosette.png differ
diff --git a/public/images/emoji/apple/ru.png b/public/images/emoji/apple/ru.png
index 8408204b25..f62d984e4e 100644
Binary files a/public/images/emoji/apple/ru.png and b/public/images/emoji/apple/ru.png differ
diff --git a/public/images/emoji/apple/satellite_orbital.png b/public/images/emoji/apple/satellite_orbital.png
new file mode 100644
index 0000000000..1c02e1c78c
Binary files /dev/null and b/public/images/emoji/apple/satellite_orbital.png differ
diff --git a/public/images/emoji/apple/scales.png b/public/images/emoji/apple/scales.png
new file mode 100644
index 0000000000..11fa8f8ae0
Binary files /dev/null and b/public/images/emoji/apple/scales.png differ
diff --git a/public/images/emoji/apple/scorpion.png b/public/images/emoji/apple/scorpion.png
new file mode 100644
index 0000000000..74779cb829
Binary files /dev/null and b/public/images/emoji/apple/scorpion.png differ
diff --git a/public/images/emoji/apple/shamrock.png b/public/images/emoji/apple/shamrock.png
new file mode 100644
index 0000000000..7a68121349
Binary files /dev/null and b/public/images/emoji/apple/shamrock.png differ
diff --git a/public/images/emoji/apple/shield.png b/public/images/emoji/apple/shield.png
new file mode 100644
index 0000000000..c2146a8e4c
Binary files /dev/null and b/public/images/emoji/apple/shield.png differ
diff --git a/public/images/emoji/apple/shinto_shrine.png b/public/images/emoji/apple/shinto_shrine.png
new file mode 100644
index 0000000000..f04a6e4043
Binary files /dev/null and b/public/images/emoji/apple/shinto_shrine.png differ
diff --git a/public/images/emoji/apple/shopping_bags.png b/public/images/emoji/apple/shopping_bags.png
new file mode 100644
index 0000000000..5c1fdae6fe
Binary files /dev/null and b/public/images/emoji/apple/shopping_bags.png differ
diff --git a/public/images/emoji/apple/skier.png b/public/images/emoji/apple/skier.png
new file mode 100644
index 0000000000..9f4aaf09cd
Binary files /dev/null and b/public/images/emoji/apple/skier.png differ
diff --git a/public/images/emoji/apple/skull_crossbones.png b/public/images/emoji/apple/skull_crossbones.png
new file mode 100644
index 0000000000..27db39049d
Binary files /dev/null and b/public/images/emoji/apple/skull_crossbones.png differ
diff --git a/public/images/emoji/apple/sleeping_accommodation.png b/public/images/emoji/apple/sleeping_accommodation.png
new file mode 100644
index 0000000000..15d17edc2d
Binary files /dev/null and b/public/images/emoji/apple/sleeping_accommodation.png differ
diff --git a/public/images/emoji/apple/slight_frown.png b/public/images/emoji/apple/slight_frown.png
new file mode 100644
index 0000000000..0c0cb44bb9
Binary files /dev/null and b/public/images/emoji/apple/slight_frown.png differ
diff --git a/public/images/emoji/apple/slight_smile.png b/public/images/emoji/apple/slight_smile.png
new file mode 100644
index 0000000000..3d3b6e0837
Binary files /dev/null and b/public/images/emoji/apple/slight_smile.png differ
diff --git a/public/images/emoji/apple/snowman2.png b/public/images/emoji/apple/snowman2.png
new file mode 100644
index 0000000000..89e619f41f
Binary files /dev/null and b/public/images/emoji/apple/snowman2.png differ
diff --git a/public/images/emoji/apple/speaking_head.png b/public/images/emoji/apple/speaking_head.png
new file mode 100644
index 0000000000..b25c49724b
Binary files /dev/null and b/public/images/emoji/apple/speaking_head.png differ
diff --git a/public/images/emoji/apple/spider.png b/public/images/emoji/apple/spider.png
new file mode 100644
index 0000000000..4df7e8bfeb
Binary files /dev/null and b/public/images/emoji/apple/spider.png differ
diff --git a/public/images/emoji/apple/spider_web.png b/public/images/emoji/apple/spider_web.png
new file mode 100644
index 0000000000..bbb08b0e12
Binary files /dev/null and b/public/images/emoji/apple/spider_web.png differ
diff --git a/public/images/emoji/apple/spy.png b/public/images/emoji/apple/spy.png
new file mode 100644
index 0000000000..9cd898d6c1
Binary files /dev/null and b/public/images/emoji/apple/spy.png differ
diff --git a/public/images/emoji/apple/stadium.png b/public/images/emoji/apple/stadium.png
new file mode 100644
index 0000000000..342032abbd
Binary files /dev/null and b/public/images/emoji/apple/stadium.png differ
diff --git a/public/images/emoji/apple/star_and_crescent.png b/public/images/emoji/apple/star_and_crescent.png
new file mode 100644
index 0000000000..77fd9928d9
Binary files /dev/null and b/public/images/emoji/apple/star_and_crescent.png differ
diff --git a/public/images/emoji/apple/star_of_david.png b/public/images/emoji/apple/star_of_david.png
new file mode 100644
index 0000000000..82bc00d3ff
Binary files /dev/null and b/public/images/emoji/apple/star_of_david.png differ
diff --git a/public/images/emoji/apple/stop_button.png b/public/images/emoji/apple/stop_button.png
new file mode 100644
index 0000000000..99258e0249
Binary files /dev/null and b/public/images/emoji/apple/stop_button.png differ
diff --git a/public/images/emoji/apple/stopwatch.png b/public/images/emoji/apple/stopwatch.png
new file mode 100644
index 0000000000..d194a2d99a
Binary files /dev/null and b/public/images/emoji/apple/stopwatch.png differ
diff --git a/public/images/emoji/apple/synagogue.png b/public/images/emoji/apple/synagogue.png
new file mode 100644
index 0000000000..9aec9500ca
Binary files /dev/null and b/public/images/emoji/apple/synagogue.png differ
diff --git a/public/images/emoji/apple/taco.png b/public/images/emoji/apple/taco.png
new file mode 100644
index 0000000000..a4e8ba4e30
Binary files /dev/null and b/public/images/emoji/apple/taco.png differ
diff --git a/public/images/emoji/apple/ten.png b/public/images/emoji/apple/ten.png
new file mode 100644
index 0000000000..68ae72c0f7
Binary files /dev/null and b/public/images/emoji/apple/ten.png differ
diff --git a/public/images/emoji/apple/thermometer.png b/public/images/emoji/apple/thermometer.png
new file mode 100644
index 0000000000..94d30503cd
Binary files /dev/null and b/public/images/emoji/apple/thermometer.png differ
diff --git a/public/images/emoji/apple/thermometer_face.png b/public/images/emoji/apple/thermometer_face.png
new file mode 100644
index 0000000000..462afa0e8e
Binary files /dev/null and b/public/images/emoji/apple/thermometer_face.png differ
diff --git a/public/images/emoji/apple/thinking.png b/public/images/emoji/apple/thinking.png
new file mode 100644
index 0000000000..471c4a3a4b
Binary files /dev/null and b/public/images/emoji/apple/thinking.png differ
diff --git a/public/images/emoji/apple/thunder_cloud_rain.png b/public/images/emoji/apple/thunder_cloud_rain.png
new file mode 100644
index 0000000000..54d0d491ba
Binary files /dev/null and b/public/images/emoji/apple/thunder_cloud_rain.png differ
diff --git a/public/images/emoji/apple/tickets.png b/public/images/emoji/apple/tickets.png
new file mode 100644
index 0000000000..d019a6976f
Binary files /dev/null and b/public/images/emoji/apple/tickets.png differ
diff --git a/public/images/emoji/apple/timer.png b/public/images/emoji/apple/timer.png
new file mode 100644
index 0000000000..a900a0599d
Binary files /dev/null and b/public/images/emoji/apple/timer.png differ
diff --git a/public/images/emoji/apple/tools.png b/public/images/emoji/apple/tools.png
new file mode 100644
index 0000000000..05671ef41e
Binary files /dev/null and b/public/images/emoji/apple/tools.png differ
diff --git a/public/images/emoji/apple/track_next.png b/public/images/emoji/apple/track_next.png
new file mode 100644
index 0000000000..6c6638ce88
Binary files /dev/null and b/public/images/emoji/apple/track_next.png differ
diff --git a/public/images/emoji/apple/track_previous.png b/public/images/emoji/apple/track_previous.png
new file mode 100644
index 0000000000..6bef75ae03
Binary files /dev/null and b/public/images/emoji/apple/track_previous.png differ
diff --git a/public/images/emoji/apple/trackball.png b/public/images/emoji/apple/trackball.png
new file mode 100644
index 0000000000..26567260c7
Binary files /dev/null and b/public/images/emoji/apple/trackball.png differ
diff --git a/public/images/emoji/apple/turkey.png b/public/images/emoji/apple/turkey.png
new file mode 100644
index 0000000000..bb5f149351
Binary files /dev/null and b/public/images/emoji/apple/turkey.png differ
diff --git a/public/images/emoji/apple/umbrella2.png b/public/images/emoji/apple/umbrella2.png
new file mode 100644
index 0000000000..541849c8bb
Binary files /dev/null and b/public/images/emoji/apple/umbrella2.png differ
diff --git a/public/images/emoji/apple/unicorn.png b/public/images/emoji/apple/unicorn.png
new file mode 100644
index 0000000000..6fe83ed344
Binary files /dev/null and b/public/images/emoji/apple/unicorn.png differ
diff --git a/public/images/emoji/apple/upside_down.png b/public/images/emoji/apple/upside_down.png
new file mode 100644
index 0000000000..34b6fec258
Binary files /dev/null and b/public/images/emoji/apple/upside_down.png differ
diff --git a/public/images/emoji/apple/urn.png b/public/images/emoji/apple/urn.png
new file mode 100644
index 0000000000..1a71bd1f84
Binary files /dev/null and b/public/images/emoji/apple/urn.png differ
diff --git a/public/images/emoji/apple/us.png b/public/images/emoji/apple/us.png
index fc29b566bf..72a949d087 100644
Binary files a/public/images/emoji/apple/us.png and b/public/images/emoji/apple/us.png differ
diff --git a/public/images/emoji/apple/volleyball.png b/public/images/emoji/apple/volleyball.png
new file mode 100644
index 0000000000..50db05cd43
Binary files /dev/null and b/public/images/emoji/apple/volleyball.png differ
diff --git a/public/images/emoji/apple/vulcan.png b/public/images/emoji/apple/vulcan.png
new file mode 100644
index 0000000000..9f1006c0fd
Binary files /dev/null and b/public/images/emoji/apple/vulcan.png differ
diff --git a/public/images/emoji/apple/wastebasket.png b/public/images/emoji/apple/wastebasket.png
new file mode 100644
index 0000000000..2288fcaf86
Binary files /dev/null and b/public/images/emoji/apple/wastebasket.png differ
diff --git a/public/images/emoji/apple/wheel_of_dharma.png b/public/images/emoji/apple/wheel_of_dharma.png
new file mode 100644
index 0000000000..90ca228b38
Binary files /dev/null and b/public/images/emoji/apple/wheel_of_dharma.png differ
diff --git a/public/images/emoji/apple/white_sun_cloud.png b/public/images/emoji/apple/white_sun_cloud.png
new file mode 100644
index 0000000000..ecdd80a365
Binary files /dev/null and b/public/images/emoji/apple/white_sun_cloud.png differ
diff --git a/public/images/emoji/apple/white_sun_rain_cloud.png b/public/images/emoji/apple/white_sun_rain_cloud.png
new file mode 100644
index 0000000000..6235af0b93
Binary files /dev/null and b/public/images/emoji/apple/white_sun_rain_cloud.png differ
diff --git a/public/images/emoji/apple/white_sun_small_cloud.png b/public/images/emoji/apple/white_sun_small_cloud.png
new file mode 100644
index 0000000000..af664c7f25
Binary files /dev/null and b/public/images/emoji/apple/white_sun_small_cloud.png differ
diff --git a/public/images/emoji/apple/wind_blowing_face.png b/public/images/emoji/apple/wind_blowing_face.png
new file mode 100644
index 0000000000..785159cf3d
Binary files /dev/null and b/public/images/emoji/apple/wind_blowing_face.png differ
diff --git a/public/images/emoji/apple/writing_hand.png b/public/images/emoji/apple/writing_hand.png
new file mode 100644
index 0000000000..83421711b1
Binary files /dev/null and b/public/images/emoji/apple/writing_hand.png differ
diff --git a/public/images/emoji/apple/yin_yang.png b/public/images/emoji/apple/yin_yang.png
new file mode 100644
index 0000000000..8fb121fcda
Binary files /dev/null and b/public/images/emoji/apple/yin_yang.png differ
diff --git a/public/images/emoji/apple/zipper_mouth.png b/public/images/emoji/apple/zipper_mouth.png
new file mode 100644
index 0000000000..c5d1323c5c
Binary files /dev/null and b/public/images/emoji/apple/zipper_mouth.png differ
diff --git a/public/images/emoji/emoji_one/airplane_arriving.png b/public/images/emoji/emoji_one/airplane_arriving.png
new file mode 100644
index 0000000000..5358f5d98c
Binary files /dev/null and b/public/images/emoji/emoji_one/airplane_arriving.png differ
diff --git a/public/images/emoji/emoji_one/airplane_departure.png b/public/images/emoji/emoji_one/airplane_departure.png
new file mode 100644
index 0000000000..94e455bf4e
Binary files /dev/null and b/public/images/emoji/emoji_one/airplane_departure.png differ
diff --git a/public/images/emoji/emoji_one/airplane_small.png b/public/images/emoji/emoji_one/airplane_small.png
new file mode 100644
index 0000000000..2328135495
Binary files /dev/null and b/public/images/emoji/emoji_one/airplane_small.png differ
diff --git a/public/images/emoji/emoji_one/alembic.png b/public/images/emoji/emoji_one/alembic.png
new file mode 100644
index 0000000000..82b4e96293
Binary files /dev/null and b/public/images/emoji/emoji_one/alembic.png differ
diff --git a/public/images/emoji/emoji_one/amphora.png b/public/images/emoji/emoji_one/amphora.png
new file mode 100644
index 0000000000..9e0b5a18f2
Binary files /dev/null and b/public/images/emoji/emoji_one/amphora.png differ
diff --git a/public/images/emoji/emoji_one/anger_right.png b/public/images/emoji/emoji_one/anger_right.png
new file mode 100644
index 0000000000..d711e6d31f
Binary files /dev/null and b/public/images/emoji/emoji_one/anger_right.png differ
diff --git a/public/images/emoji/emoji_one/atom.png b/public/images/emoji/emoji_one/atom.png
new file mode 100644
index 0000000000..05ad819496
Binary files /dev/null and b/public/images/emoji/emoji_one/atom.png differ
diff --git a/public/images/emoji/emoji_one/badminton.png b/public/images/emoji/emoji_one/badminton.png
new file mode 100644
index 0000000000..19737e99be
Binary files /dev/null and b/public/images/emoji/emoji_one/badminton.png differ
diff --git a/public/images/emoji/emoji_one/ballot_box.png b/public/images/emoji/emoji_one/ballot_box.png
new file mode 100644
index 0000000000..7effe6710e
Binary files /dev/null and b/public/images/emoji/emoji_one/ballot_box.png differ
diff --git a/public/images/emoji/emoji_one/basketball_player.png b/public/images/emoji/emoji_one/basketball_player.png
new file mode 100644
index 0000000000..19a60cb845
Binary files /dev/null and b/public/images/emoji/emoji_one/basketball_player.png differ
diff --git a/public/images/emoji/emoji_one/beach.png b/public/images/emoji/emoji_one/beach.png
new file mode 100644
index 0000000000..e4066df5d5
Binary files /dev/null and b/public/images/emoji/emoji_one/beach.png differ
diff --git a/public/images/emoji/emoji_one/beach_umbrella.png b/public/images/emoji/emoji_one/beach_umbrella.png
new file mode 100644
index 0000000000..f1f55d8ca9
Binary files /dev/null and b/public/images/emoji/emoji_one/beach_umbrella.png differ
diff --git a/public/images/emoji/emoji_one/bed.png b/public/images/emoji/emoji_one/bed.png
new file mode 100644
index 0000000000..3a859bbf93
Binary files /dev/null and b/public/images/emoji/emoji_one/bed.png differ
diff --git a/public/images/emoji/emoji_one/bellhop.png b/public/images/emoji/emoji_one/bellhop.png
new file mode 100644
index 0000000000..fc7301104c
Binary files /dev/null and b/public/images/emoji/emoji_one/bellhop.png differ
diff --git a/public/images/emoji/emoji_one/biohazard.png b/public/images/emoji/emoji_one/biohazard.png
new file mode 100644
index 0000000000..9c3e4e989e
Binary files /dev/null and b/public/images/emoji/emoji_one/biohazard.png differ
diff --git a/public/images/emoji/emoji_one/bow_and_arrow.png b/public/images/emoji/emoji_one/bow_and_arrow.png
new file mode 100644
index 0000000000..6a8fa6984e
Binary files /dev/null and b/public/images/emoji/emoji_one/bow_and_arrow.png differ
diff --git a/public/images/emoji/emoji_one/burrito.png b/public/images/emoji/emoji_one/burrito.png
new file mode 100644
index 0000000000..ec7bd0cd2a
Binary files /dev/null and b/public/images/emoji/emoji_one/burrito.png differ
diff --git a/public/images/emoji/emoji_one/calendar_spiral.png b/public/images/emoji/emoji_one/calendar_spiral.png
new file mode 100644
index 0000000000..d9c5f699d2
Binary files /dev/null and b/public/images/emoji/emoji_one/calendar_spiral.png differ
diff --git a/public/images/emoji/emoji_one/camera_with_flash.png b/public/images/emoji/emoji_one/camera_with_flash.png
new file mode 100644
index 0000000000..6ea04f7719
Binary files /dev/null and b/public/images/emoji/emoji_one/camera_with_flash.png differ
diff --git a/public/images/emoji/emoji_one/camping.png b/public/images/emoji/emoji_one/camping.png
new file mode 100644
index 0000000000..943c8fc7d0
Binary files /dev/null and b/public/images/emoji/emoji_one/camping.png differ
diff --git a/public/images/emoji/emoji_one/candle.png b/public/images/emoji/emoji_one/candle.png
new file mode 100644
index 0000000000..11bc738701
Binary files /dev/null and b/public/images/emoji/emoji_one/candle.png differ
diff --git a/public/images/emoji/emoji_one/card_box.png b/public/images/emoji/emoji_one/card_box.png
new file mode 100644
index 0000000000..3fd527452d
Binary files /dev/null and b/public/images/emoji/emoji_one/card_box.png differ
diff --git a/public/images/emoji/emoji_one/chains.png b/public/images/emoji/emoji_one/chains.png
new file mode 100644
index 0000000000..d743480f98
Binary files /dev/null and b/public/images/emoji/emoji_one/chains.png differ
diff --git a/public/images/emoji/emoji_one/champagne.png b/public/images/emoji/emoji_one/champagne.png
new file mode 100644
index 0000000000..56e394220c
Binary files /dev/null and b/public/images/emoji/emoji_one/champagne.png differ
diff --git a/public/images/emoji/emoji_one/cheese.png b/public/images/emoji/emoji_one/cheese.png
new file mode 100644
index 0000000000..a9ed4b2e0d
Binary files /dev/null and b/public/images/emoji/emoji_one/cheese.png differ
diff --git a/public/images/emoji/emoji_one/chipmunk.png b/public/images/emoji/emoji_one/chipmunk.png
new file mode 100644
index 0000000000..3c809f36a0
Binary files /dev/null and b/public/images/emoji/emoji_one/chipmunk.png differ
diff --git a/public/images/emoji/emoji_one/city_dusk.png b/public/images/emoji/emoji_one/city_dusk.png
new file mode 100644
index 0000000000..27ef7c850d
Binary files /dev/null and b/public/images/emoji/emoji_one/city_dusk.png differ
diff --git a/public/images/emoji/emoji_one/cityscape.png b/public/images/emoji/emoji_one/cityscape.png
new file mode 100644
index 0000000000..f5e3089acb
Binary files /dev/null and b/public/images/emoji/emoji_one/cityscape.png differ
diff --git a/public/images/emoji/emoji_one/classical_building.png b/public/images/emoji/emoji_one/classical_building.png
new file mode 100644
index 0000000000..1950bec035
Binary files /dev/null and b/public/images/emoji/emoji_one/classical_building.png differ
diff --git a/public/images/emoji/emoji_one/clock.png b/public/images/emoji/emoji_one/clock.png
new file mode 100644
index 0000000000..a65722fd41
Binary files /dev/null and b/public/images/emoji/emoji_one/clock.png differ
diff --git a/public/images/emoji/emoji_one/cloud_lightning.png b/public/images/emoji/emoji_one/cloud_lightning.png
new file mode 100644
index 0000000000..a199f6e883
Binary files /dev/null and b/public/images/emoji/emoji_one/cloud_lightning.png differ
diff --git a/public/images/emoji/emoji_one/cloud_rain.png b/public/images/emoji/emoji_one/cloud_rain.png
new file mode 100644
index 0000000000..d285e3f759
Binary files /dev/null and b/public/images/emoji/emoji_one/cloud_rain.png differ
diff --git a/public/images/emoji/emoji_one/cloud_snow.png b/public/images/emoji/emoji_one/cloud_snow.png
new file mode 100644
index 0000000000..e0cc8c4acb
Binary files /dev/null and b/public/images/emoji/emoji_one/cloud_snow.png differ
diff --git a/public/images/emoji/emoji_one/cloud_tornado.png b/public/images/emoji/emoji_one/cloud_tornado.png
new file mode 100644
index 0000000000..00bb97ae09
Binary files /dev/null and b/public/images/emoji/emoji_one/cloud_tornado.png differ
diff --git a/public/images/emoji/emoji_one/coffin.png b/public/images/emoji/emoji_one/coffin.png
new file mode 100644
index 0000000000..f38c07847e
Binary files /dev/null and b/public/images/emoji/emoji_one/coffin.png differ
diff --git a/public/images/emoji/emoji_one/comet.png b/public/images/emoji/emoji_one/comet.png
new file mode 100644
index 0000000000..6d27243697
Binary files /dev/null and b/public/images/emoji/emoji_one/comet.png differ
diff --git a/public/images/emoji/emoji_one/compression.png b/public/images/emoji/emoji_one/compression.png
new file mode 100644
index 0000000000..86f9362923
Binary files /dev/null and b/public/images/emoji/emoji_one/compression.png differ
diff --git a/public/images/emoji/emoji_one/construction_site.png b/public/images/emoji/emoji_one/construction_site.png
new file mode 100644
index 0000000000..04d111a6f4
Binary files /dev/null and b/public/images/emoji/emoji_one/construction_site.png differ
diff --git a/public/images/emoji/emoji_one/control_knobs.png b/public/images/emoji/emoji_one/control_knobs.png
new file mode 100644
index 0000000000..1a3ae01fb7
Binary files /dev/null and b/public/images/emoji/emoji_one/control_knobs.png differ
diff --git a/public/images/emoji/emoji_one/couch.png b/public/images/emoji/emoji_one/couch.png
new file mode 100644
index 0000000000..95676c09e8
Binary files /dev/null and b/public/images/emoji/emoji_one/couch.png differ
diff --git a/public/images/emoji/emoji_one/crab.png b/public/images/emoji/emoji_one/crab.png
new file mode 100644
index 0000000000..04374656af
Binary files /dev/null and b/public/images/emoji/emoji_one/crab.png differ
diff --git a/public/images/emoji/emoji_one/crayon.png b/public/images/emoji/emoji_one/crayon.png
new file mode 100644
index 0000000000..67043e2a21
Binary files /dev/null and b/public/images/emoji/emoji_one/crayon.png differ
diff --git a/public/images/emoji/emoji_one/cricket.png b/public/images/emoji/emoji_one/cricket.png
new file mode 100644
index 0000000000..2e20bfcd03
Binary files /dev/null and b/public/images/emoji/emoji_one/cricket.png differ
diff --git a/public/images/emoji/emoji_one/cross.png b/public/images/emoji/emoji_one/cross.png
new file mode 100644
index 0000000000..02a0842181
Binary files /dev/null and b/public/images/emoji/emoji_one/cross.png differ
diff --git a/public/images/emoji/emoji_one/crossed_swords.png b/public/images/emoji/emoji_one/crossed_swords.png
new file mode 100644
index 0000000000..7e992fa3c3
Binary files /dev/null and b/public/images/emoji/emoji_one/crossed_swords.png differ
diff --git a/public/images/emoji/emoji_one/cruise_ship.png b/public/images/emoji/emoji_one/cruise_ship.png
new file mode 100644
index 0000000000..7427136779
Binary files /dev/null and b/public/images/emoji/emoji_one/cruise_ship.png differ
diff --git a/public/images/emoji/emoji_one/dagger.png b/public/images/emoji/emoji_one/dagger.png
new file mode 100644
index 0000000000..4093ea9fce
Binary files /dev/null and b/public/images/emoji/emoji_one/dagger.png differ
diff --git a/public/images/emoji/emoji_one/dark_sunglasses.png b/public/images/emoji/emoji_one/dark_sunglasses.png
new file mode 100644
index 0000000000..cd95402d6e
Binary files /dev/null and b/public/images/emoji/emoji_one/dark_sunglasses.png differ
diff --git a/public/images/emoji/emoji_one/desert.png b/public/images/emoji/emoji_one/desert.png
new file mode 100644
index 0000000000..a548ec13c0
Binary files /dev/null and b/public/images/emoji/emoji_one/desert.png differ
diff --git a/public/images/emoji/emoji_one/desktop.png b/public/images/emoji/emoji_one/desktop.png
new file mode 100644
index 0000000000..0bb0db8794
Binary files /dev/null and b/public/images/emoji/emoji_one/desktop.png differ
diff --git a/public/images/emoji/emoji_one/dividers.png b/public/images/emoji/emoji_one/dividers.png
new file mode 100644
index 0000000000..8f162232c1
Binary files /dev/null and b/public/images/emoji/emoji_one/dividers.png differ
diff --git a/public/images/emoji/emoji_one/dove.png b/public/images/emoji/emoji_one/dove.png
new file mode 100644
index 0000000000..88ddff7a6c
Binary files /dev/null and b/public/images/emoji/emoji_one/dove.png differ
diff --git a/public/images/emoji/emoji_one/eye.png b/public/images/emoji/emoji_one/eye.png
new file mode 100644
index 0000000000..9a71b46700
Binary files /dev/null and b/public/images/emoji/emoji_one/eye.png differ
diff --git a/public/images/emoji/emoji_one/ferry.png b/public/images/emoji/emoji_one/ferry.png
new file mode 100644
index 0000000000..a4a8793c9b
Binary files /dev/null and b/public/images/emoji/emoji_one/ferry.png differ
diff --git a/public/images/emoji/emoji_one/field_hockey.png b/public/images/emoji/emoji_one/field_hockey.png
new file mode 100644
index 0000000000..f4f8066009
Binary files /dev/null and b/public/images/emoji/emoji_one/field_hockey.png differ
diff --git a/public/images/emoji/emoji_one/file_cabinet.png b/public/images/emoji/emoji_one/file_cabinet.png
new file mode 100644
index 0000000000..c26b487c00
Binary files /dev/null and b/public/images/emoji/emoji_one/file_cabinet.png differ
diff --git a/public/images/emoji/emoji_one/film_frames.png b/public/images/emoji/emoji_one/film_frames.png
new file mode 100644
index 0000000000..6d4307f187
Binary files /dev/null and b/public/images/emoji/emoji_one/film_frames.png differ
diff --git a/public/images/emoji/emoji_one/flag_black.png b/public/images/emoji/emoji_one/flag_black.png
new file mode 100644
index 0000000000..22df4375be
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_black.png differ
diff --git a/public/images/emoji/emoji_one/flag_cn.png b/public/images/emoji/emoji_one/flag_cn.png
new file mode 100644
index 0000000000..98ecf053cf
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_cn.png differ
diff --git a/public/images/emoji/emoji_one/flag_de.png b/public/images/emoji/emoji_one/flag_de.png
new file mode 100644
index 0000000000..3991db99bd
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_de.png differ
diff --git a/public/images/emoji/emoji_one/flag_es.png b/public/images/emoji/emoji_one/flag_es.png
new file mode 100644
index 0000000000..00a7ac17cb
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_es.png differ
diff --git a/public/images/emoji/emoji_one/flag_fr.png b/public/images/emoji/emoji_one/flag_fr.png
new file mode 100644
index 0000000000..58ae8bb0ce
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_fr.png differ
diff --git a/public/images/emoji/emoji_one/flag_gb.png b/public/images/emoji/emoji_one/flag_gb.png
new file mode 100644
index 0000000000..594fda36ae
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_gb.png differ
diff --git a/public/images/emoji/emoji_one/flag_it.png b/public/images/emoji/emoji_one/flag_it.png
new file mode 100644
index 0000000000..4f55dfdc76
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_it.png differ
diff --git a/public/images/emoji/emoji_one/flag_jp.png b/public/images/emoji/emoji_one/flag_jp.png
new file mode 100644
index 0000000000..1860a8644e
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_jp.png differ
diff --git a/public/images/emoji/emoji_one/flag_kr.png b/public/images/emoji/emoji_one/flag_kr.png
new file mode 100644
index 0000000000..3dc0748e7f
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_kr.png differ
diff --git a/public/images/emoji/emoji_one/flag_ru.png b/public/images/emoji/emoji_one/flag_ru.png
new file mode 100644
index 0000000000..472ba846d8
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_ru.png differ
diff --git a/public/images/emoji/emoji_one/flag_us.png b/public/images/emoji/emoji_one/flag_us.png
new file mode 100644
index 0000000000..4c41fbbaa6
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_us.png differ
diff --git a/public/images/emoji/emoji_one/flag_white.png b/public/images/emoji/emoji_one/flag_white.png
new file mode 100644
index 0000000000..a6b355cf74
Binary files /dev/null and b/public/images/emoji/emoji_one/flag_white.png differ
diff --git a/public/images/emoji/emoji_one/fleur-de-lis.png b/public/images/emoji/emoji_one/fleur-de-lis.png
new file mode 100644
index 0000000000..d802f1d582
Binary files /dev/null and b/public/images/emoji/emoji_one/fleur-de-lis.png differ
diff --git a/public/images/emoji/emoji_one/fog.png b/public/images/emoji/emoji_one/fog.png
new file mode 100644
index 0000000000..7bd54ed1dd
Binary files /dev/null and b/public/images/emoji/emoji_one/fog.png differ
diff --git a/public/images/emoji/emoji_one/fork_knife_plate.png b/public/images/emoji/emoji_one/fork_knife_plate.png
new file mode 100644
index 0000000000..4174200d93
Binary files /dev/null and b/public/images/emoji/emoji_one/fork_knife_plate.png differ
diff --git a/public/images/emoji/emoji_one/frame_photo.png b/public/images/emoji/emoji_one/frame_photo.png
new file mode 100644
index 0000000000..508116dfcb
Binary files /dev/null and b/public/images/emoji/emoji_one/frame_photo.png differ
diff --git a/public/images/emoji/emoji_one/frowning2.png b/public/images/emoji/emoji_one/frowning2.png
new file mode 100644
index 0000000000..353b28360e
Binary files /dev/null and b/public/images/emoji/emoji_one/frowning2.png differ
diff --git a/public/images/emoji/emoji_one/gear.png b/public/images/emoji/emoji_one/gear.png
new file mode 100644
index 0000000000..fede124a4a
Binary files /dev/null and b/public/images/emoji/emoji_one/gear.png differ
diff --git a/public/images/emoji/emoji_one/golfer.png b/public/images/emoji/emoji_one/golfer.png
new file mode 100644
index 0000000000..54d2c8aa87
Binary files /dev/null and b/public/images/emoji/emoji_one/golfer.png differ
diff --git a/public/images/emoji/emoji_one/hammer_pick.png b/public/images/emoji/emoji_one/hammer_pick.png
new file mode 100644
index 0000000000..3b7bb9dbe0
Binary files /dev/null and b/public/images/emoji/emoji_one/hammer_pick.png differ
diff --git a/public/images/emoji/emoji_one/hand_splayed.png b/public/images/emoji/emoji_one/hand_splayed.png
new file mode 100644
index 0000000000..c08b63bf04
Binary files /dev/null and b/public/images/emoji/emoji_one/hand_splayed.png differ
diff --git a/public/images/emoji/emoji_one/head_bandage.png b/public/images/emoji/emoji_one/head_bandage.png
new file mode 100644
index 0000000000..b249b12768
Binary files /dev/null and b/public/images/emoji/emoji_one/head_bandage.png differ
diff --git a/public/images/emoji/emoji_one/heart_exclamation.png b/public/images/emoji/emoji_one/heart_exclamation.png
new file mode 100644
index 0000000000..be54295cc8
Binary files /dev/null and b/public/images/emoji/emoji_one/heart_exclamation.png differ
diff --git a/public/images/emoji/emoji_one/helmet_with_cross.png b/public/images/emoji/emoji_one/helmet_with_cross.png
new file mode 100644
index 0000000000..22efa363c9
Binary files /dev/null and b/public/images/emoji/emoji_one/helmet_with_cross.png differ
diff --git a/public/images/emoji/emoji_one/hockey.png b/public/images/emoji/emoji_one/hockey.png
new file mode 100644
index 0000000000..464a11003a
Binary files /dev/null and b/public/images/emoji/emoji_one/hockey.png differ
diff --git a/public/images/emoji/emoji_one/hole.png b/public/images/emoji/emoji_one/hole.png
new file mode 100644
index 0000000000..19e228f662
Binary files /dev/null and b/public/images/emoji/emoji_one/hole.png differ
diff --git a/public/images/emoji/emoji_one/homes.png b/public/images/emoji/emoji_one/homes.png
new file mode 100644
index 0000000000..77fd2f37f1
Binary files /dev/null and b/public/images/emoji/emoji_one/homes.png differ
diff --git a/public/images/emoji/emoji_one/hot_pepper.png b/public/images/emoji/emoji_one/hot_pepper.png
new file mode 100644
index 0000000000..e8c0fa8621
Binary files /dev/null and b/public/images/emoji/emoji_one/hot_pepper.png differ
diff --git a/public/images/emoji/emoji_one/hotdog.png b/public/images/emoji/emoji_one/hotdog.png
new file mode 100644
index 0000000000..224b69ae2f
Binary files /dev/null and b/public/images/emoji/emoji_one/hotdog.png differ
diff --git a/public/images/emoji/emoji_one/house_abandoned.png b/public/images/emoji/emoji_one/house_abandoned.png
new file mode 100644
index 0000000000..0a10ee267e
Binary files /dev/null and b/public/images/emoji/emoji_one/house_abandoned.png differ
diff --git a/public/images/emoji/emoji_one/hugging.png b/public/images/emoji/emoji_one/hugging.png
new file mode 100644
index 0000000000..d1a7725abf
Binary files /dev/null and b/public/images/emoji/emoji_one/hugging.png differ
diff --git a/public/images/emoji/emoji_one/ice_skate.png b/public/images/emoji/emoji_one/ice_skate.png
new file mode 100644
index 0000000000..40e307241a
Binary files /dev/null and b/public/images/emoji/emoji_one/ice_skate.png differ
diff --git a/public/images/emoji/emoji_one/island.png b/public/images/emoji/emoji_one/island.png
new file mode 100644
index 0000000000..bbb88f6e26
Binary files /dev/null and b/public/images/emoji/emoji_one/island.png differ
diff --git a/public/images/emoji/emoji_one/joystick.png b/public/images/emoji/emoji_one/joystick.png
new file mode 100644
index 0000000000..3d2e5b8f43
Binary files /dev/null and b/public/images/emoji/emoji_one/joystick.png differ
diff --git a/public/images/emoji/emoji_one/kaaba.png b/public/images/emoji/emoji_one/kaaba.png
new file mode 100644
index 0000000000..47ee22a82b
Binary files /dev/null and b/public/images/emoji/emoji_one/kaaba.png differ
diff --git a/public/images/emoji/emoji_one/key2.png b/public/images/emoji/emoji_one/key2.png
new file mode 100644
index 0000000000..7dc9ba58e4
Binary files /dev/null and b/public/images/emoji/emoji_one/key2.png differ
diff --git a/public/images/emoji/emoji_one/keyboard.png b/public/images/emoji/emoji_one/keyboard.png
new file mode 100644
index 0000000000..38ac5cb3f5
Binary files /dev/null and b/public/images/emoji/emoji_one/keyboard.png differ
diff --git a/public/images/emoji/emoji_one/label.png b/public/images/emoji/emoji_one/label.png
new file mode 100644
index 0000000000..16efa7a6f5
Binary files /dev/null and b/public/images/emoji/emoji_one/label.png differ
diff --git a/public/images/emoji/emoji_one/level_slider.png b/public/images/emoji/emoji_one/level_slider.png
new file mode 100644
index 0000000000..b436f72973
Binary files /dev/null and b/public/images/emoji/emoji_one/level_slider.png differ
diff --git a/public/images/emoji/emoji_one/levitate.png b/public/images/emoji/emoji_one/levitate.png
new file mode 100644
index 0000000000..7c2517d75a
Binary files /dev/null and b/public/images/emoji/emoji_one/levitate.png differ
diff --git a/public/images/emoji/emoji_one/lifter.png b/public/images/emoji/emoji_one/lifter.png
new file mode 100644
index 0000000000..3e52cf7e3e
Binary files /dev/null and b/public/images/emoji/emoji_one/lifter.png differ
diff --git a/public/images/emoji/emoji_one/lion_face.png b/public/images/emoji/emoji_one/lion_face.png
new file mode 100644
index 0000000000..fc03a057db
Binary files /dev/null and b/public/images/emoji/emoji_one/lion_face.png differ
diff --git a/public/images/emoji/emoji_one/map.png b/public/images/emoji/emoji_one/map.png
new file mode 100644
index 0000000000..fe9c43d924
Binary files /dev/null and b/public/images/emoji/emoji_one/map.png differ
diff --git a/public/images/emoji/emoji_one/medal.png b/public/images/emoji/emoji_one/medal.png
new file mode 100644
index 0000000000..280bc07a91
Binary files /dev/null and b/public/images/emoji/emoji_one/medal.png differ
diff --git a/public/images/emoji/emoji_one/menorah.png b/public/images/emoji/emoji_one/menorah.png
new file mode 100644
index 0000000000..b6a5b0b59e
Binary files /dev/null and b/public/images/emoji/emoji_one/menorah.png differ
diff --git a/public/images/emoji/emoji_one/metal.png b/public/images/emoji/emoji_one/metal.png
new file mode 100644
index 0000000000..a653d61904
Binary files /dev/null and b/public/images/emoji/emoji_one/metal.png differ
diff --git a/public/images/emoji/emoji_one/microphone2.png b/public/images/emoji/emoji_one/microphone2.png
new file mode 100644
index 0000000000..9948996441
Binary files /dev/null and b/public/images/emoji/emoji_one/microphone2.png differ
diff --git a/public/images/emoji/emoji_one/middle_finger.png b/public/images/emoji/emoji_one/middle_finger.png
new file mode 100644
index 0000000000..014e172555
Binary files /dev/null and b/public/images/emoji/emoji_one/middle_finger.png differ
diff --git a/public/images/emoji/emoji_one/military_medal.png b/public/images/emoji/emoji_one/military_medal.png
new file mode 100644
index 0000000000..a42f53c56c
Binary files /dev/null and b/public/images/emoji/emoji_one/military_medal.png differ
diff --git a/public/images/emoji/emoji_one/money_mouth.png b/public/images/emoji/emoji_one/money_mouth.png
new file mode 100644
index 0000000000..e2b81259a6
Binary files /dev/null and b/public/images/emoji/emoji_one/money_mouth.png differ
diff --git a/public/images/emoji/emoji_one/mosque.png b/public/images/emoji/emoji_one/mosque.png
new file mode 100644
index 0000000000..4e3dd287c5
Binary files /dev/null and b/public/images/emoji/emoji_one/mosque.png differ
diff --git a/public/images/emoji/emoji_one/motorboat.png b/public/images/emoji/emoji_one/motorboat.png
new file mode 100644
index 0000000000..12a63b3f68
Binary files /dev/null and b/public/images/emoji/emoji_one/motorboat.png differ
diff --git a/public/images/emoji/emoji_one/motorcycle.png b/public/images/emoji/emoji_one/motorcycle.png
new file mode 100644
index 0000000000..45c7567a41
Binary files /dev/null and b/public/images/emoji/emoji_one/motorcycle.png differ
diff --git a/public/images/emoji/emoji_one/motorway.png b/public/images/emoji/emoji_one/motorway.png
new file mode 100644
index 0000000000..4b54f99ee2
Binary files /dev/null and b/public/images/emoji/emoji_one/motorway.png differ
diff --git a/public/images/emoji/emoji_one/mountain.png b/public/images/emoji/emoji_one/mountain.png
new file mode 100644
index 0000000000..fc1ca084b7
Binary files /dev/null and b/public/images/emoji/emoji_one/mountain.png differ
diff --git a/public/images/emoji/emoji_one/mountain_snow.png b/public/images/emoji/emoji_one/mountain_snow.png
new file mode 100644
index 0000000000..0684e4ce6d
Binary files /dev/null and b/public/images/emoji/emoji_one/mountain_snow.png differ
diff --git a/public/images/emoji/emoji_one/mouse_three_button.png b/public/images/emoji/emoji_one/mouse_three_button.png
new file mode 100644
index 0000000000..5eb22b18a8
Binary files /dev/null and b/public/images/emoji/emoji_one/mouse_three_button.png differ
diff --git a/public/images/emoji/emoji_one/nerd.png b/public/images/emoji/emoji_one/nerd.png
new file mode 100644
index 0000000000..0861d21f60
Binary files /dev/null and b/public/images/emoji/emoji_one/nerd.png differ
diff --git a/public/images/emoji/emoji_one/newspaper2.png b/public/images/emoji/emoji_one/newspaper2.png
new file mode 100644
index 0000000000..ef62361f06
Binary files /dev/null and b/public/images/emoji/emoji_one/newspaper2.png differ
diff --git a/public/images/emoji/emoji_one/notepad_spiral.png b/public/images/emoji/emoji_one/notepad_spiral.png
new file mode 100644
index 0000000000..4d29c1ec0f
Binary files /dev/null and b/public/images/emoji/emoji_one/notepad_spiral.png differ
diff --git a/public/images/emoji/emoji_one/oil.png b/public/images/emoji/emoji_one/oil.png
new file mode 100644
index 0000000000..8c00bde733
Binary files /dev/null and b/public/images/emoji/emoji_one/oil.png differ
diff --git a/public/images/emoji/emoji_one/om_symbol.png b/public/images/emoji/emoji_one/om_symbol.png
new file mode 100644
index 0000000000..badf010f07
Binary files /dev/null and b/public/images/emoji/emoji_one/om_symbol.png differ
diff --git a/public/images/emoji/emoji_one/orthodox_cross.png b/public/images/emoji/emoji_one/orthodox_cross.png
new file mode 100644
index 0000000000..79e13464ab
Binary files /dev/null and b/public/images/emoji/emoji_one/orthodox_cross.png differ
diff --git a/public/images/emoji/emoji_one/paintbrush.png b/public/images/emoji/emoji_one/paintbrush.png
new file mode 100644
index 0000000000..7f8ae7efd7
Binary files /dev/null and b/public/images/emoji/emoji_one/paintbrush.png differ
diff --git a/public/images/emoji/emoji_one/paperclips.png b/public/images/emoji/emoji_one/paperclips.png
new file mode 100644
index 0000000000..3c086978d3
Binary files /dev/null and b/public/images/emoji/emoji_one/paperclips.png differ
diff --git a/public/images/emoji/emoji_one/park.png b/public/images/emoji/emoji_one/park.png
new file mode 100644
index 0000000000..f2c8362c39
Binary files /dev/null and b/public/images/emoji/emoji_one/park.png differ
diff --git a/public/images/emoji/emoji_one/pause_button.png b/public/images/emoji/emoji_one/pause_button.png
new file mode 100644
index 0000000000..b66c56af7b
Binary files /dev/null and b/public/images/emoji/emoji_one/pause_button.png differ
diff --git a/public/images/emoji/emoji_one/peace.png b/public/images/emoji/emoji_one/peace.png
new file mode 100644
index 0000000000..556d48acaa
Binary files /dev/null and b/public/images/emoji/emoji_one/peace.png differ
diff --git a/public/images/emoji/emoji_one/pen_ballpoint.png b/public/images/emoji/emoji_one/pen_ballpoint.png
new file mode 100644
index 0000000000..c6d87b9fb2
Binary files /dev/null and b/public/images/emoji/emoji_one/pen_ballpoint.png differ
diff --git a/public/images/emoji/emoji_one/pen_fountain.png b/public/images/emoji/emoji_one/pen_fountain.png
new file mode 100644
index 0000000000..0b11b69de7
Binary files /dev/null and b/public/images/emoji/emoji_one/pen_fountain.png differ
diff --git a/public/images/emoji/emoji_one/pick.png b/public/images/emoji/emoji_one/pick.png
new file mode 100644
index 0000000000..c7f116e236
Binary files /dev/null and b/public/images/emoji/emoji_one/pick.png differ
diff --git a/public/images/emoji/emoji_one/ping_pong.png b/public/images/emoji/emoji_one/ping_pong.png
new file mode 100644
index 0000000000..5bb1f058be
Binary files /dev/null and b/public/images/emoji/emoji_one/ping_pong.png differ
diff --git a/public/images/emoji/emoji_one/place_of_worship.png b/public/images/emoji/emoji_one/place_of_worship.png
new file mode 100644
index 0000000000..6ae5d822a6
Binary files /dev/null and b/public/images/emoji/emoji_one/place_of_worship.png differ
diff --git a/public/images/emoji/emoji_one/play_pause.png b/public/images/emoji/emoji_one/play_pause.png
new file mode 100644
index 0000000000..617619659c
Binary files /dev/null and b/public/images/emoji/emoji_one/play_pause.png differ
diff --git a/public/images/emoji/emoji_one/popcorn.png b/public/images/emoji/emoji_one/popcorn.png
new file mode 100644
index 0000000000..d0e482bcc4
Binary files /dev/null and b/public/images/emoji/emoji_one/popcorn.png differ
diff --git a/public/images/emoji/emoji_one/prayer_beads.png b/public/images/emoji/emoji_one/prayer_beads.png
new file mode 100644
index 0000000000..40da4878b7
Binary files /dev/null and b/public/images/emoji/emoji_one/prayer_beads.png differ
diff --git a/public/images/emoji/emoji_one/printer.png b/public/images/emoji/emoji_one/printer.png
new file mode 100644
index 0000000000..a314326739
Binary files /dev/null and b/public/images/emoji/emoji_one/printer.png differ
diff --git a/public/images/emoji/emoji_one/projector.png b/public/images/emoji/emoji_one/projector.png
new file mode 100644
index 0000000000..fa46ba0a29
Binary files /dev/null and b/public/images/emoji/emoji_one/projector.png differ
diff --git a/public/images/emoji/emoji_one/race_car.png b/public/images/emoji/emoji_one/race_car.png
new file mode 100644
index 0000000000..4b094c2660
Binary files /dev/null and b/public/images/emoji/emoji_one/race_car.png differ
diff --git a/public/images/emoji/emoji_one/radioactive.png b/public/images/emoji/emoji_one/radioactive.png
new file mode 100644
index 0000000000..cac4064d43
Binary files /dev/null and b/public/images/emoji/emoji_one/radioactive.png differ
diff --git a/public/images/emoji/emoji_one/railway_track.png b/public/images/emoji/emoji_one/railway_track.png
new file mode 100644
index 0000000000..641cbe2cba
Binary files /dev/null and b/public/images/emoji/emoji_one/railway_track.png differ
diff --git a/public/images/emoji/emoji_one/record_button.png b/public/images/emoji/emoji_one/record_button.png
new file mode 100644
index 0000000000..b62b87170e
Binary files /dev/null and b/public/images/emoji/emoji_one/record_button.png differ
diff --git a/public/images/emoji/emoji_one/reminder_ribbon.png b/public/images/emoji/emoji_one/reminder_ribbon.png
new file mode 100644
index 0000000000..c9267457ff
Binary files /dev/null and b/public/images/emoji/emoji_one/reminder_ribbon.png differ
diff --git a/public/images/emoji/emoji_one/robot.png b/public/images/emoji/emoji_one/robot.png
new file mode 100644
index 0000000000..cdbad6d12d
Binary files /dev/null and b/public/images/emoji/emoji_one/robot.png differ
diff --git a/public/images/emoji/emoji_one/rolling_eyes.png b/public/images/emoji/emoji_one/rolling_eyes.png
new file mode 100644
index 0000000000..da716bbca1
Binary files /dev/null and b/public/images/emoji/emoji_one/rolling_eyes.png differ
diff --git a/public/images/emoji/emoji_one/rosette.png b/public/images/emoji/emoji_one/rosette.png
new file mode 100644
index 0000000000..9180c9d4dd
Binary files /dev/null and b/public/images/emoji/emoji_one/rosette.png differ
diff --git a/public/images/emoji/emoji_one/satellite_orbital.png b/public/images/emoji/emoji_one/satellite_orbital.png
new file mode 100644
index 0000000000..a0d8127853
Binary files /dev/null and b/public/images/emoji/emoji_one/satellite_orbital.png differ
diff --git a/public/images/emoji/emoji_one/scales.png b/public/images/emoji/emoji_one/scales.png
new file mode 100644
index 0000000000..3c88977da8
Binary files /dev/null and b/public/images/emoji/emoji_one/scales.png differ
diff --git a/public/images/emoji/emoji_one/scorpion.png b/public/images/emoji/emoji_one/scorpion.png
new file mode 100644
index 0000000000..a8fec65a5b
Binary files /dev/null and b/public/images/emoji/emoji_one/scorpion.png differ
diff --git a/public/images/emoji/emoji_one/shamrock.png b/public/images/emoji/emoji_one/shamrock.png
new file mode 100644
index 0000000000..a14f158f7f
Binary files /dev/null and b/public/images/emoji/emoji_one/shamrock.png differ
diff --git a/public/images/emoji/emoji_one/shield.png b/public/images/emoji/emoji_one/shield.png
new file mode 100644
index 0000000000..caa71afde7
Binary files /dev/null and b/public/images/emoji/emoji_one/shield.png differ
diff --git a/public/images/emoji/emoji_one/shinto_shrine.png b/public/images/emoji/emoji_one/shinto_shrine.png
new file mode 100644
index 0000000000..25366b5c5c
Binary files /dev/null and b/public/images/emoji/emoji_one/shinto_shrine.png differ
diff --git a/public/images/emoji/emoji_one/shopping_bags.png b/public/images/emoji/emoji_one/shopping_bags.png
new file mode 100644
index 0000000000..08c37ca907
Binary files /dev/null and b/public/images/emoji/emoji_one/shopping_bags.png differ
diff --git a/public/images/emoji/emoji_one/skier.png b/public/images/emoji/emoji_one/skier.png
new file mode 100644
index 0000000000..9000b55db4
Binary files /dev/null and b/public/images/emoji/emoji_one/skier.png differ
diff --git a/public/images/emoji/emoji_one/skull_crossbones.png b/public/images/emoji/emoji_one/skull_crossbones.png
new file mode 100644
index 0000000000..08105bf1cc
Binary files /dev/null and b/public/images/emoji/emoji_one/skull_crossbones.png differ
diff --git a/public/images/emoji/emoji_one/sleeping_accommodation.png b/public/images/emoji/emoji_one/sleeping_accommodation.png
new file mode 100644
index 0000000000..cd5399bf1e
Binary files /dev/null and b/public/images/emoji/emoji_one/sleeping_accommodation.png differ
diff --git a/public/images/emoji/emoji_one/slight_frown.png b/public/images/emoji/emoji_one/slight_frown.png
new file mode 100644
index 0000000000..0325955e3c
Binary files /dev/null and b/public/images/emoji/emoji_one/slight_frown.png differ
diff --git a/public/images/emoji/emoji_one/slight_smile.png b/public/images/emoji/emoji_one/slight_smile.png
new file mode 100644
index 0000000000..0417e8db99
Binary files /dev/null and b/public/images/emoji/emoji_one/slight_smile.png differ
diff --git a/public/images/emoji/emoji_one/snowman2.png b/public/images/emoji/emoji_one/snowman2.png
new file mode 100644
index 0000000000..d4a0c9e0d9
Binary files /dev/null and b/public/images/emoji/emoji_one/snowman2.png differ
diff --git a/public/images/emoji/emoji_one/speaking_head.png b/public/images/emoji/emoji_one/speaking_head.png
new file mode 100644
index 0000000000..6fe847e3a2
Binary files /dev/null and b/public/images/emoji/emoji_one/speaking_head.png differ
diff --git a/public/images/emoji/emoji_one/spider.png b/public/images/emoji/emoji_one/spider.png
new file mode 100644
index 0000000000..3dc4af311d
Binary files /dev/null and b/public/images/emoji/emoji_one/spider.png differ
diff --git a/public/images/emoji/emoji_one/spider_web.png b/public/images/emoji/emoji_one/spider_web.png
new file mode 100644
index 0000000000..9eaa5dcddb
Binary files /dev/null and b/public/images/emoji/emoji_one/spider_web.png differ
diff --git a/public/images/emoji/emoji_one/spy.png b/public/images/emoji/emoji_one/spy.png
new file mode 100644
index 0000000000..057a54743e
Binary files /dev/null and b/public/images/emoji/emoji_one/spy.png differ
diff --git a/public/images/emoji/emoji_one/stadium.png b/public/images/emoji/emoji_one/stadium.png
new file mode 100644
index 0000000000..e1c2547420
Binary files /dev/null and b/public/images/emoji/emoji_one/stadium.png differ
diff --git a/public/images/emoji/emoji_one/star_and_crescent.png b/public/images/emoji/emoji_one/star_and_crescent.png
new file mode 100644
index 0000000000..c5f8c7cd06
Binary files /dev/null and b/public/images/emoji/emoji_one/star_and_crescent.png differ
diff --git a/public/images/emoji/emoji_one/star_of_david.png b/public/images/emoji/emoji_one/star_of_david.png
new file mode 100644
index 0000000000..73d3f921cb
Binary files /dev/null and b/public/images/emoji/emoji_one/star_of_david.png differ
diff --git a/public/images/emoji/emoji_one/stop_button.png b/public/images/emoji/emoji_one/stop_button.png
new file mode 100644
index 0000000000..66a8974323
Binary files /dev/null and b/public/images/emoji/emoji_one/stop_button.png differ
diff --git a/public/images/emoji/emoji_one/stopwatch.png b/public/images/emoji/emoji_one/stopwatch.png
new file mode 100644
index 0000000000..4d75528744
Binary files /dev/null and b/public/images/emoji/emoji_one/stopwatch.png differ
diff --git a/public/images/emoji/emoji_one/synagogue.png b/public/images/emoji/emoji_one/synagogue.png
new file mode 100644
index 0000000000..5b092e0174
Binary files /dev/null and b/public/images/emoji/emoji_one/synagogue.png differ
diff --git a/public/images/emoji/emoji_one/taco.png b/public/images/emoji/emoji_one/taco.png
new file mode 100644
index 0000000000..b3a126a781
Binary files /dev/null and b/public/images/emoji/emoji_one/taco.png differ
diff --git a/public/images/emoji/emoji_one/ten.png b/public/images/emoji/emoji_one/ten.png
new file mode 100644
index 0000000000..ea9109e26a
Binary files /dev/null and b/public/images/emoji/emoji_one/ten.png differ
diff --git a/public/images/emoji/emoji_one/thermometer.png b/public/images/emoji/emoji_one/thermometer.png
new file mode 100644
index 0000000000..b5568957ad
Binary files /dev/null and b/public/images/emoji/emoji_one/thermometer.png differ
diff --git a/public/images/emoji/emoji_one/thermometer_face.png b/public/images/emoji/emoji_one/thermometer_face.png
new file mode 100644
index 0000000000..0047a14560
Binary files /dev/null and b/public/images/emoji/emoji_one/thermometer_face.png differ
diff --git a/public/images/emoji/emoji_one/thinking.png b/public/images/emoji/emoji_one/thinking.png
new file mode 100644
index 0000000000..588362c874
Binary files /dev/null and b/public/images/emoji/emoji_one/thinking.png differ
diff --git a/public/images/emoji/emoji_one/thunder_cloud_rain.png b/public/images/emoji/emoji_one/thunder_cloud_rain.png
new file mode 100644
index 0000000000..ba43488b8e
Binary files /dev/null and b/public/images/emoji/emoji_one/thunder_cloud_rain.png differ
diff --git a/public/images/emoji/emoji_one/tickets.png b/public/images/emoji/emoji_one/tickets.png
new file mode 100644
index 0000000000..61866239d8
Binary files /dev/null and b/public/images/emoji/emoji_one/tickets.png differ
diff --git a/public/images/emoji/emoji_one/timer.png b/public/images/emoji/emoji_one/timer.png
new file mode 100644
index 0000000000..584922da25
Binary files /dev/null and b/public/images/emoji/emoji_one/timer.png differ
diff --git a/public/images/emoji/emoji_one/tools.png b/public/images/emoji/emoji_one/tools.png
new file mode 100644
index 0000000000..dfb667419d
Binary files /dev/null and b/public/images/emoji/emoji_one/tools.png differ
diff --git a/public/images/emoji/emoji_one/track_next.png b/public/images/emoji/emoji_one/track_next.png
new file mode 100644
index 0000000000..9bf5647f7f
Binary files /dev/null and b/public/images/emoji/emoji_one/track_next.png differ
diff --git a/public/images/emoji/emoji_one/track_previous.png b/public/images/emoji/emoji_one/track_previous.png
new file mode 100644
index 0000000000..1fd22e0f70
Binary files /dev/null and b/public/images/emoji/emoji_one/track_previous.png differ
diff --git a/public/images/emoji/emoji_one/trackball.png b/public/images/emoji/emoji_one/trackball.png
new file mode 100644
index 0000000000..a5d8244241
Binary files /dev/null and b/public/images/emoji/emoji_one/trackball.png differ
diff --git a/public/images/emoji/emoji_one/turkey.png b/public/images/emoji/emoji_one/turkey.png
new file mode 100644
index 0000000000..2a47cf2d1e
Binary files /dev/null and b/public/images/emoji/emoji_one/turkey.png differ
diff --git a/public/images/emoji/emoji_one/umbrella2.png b/public/images/emoji/emoji_one/umbrella2.png
new file mode 100644
index 0000000000..e1857c1fd7
Binary files /dev/null and b/public/images/emoji/emoji_one/umbrella2.png differ
diff --git a/public/images/emoji/emoji_one/unicorn.png b/public/images/emoji/emoji_one/unicorn.png
new file mode 100644
index 0000000000..dca45abbd5
Binary files /dev/null and b/public/images/emoji/emoji_one/unicorn.png differ
diff --git a/public/images/emoji/emoji_one/upside_down.png b/public/images/emoji/emoji_one/upside_down.png
new file mode 100644
index 0000000000..d097e4f97d
Binary files /dev/null and b/public/images/emoji/emoji_one/upside_down.png differ
diff --git a/public/images/emoji/emoji_one/urn.png b/public/images/emoji/emoji_one/urn.png
new file mode 100644
index 0000000000..9d934bad0c
Binary files /dev/null and b/public/images/emoji/emoji_one/urn.png differ
diff --git a/public/images/emoji/emoji_one/volleyball.png b/public/images/emoji/emoji_one/volleyball.png
new file mode 100644
index 0000000000..f93768a378
Binary files /dev/null and b/public/images/emoji/emoji_one/volleyball.png differ
diff --git a/public/images/emoji/emoji_one/vulcan.png b/public/images/emoji/emoji_one/vulcan.png
new file mode 100644
index 0000000000..21beed5b60
Binary files /dev/null and b/public/images/emoji/emoji_one/vulcan.png differ
diff --git a/public/images/emoji/emoji_one/wastebasket.png b/public/images/emoji/emoji_one/wastebasket.png
new file mode 100644
index 0000000000..952d9a962d
Binary files /dev/null and b/public/images/emoji/emoji_one/wastebasket.png differ
diff --git a/public/images/emoji/emoji_one/wheel_of_dharma.png b/public/images/emoji/emoji_one/wheel_of_dharma.png
new file mode 100644
index 0000000000..d6569d3a5e
Binary files /dev/null and b/public/images/emoji/emoji_one/wheel_of_dharma.png differ
diff --git a/public/images/emoji/emoji_one/white_sun_cloud.png b/public/images/emoji/emoji_one/white_sun_cloud.png
new file mode 100644
index 0000000000..461a1f85ba
Binary files /dev/null and b/public/images/emoji/emoji_one/white_sun_cloud.png differ
diff --git a/public/images/emoji/emoji_one/white_sun_rain_cloud.png b/public/images/emoji/emoji_one/white_sun_rain_cloud.png
new file mode 100644
index 0000000000..0d8475bbd0
Binary files /dev/null and b/public/images/emoji/emoji_one/white_sun_rain_cloud.png differ
diff --git a/public/images/emoji/emoji_one/white_sun_small_cloud.png b/public/images/emoji/emoji_one/white_sun_small_cloud.png
new file mode 100644
index 0000000000..403550e950
Binary files /dev/null and b/public/images/emoji/emoji_one/white_sun_small_cloud.png differ
diff --git a/public/images/emoji/emoji_one/wind_blowing_face.png b/public/images/emoji/emoji_one/wind_blowing_face.png
new file mode 100644
index 0000000000..6b933af8e7
Binary files /dev/null and b/public/images/emoji/emoji_one/wind_blowing_face.png differ
diff --git a/public/images/emoji/emoji_one/writing_hand.png b/public/images/emoji/emoji_one/writing_hand.png
new file mode 100644
index 0000000000..c49c6987de
Binary files /dev/null and b/public/images/emoji/emoji_one/writing_hand.png differ
diff --git a/public/images/emoji/emoji_one/yin_yang.png b/public/images/emoji/emoji_one/yin_yang.png
new file mode 100644
index 0000000000..e8769c4c40
Binary files /dev/null and b/public/images/emoji/emoji_one/yin_yang.png differ
diff --git a/public/images/emoji/emoji_one/zipper_mouth.png b/public/images/emoji/emoji_one/zipper_mouth.png
new file mode 100644
index 0000000000..2ddaf45491
Binary files /dev/null and b/public/images/emoji/emoji_one/zipper_mouth.png differ
diff --git a/public/images/emoji/google/airplane_arriving.png b/public/images/emoji/google/airplane_arriving.png
new file mode 100644
index 0000000000..a385ba0070
Binary files /dev/null and b/public/images/emoji/google/airplane_arriving.png differ
diff --git a/public/images/emoji/google/airplane_departure.png b/public/images/emoji/google/airplane_departure.png
new file mode 100644
index 0000000000..30dd2054ca
Binary files /dev/null and b/public/images/emoji/google/airplane_departure.png differ
diff --git a/public/images/emoji/google/airplane_small.png b/public/images/emoji/google/airplane_small.png
new file mode 100644
index 0000000000..4f97922d5d
Binary files /dev/null and b/public/images/emoji/google/airplane_small.png differ
diff --git a/public/images/emoji/google/alembic.png b/public/images/emoji/google/alembic.png
new file mode 100644
index 0000000000..553d1ceefc
Binary files /dev/null and b/public/images/emoji/google/alembic.png differ
diff --git a/public/images/emoji/google/amphora.png b/public/images/emoji/google/amphora.png
new file mode 100644
index 0000000000..58998b83d3
Binary files /dev/null and b/public/images/emoji/google/amphora.png differ
diff --git a/public/images/emoji/google/anger_right.png b/public/images/emoji/google/anger_right.png
new file mode 100644
index 0000000000..fed984143e
Binary files /dev/null and b/public/images/emoji/google/anger_right.png differ
diff --git a/public/images/emoji/google/atom.png b/public/images/emoji/google/atom.png
new file mode 100644
index 0000000000..7b2e8e2de8
Binary files /dev/null and b/public/images/emoji/google/atom.png differ
diff --git a/public/images/emoji/google/badminton.png b/public/images/emoji/google/badminton.png
new file mode 100644
index 0000000000..30d0a70212
Binary files /dev/null and b/public/images/emoji/google/badminton.png differ
diff --git a/public/images/emoji/google/ballot_box.png b/public/images/emoji/google/ballot_box.png
new file mode 100644
index 0000000000..1b2a590b0f
Binary files /dev/null and b/public/images/emoji/google/ballot_box.png differ
diff --git a/public/images/emoji/google/basketball_player.png b/public/images/emoji/google/basketball_player.png
new file mode 100644
index 0000000000..17d02ddbdb
Binary files /dev/null and b/public/images/emoji/google/basketball_player.png differ
diff --git a/public/images/emoji/google/beach.png b/public/images/emoji/google/beach.png
new file mode 100644
index 0000000000..9bb4009a4a
Binary files /dev/null and b/public/images/emoji/google/beach.png differ
diff --git a/public/images/emoji/google/beach_umbrella.png b/public/images/emoji/google/beach_umbrella.png
new file mode 100644
index 0000000000..4e54263e13
Binary files /dev/null and b/public/images/emoji/google/beach_umbrella.png differ
diff --git a/public/images/emoji/google/bed.png b/public/images/emoji/google/bed.png
new file mode 100644
index 0000000000..20fcedb2a6
Binary files /dev/null and b/public/images/emoji/google/bed.png differ
diff --git a/public/images/emoji/google/bellhop.png b/public/images/emoji/google/bellhop.png
new file mode 100644
index 0000000000..b9b876ebd9
Binary files /dev/null and b/public/images/emoji/google/bellhop.png differ
diff --git a/public/images/emoji/google/biohazard.png b/public/images/emoji/google/biohazard.png
new file mode 100644
index 0000000000..deae4dd8a0
Binary files /dev/null and b/public/images/emoji/google/biohazard.png differ
diff --git a/public/images/emoji/google/bow_and_arrow.png b/public/images/emoji/google/bow_and_arrow.png
new file mode 100644
index 0000000000..d49fc2cd53
Binary files /dev/null and b/public/images/emoji/google/bow_and_arrow.png differ
diff --git a/public/images/emoji/google/burrito.png b/public/images/emoji/google/burrito.png
new file mode 100644
index 0000000000..844a16b1c3
Binary files /dev/null and b/public/images/emoji/google/burrito.png differ
diff --git a/public/images/emoji/google/calendar_spiral.png b/public/images/emoji/google/calendar_spiral.png
new file mode 100644
index 0000000000..bd6dd7125e
Binary files /dev/null and b/public/images/emoji/google/calendar_spiral.png differ
diff --git a/public/images/emoji/google/camera_with_flash.png b/public/images/emoji/google/camera_with_flash.png
new file mode 100644
index 0000000000..6530f83f23
Binary files /dev/null and b/public/images/emoji/google/camera_with_flash.png differ
diff --git a/public/images/emoji/google/camping.png b/public/images/emoji/google/camping.png
new file mode 100644
index 0000000000..93415ad3c5
Binary files /dev/null and b/public/images/emoji/google/camping.png differ
diff --git a/public/images/emoji/google/candle.png b/public/images/emoji/google/candle.png
new file mode 100644
index 0000000000..d39a732971
Binary files /dev/null and b/public/images/emoji/google/candle.png differ
diff --git a/public/images/emoji/google/card_box.png b/public/images/emoji/google/card_box.png
new file mode 100644
index 0000000000..99e43b255f
Binary files /dev/null and b/public/images/emoji/google/card_box.png differ
diff --git a/public/images/emoji/google/chains.png b/public/images/emoji/google/chains.png
new file mode 100644
index 0000000000..b351a69dd2
Binary files /dev/null and b/public/images/emoji/google/chains.png differ
diff --git a/public/images/emoji/google/champagne.png b/public/images/emoji/google/champagne.png
new file mode 100644
index 0000000000..e42cfacfe6
Binary files /dev/null and b/public/images/emoji/google/champagne.png differ
diff --git a/public/images/emoji/google/cheese.png b/public/images/emoji/google/cheese.png
new file mode 100644
index 0000000000..b41475b401
Binary files /dev/null and b/public/images/emoji/google/cheese.png differ
diff --git a/public/images/emoji/google/chipmunk.png b/public/images/emoji/google/chipmunk.png
new file mode 100644
index 0000000000..3e582e29d8
Binary files /dev/null and b/public/images/emoji/google/chipmunk.png differ
diff --git a/public/images/emoji/google/city_dusk.png b/public/images/emoji/google/city_dusk.png
new file mode 100644
index 0000000000..1d5e0b932d
Binary files /dev/null and b/public/images/emoji/google/city_dusk.png differ
diff --git a/public/images/emoji/google/cityscape.png b/public/images/emoji/google/cityscape.png
new file mode 100644
index 0000000000..e42dd1941e
Binary files /dev/null and b/public/images/emoji/google/cityscape.png differ
diff --git a/public/images/emoji/google/classical_building.png b/public/images/emoji/google/classical_building.png
new file mode 100644
index 0000000000..7c52f6c988
Binary files /dev/null and b/public/images/emoji/google/classical_building.png differ
diff --git a/public/images/emoji/google/clock.png b/public/images/emoji/google/clock.png
new file mode 100644
index 0000000000..a01e801f2c
Binary files /dev/null and b/public/images/emoji/google/clock.png differ
diff --git a/public/images/emoji/google/cloud_lightning.png b/public/images/emoji/google/cloud_lightning.png
new file mode 100644
index 0000000000..7928332acf
Binary files /dev/null and b/public/images/emoji/google/cloud_lightning.png differ
diff --git a/public/images/emoji/google/cloud_rain.png b/public/images/emoji/google/cloud_rain.png
new file mode 100644
index 0000000000..9c98ad6c66
Binary files /dev/null and b/public/images/emoji/google/cloud_rain.png differ
diff --git a/public/images/emoji/google/cloud_snow.png b/public/images/emoji/google/cloud_snow.png
new file mode 100644
index 0000000000..06159ea0e7
Binary files /dev/null and b/public/images/emoji/google/cloud_snow.png differ
diff --git a/public/images/emoji/google/cloud_tornado.png b/public/images/emoji/google/cloud_tornado.png
new file mode 100644
index 0000000000..3cd4cfb519
Binary files /dev/null and b/public/images/emoji/google/cloud_tornado.png differ
diff --git a/public/images/emoji/google/coffin.png b/public/images/emoji/google/coffin.png
new file mode 100644
index 0000000000..07777d3fd1
Binary files /dev/null and b/public/images/emoji/google/coffin.png differ
diff --git a/public/images/emoji/google/comet.png b/public/images/emoji/google/comet.png
new file mode 100644
index 0000000000..9cad61148d
Binary files /dev/null and b/public/images/emoji/google/comet.png differ
diff --git a/public/images/emoji/google/compression.png b/public/images/emoji/google/compression.png
new file mode 100644
index 0000000000..ac7dd4ca76
Binary files /dev/null and b/public/images/emoji/google/compression.png differ
diff --git a/public/images/emoji/google/construction_site.png b/public/images/emoji/google/construction_site.png
new file mode 100644
index 0000000000..2b27bfb896
Binary files /dev/null and b/public/images/emoji/google/construction_site.png differ
diff --git a/public/images/emoji/google/control_knobs.png b/public/images/emoji/google/control_knobs.png
new file mode 100644
index 0000000000..01aa45bcfd
Binary files /dev/null and b/public/images/emoji/google/control_knobs.png differ
diff --git a/public/images/emoji/google/couch.png b/public/images/emoji/google/couch.png
new file mode 100644
index 0000000000..b5628b0201
Binary files /dev/null and b/public/images/emoji/google/couch.png differ
diff --git a/public/images/emoji/google/crab.png b/public/images/emoji/google/crab.png
new file mode 100644
index 0000000000..37b3180429
Binary files /dev/null and b/public/images/emoji/google/crab.png differ
diff --git a/public/images/emoji/google/crayon.png b/public/images/emoji/google/crayon.png
new file mode 100644
index 0000000000..0096c9c637
Binary files /dev/null and b/public/images/emoji/google/crayon.png differ
diff --git a/public/images/emoji/google/cricket.png b/public/images/emoji/google/cricket.png
new file mode 100644
index 0000000000..300b76d576
Binary files /dev/null and b/public/images/emoji/google/cricket.png differ
diff --git a/public/images/emoji/google/cross.png b/public/images/emoji/google/cross.png
new file mode 100644
index 0000000000..1529863dfd
Binary files /dev/null and b/public/images/emoji/google/cross.png differ
diff --git a/public/images/emoji/google/crossed_swords.png b/public/images/emoji/google/crossed_swords.png
new file mode 100644
index 0000000000..636eb7e8e0
Binary files /dev/null and b/public/images/emoji/google/crossed_swords.png differ
diff --git a/public/images/emoji/google/cruise_ship.png b/public/images/emoji/google/cruise_ship.png
new file mode 100644
index 0000000000..b9360e8eda
Binary files /dev/null and b/public/images/emoji/google/cruise_ship.png differ
diff --git a/public/images/emoji/google/dagger.png b/public/images/emoji/google/dagger.png
new file mode 100644
index 0000000000..6a4b31e00f
Binary files /dev/null and b/public/images/emoji/google/dagger.png differ
diff --git a/public/images/emoji/google/dark_sunglasses.png b/public/images/emoji/google/dark_sunglasses.png
new file mode 100644
index 0000000000..ded25ea1d9
Binary files /dev/null and b/public/images/emoji/google/dark_sunglasses.png differ
diff --git a/public/images/emoji/google/desert.png b/public/images/emoji/google/desert.png
new file mode 100644
index 0000000000..beac9e023c
Binary files /dev/null and b/public/images/emoji/google/desert.png differ
diff --git a/public/images/emoji/google/desktop.png b/public/images/emoji/google/desktop.png
new file mode 100644
index 0000000000..7aa0819ee4
Binary files /dev/null and b/public/images/emoji/google/desktop.png differ
diff --git a/public/images/emoji/google/dividers.png b/public/images/emoji/google/dividers.png
new file mode 100644
index 0000000000..b526d0e34b
Binary files /dev/null and b/public/images/emoji/google/dividers.png differ
diff --git a/public/images/emoji/google/dove.png b/public/images/emoji/google/dove.png
new file mode 100644
index 0000000000..4095825d74
Binary files /dev/null and b/public/images/emoji/google/dove.png differ
diff --git a/public/images/emoji/google/eye.png b/public/images/emoji/google/eye.png
new file mode 100644
index 0000000000..61e901e6cd
Binary files /dev/null and b/public/images/emoji/google/eye.png differ
diff --git a/public/images/emoji/google/ferry.png b/public/images/emoji/google/ferry.png
new file mode 100644
index 0000000000..06b9353718
Binary files /dev/null and b/public/images/emoji/google/ferry.png differ
diff --git a/public/images/emoji/google/field_hockey.png b/public/images/emoji/google/field_hockey.png
new file mode 100644
index 0000000000..7213afedce
Binary files /dev/null and b/public/images/emoji/google/field_hockey.png differ
diff --git a/public/images/emoji/google/file_cabinet.png b/public/images/emoji/google/file_cabinet.png
new file mode 100644
index 0000000000..c197648675
Binary files /dev/null and b/public/images/emoji/google/file_cabinet.png differ
diff --git a/public/images/emoji/google/film_frames.png b/public/images/emoji/google/film_frames.png
new file mode 100644
index 0000000000..d3a79feff7
Binary files /dev/null and b/public/images/emoji/google/film_frames.png differ
diff --git a/public/images/emoji/google/flag_black.png b/public/images/emoji/google/flag_black.png
new file mode 100644
index 0000000000..01ecfa2753
Binary files /dev/null and b/public/images/emoji/google/flag_black.png differ
diff --git a/public/images/emoji/google/flag_cn.png b/public/images/emoji/google/flag_cn.png
new file mode 100644
index 0000000000..2d9c3dad8d
Binary files /dev/null and b/public/images/emoji/google/flag_cn.png differ
diff --git a/public/images/emoji/google/flag_de.png b/public/images/emoji/google/flag_de.png
new file mode 100644
index 0000000000..0baf83652e
Binary files /dev/null and b/public/images/emoji/google/flag_de.png differ
diff --git a/public/images/emoji/google/flag_es.png b/public/images/emoji/google/flag_es.png
new file mode 100644
index 0000000000..e04765d6b7
Binary files /dev/null and b/public/images/emoji/google/flag_es.png differ
diff --git a/public/images/emoji/google/flag_fr.png b/public/images/emoji/google/flag_fr.png
new file mode 100644
index 0000000000..674b50805a
Binary files /dev/null and b/public/images/emoji/google/flag_fr.png differ
diff --git a/public/images/emoji/google/flag_gb.png b/public/images/emoji/google/flag_gb.png
new file mode 100644
index 0000000000..c5c919ada6
Binary files /dev/null and b/public/images/emoji/google/flag_gb.png differ
diff --git a/public/images/emoji/google/flag_it.png b/public/images/emoji/google/flag_it.png
new file mode 100644
index 0000000000..7d98f98011
Binary files /dev/null and b/public/images/emoji/google/flag_it.png differ
diff --git a/public/images/emoji/google/flag_jp.png b/public/images/emoji/google/flag_jp.png
new file mode 100644
index 0000000000..a04b719f8a
Binary files /dev/null and b/public/images/emoji/google/flag_jp.png differ
diff --git a/public/images/emoji/google/flag_kr.png b/public/images/emoji/google/flag_kr.png
new file mode 100644
index 0000000000..12b9ab1257
Binary files /dev/null and b/public/images/emoji/google/flag_kr.png differ
diff --git a/public/images/emoji/google/flag_ru.png b/public/images/emoji/google/flag_ru.png
new file mode 100644
index 0000000000..5121b0cac4
Binary files /dev/null and b/public/images/emoji/google/flag_ru.png differ
diff --git a/public/images/emoji/google/flag_us.png b/public/images/emoji/google/flag_us.png
new file mode 100644
index 0000000000..9ad26a6680
Binary files /dev/null and b/public/images/emoji/google/flag_us.png differ
diff --git a/public/images/emoji/google/flag_white.png b/public/images/emoji/google/flag_white.png
new file mode 100644
index 0000000000..4afc58a157
Binary files /dev/null and b/public/images/emoji/google/flag_white.png differ
diff --git a/public/images/emoji/google/fleur-de-lis.png b/public/images/emoji/google/fleur-de-lis.png
new file mode 100644
index 0000000000..726a9dbfc6
Binary files /dev/null and b/public/images/emoji/google/fleur-de-lis.png differ
diff --git a/public/images/emoji/google/fog.png b/public/images/emoji/google/fog.png
new file mode 100644
index 0000000000..99c75ed752
Binary files /dev/null and b/public/images/emoji/google/fog.png differ
diff --git a/public/images/emoji/google/fork_knife_plate.png b/public/images/emoji/google/fork_knife_plate.png
new file mode 100644
index 0000000000..7522473180
Binary files /dev/null and b/public/images/emoji/google/fork_knife_plate.png differ
diff --git a/public/images/emoji/google/frame_photo.png b/public/images/emoji/google/frame_photo.png
new file mode 100644
index 0000000000..2472435901
Binary files /dev/null and b/public/images/emoji/google/frame_photo.png differ
diff --git a/public/images/emoji/google/frowning2.png b/public/images/emoji/google/frowning2.png
new file mode 100644
index 0000000000..60077a561c
Binary files /dev/null and b/public/images/emoji/google/frowning2.png differ
diff --git a/public/images/emoji/google/gear.png b/public/images/emoji/google/gear.png
new file mode 100644
index 0000000000..79dd801a12
Binary files /dev/null and b/public/images/emoji/google/gear.png differ
diff --git a/public/images/emoji/google/golfer.png b/public/images/emoji/google/golfer.png
new file mode 100644
index 0000000000..2aff3e9dc4
Binary files /dev/null and b/public/images/emoji/google/golfer.png differ
diff --git a/public/images/emoji/google/hammer_pick.png b/public/images/emoji/google/hammer_pick.png
new file mode 100644
index 0000000000..58690f4623
Binary files /dev/null and b/public/images/emoji/google/hammer_pick.png differ
diff --git a/public/images/emoji/google/hand_splayed.png b/public/images/emoji/google/hand_splayed.png
new file mode 100644
index 0000000000..140e5edf6c
Binary files /dev/null and b/public/images/emoji/google/hand_splayed.png differ
diff --git a/public/images/emoji/google/head_bandage.png b/public/images/emoji/google/head_bandage.png
new file mode 100644
index 0000000000..bb6358bd84
Binary files /dev/null and b/public/images/emoji/google/head_bandage.png differ
diff --git a/public/images/emoji/google/heart_exclamation.png b/public/images/emoji/google/heart_exclamation.png
new file mode 100644
index 0000000000..4bcc043268
Binary files /dev/null and b/public/images/emoji/google/heart_exclamation.png differ
diff --git a/public/images/emoji/google/helmet_with_cross.png b/public/images/emoji/google/helmet_with_cross.png
new file mode 100644
index 0000000000..7b60b84c7d
Binary files /dev/null and b/public/images/emoji/google/helmet_with_cross.png differ
diff --git a/public/images/emoji/google/hockey.png b/public/images/emoji/google/hockey.png
new file mode 100644
index 0000000000..a224a9d862
Binary files /dev/null and b/public/images/emoji/google/hockey.png differ
diff --git a/public/images/emoji/google/hole.png b/public/images/emoji/google/hole.png
new file mode 100644
index 0000000000..a74093e97c
Binary files /dev/null and b/public/images/emoji/google/hole.png differ
diff --git a/public/images/emoji/google/homes.png b/public/images/emoji/google/homes.png
new file mode 100644
index 0000000000..330612a230
Binary files /dev/null and b/public/images/emoji/google/homes.png differ
diff --git a/public/images/emoji/google/hot_pepper.png b/public/images/emoji/google/hot_pepper.png
new file mode 100644
index 0000000000..4b96b89987
Binary files /dev/null and b/public/images/emoji/google/hot_pepper.png differ
diff --git a/public/images/emoji/google/hotdog.png b/public/images/emoji/google/hotdog.png
new file mode 100644
index 0000000000..9b656e4e6e
Binary files /dev/null and b/public/images/emoji/google/hotdog.png differ
diff --git a/public/images/emoji/google/house_abandoned.png b/public/images/emoji/google/house_abandoned.png
new file mode 100644
index 0000000000..65339656f6
Binary files /dev/null and b/public/images/emoji/google/house_abandoned.png differ
diff --git a/public/images/emoji/google/hugging.png b/public/images/emoji/google/hugging.png
new file mode 100644
index 0000000000..f96f020cb1
Binary files /dev/null and b/public/images/emoji/google/hugging.png differ
diff --git a/public/images/emoji/google/ice_skate.png b/public/images/emoji/google/ice_skate.png
new file mode 100644
index 0000000000..9c4c849ca9
Binary files /dev/null and b/public/images/emoji/google/ice_skate.png differ
diff --git a/public/images/emoji/google/island.png b/public/images/emoji/google/island.png
new file mode 100644
index 0000000000..eb33977cf6
Binary files /dev/null and b/public/images/emoji/google/island.png differ
diff --git a/public/images/emoji/google/joystick.png b/public/images/emoji/google/joystick.png
new file mode 100644
index 0000000000..a2891008d0
Binary files /dev/null and b/public/images/emoji/google/joystick.png differ
diff --git a/public/images/emoji/google/kaaba.png b/public/images/emoji/google/kaaba.png
new file mode 100644
index 0000000000..ea2a60b17b
Binary files /dev/null and b/public/images/emoji/google/kaaba.png differ
diff --git a/public/images/emoji/google/key2.png b/public/images/emoji/google/key2.png
new file mode 100644
index 0000000000..37bbcbb7cb
Binary files /dev/null and b/public/images/emoji/google/key2.png differ
diff --git a/public/images/emoji/google/keyboard.png b/public/images/emoji/google/keyboard.png
new file mode 100644
index 0000000000..5c7ad21445
Binary files /dev/null and b/public/images/emoji/google/keyboard.png differ
diff --git a/public/images/emoji/google/label.png b/public/images/emoji/google/label.png
new file mode 100644
index 0000000000..61c4f8021d
Binary files /dev/null and b/public/images/emoji/google/label.png differ
diff --git a/public/images/emoji/google/level_slider.png b/public/images/emoji/google/level_slider.png
new file mode 100644
index 0000000000..74adedad39
Binary files /dev/null and b/public/images/emoji/google/level_slider.png differ
diff --git a/public/images/emoji/google/levitate.png b/public/images/emoji/google/levitate.png
new file mode 100644
index 0000000000..b257d1b652
Binary files /dev/null and b/public/images/emoji/google/levitate.png differ
diff --git a/public/images/emoji/google/lifter.png b/public/images/emoji/google/lifter.png
new file mode 100644
index 0000000000..52dd8c972a
Binary files /dev/null and b/public/images/emoji/google/lifter.png differ
diff --git a/public/images/emoji/google/lion_face.png b/public/images/emoji/google/lion_face.png
new file mode 100644
index 0000000000..18ec861a2d
Binary files /dev/null and b/public/images/emoji/google/lion_face.png differ
diff --git a/public/images/emoji/google/map.png b/public/images/emoji/google/map.png
new file mode 100644
index 0000000000..47a97c65b3
Binary files /dev/null and b/public/images/emoji/google/map.png differ
diff --git a/public/images/emoji/google/medal.png b/public/images/emoji/google/medal.png
new file mode 100644
index 0000000000..01f0e9af78
Binary files /dev/null and b/public/images/emoji/google/medal.png differ
diff --git a/public/images/emoji/google/menorah.png b/public/images/emoji/google/menorah.png
new file mode 100644
index 0000000000..d618e60f65
Binary files /dev/null and b/public/images/emoji/google/menorah.png differ
diff --git a/public/images/emoji/google/metal.png b/public/images/emoji/google/metal.png
new file mode 100644
index 0000000000..fe5ca6ecb4
Binary files /dev/null and b/public/images/emoji/google/metal.png differ
diff --git a/public/images/emoji/google/microphone2.png b/public/images/emoji/google/microphone2.png
new file mode 100644
index 0000000000..4a772830df
Binary files /dev/null and b/public/images/emoji/google/microphone2.png differ
diff --git a/public/images/emoji/google/middle_finger.png b/public/images/emoji/google/middle_finger.png
new file mode 100644
index 0000000000..7bab9e62d0
Binary files /dev/null and b/public/images/emoji/google/middle_finger.png differ
diff --git a/public/images/emoji/google/military_medal.png b/public/images/emoji/google/military_medal.png
new file mode 100644
index 0000000000..905a838924
Binary files /dev/null and b/public/images/emoji/google/military_medal.png differ
diff --git a/public/images/emoji/google/money_mouth.png b/public/images/emoji/google/money_mouth.png
new file mode 100644
index 0000000000..231c21c161
Binary files /dev/null and b/public/images/emoji/google/money_mouth.png differ
diff --git a/public/images/emoji/google/mosque.png b/public/images/emoji/google/mosque.png
new file mode 100644
index 0000000000..0aee1ca20d
Binary files /dev/null and b/public/images/emoji/google/mosque.png differ
diff --git a/public/images/emoji/google/motorboat.png b/public/images/emoji/google/motorboat.png
new file mode 100644
index 0000000000..a735312ec6
Binary files /dev/null and b/public/images/emoji/google/motorboat.png differ
diff --git a/public/images/emoji/google/motorcycle.png b/public/images/emoji/google/motorcycle.png
new file mode 100644
index 0000000000..26da5995fe
Binary files /dev/null and b/public/images/emoji/google/motorcycle.png differ
diff --git a/public/images/emoji/google/motorway.png b/public/images/emoji/google/motorway.png
new file mode 100644
index 0000000000..3fbb18ea25
Binary files /dev/null and b/public/images/emoji/google/motorway.png differ
diff --git a/public/images/emoji/google/mountain.png b/public/images/emoji/google/mountain.png
new file mode 100644
index 0000000000..869d358f1f
Binary files /dev/null and b/public/images/emoji/google/mountain.png differ
diff --git a/public/images/emoji/google/mountain_snow.png b/public/images/emoji/google/mountain_snow.png
new file mode 100644
index 0000000000..e5c77bfc5e
Binary files /dev/null and b/public/images/emoji/google/mountain_snow.png differ
diff --git a/public/images/emoji/google/mouse_three_button.png b/public/images/emoji/google/mouse_three_button.png
new file mode 100644
index 0000000000..6ac3b8f8c9
Binary files /dev/null and b/public/images/emoji/google/mouse_three_button.png differ
diff --git a/public/images/emoji/google/nerd.png b/public/images/emoji/google/nerd.png
new file mode 100644
index 0000000000..29712d83c9
Binary files /dev/null and b/public/images/emoji/google/nerd.png differ
diff --git a/public/images/emoji/google/newspaper2.png b/public/images/emoji/google/newspaper2.png
new file mode 100644
index 0000000000..d8abf1de67
Binary files /dev/null and b/public/images/emoji/google/newspaper2.png differ
diff --git a/public/images/emoji/google/notepad_spiral.png b/public/images/emoji/google/notepad_spiral.png
new file mode 100644
index 0000000000..160c8c2e28
Binary files /dev/null and b/public/images/emoji/google/notepad_spiral.png differ
diff --git a/public/images/emoji/google/oil.png b/public/images/emoji/google/oil.png
new file mode 100644
index 0000000000..c7214f9013
Binary files /dev/null and b/public/images/emoji/google/oil.png differ
diff --git a/public/images/emoji/google/om_symbol.png b/public/images/emoji/google/om_symbol.png
new file mode 100644
index 0000000000..df39c8dec0
Binary files /dev/null and b/public/images/emoji/google/om_symbol.png differ
diff --git a/public/images/emoji/google/orthodox_cross.png b/public/images/emoji/google/orthodox_cross.png
new file mode 100644
index 0000000000..5355c810f2
Binary files /dev/null and b/public/images/emoji/google/orthodox_cross.png differ
diff --git a/public/images/emoji/google/paintbrush.png b/public/images/emoji/google/paintbrush.png
new file mode 100644
index 0000000000..e41a4f6b5d
Binary files /dev/null and b/public/images/emoji/google/paintbrush.png differ
diff --git a/public/images/emoji/google/paperclips.png b/public/images/emoji/google/paperclips.png
new file mode 100644
index 0000000000..d9d9c5c8a4
Binary files /dev/null and b/public/images/emoji/google/paperclips.png differ
diff --git a/public/images/emoji/google/park.png b/public/images/emoji/google/park.png
new file mode 100644
index 0000000000..468fd0fb89
Binary files /dev/null and b/public/images/emoji/google/park.png differ
diff --git a/public/images/emoji/google/pause_button.png b/public/images/emoji/google/pause_button.png
new file mode 100644
index 0000000000..31f4ff5284
Binary files /dev/null and b/public/images/emoji/google/pause_button.png differ
diff --git a/public/images/emoji/google/peace.png b/public/images/emoji/google/peace.png
new file mode 100644
index 0000000000..d1f1f7a3bf
Binary files /dev/null and b/public/images/emoji/google/peace.png differ
diff --git a/public/images/emoji/google/pen_ballpoint.png b/public/images/emoji/google/pen_ballpoint.png
new file mode 100644
index 0000000000..a935dd5eac
Binary files /dev/null and b/public/images/emoji/google/pen_ballpoint.png differ
diff --git a/public/images/emoji/google/pen_fountain.png b/public/images/emoji/google/pen_fountain.png
new file mode 100644
index 0000000000..10c36f30c0
Binary files /dev/null and b/public/images/emoji/google/pen_fountain.png differ
diff --git a/public/images/emoji/google/pick.png b/public/images/emoji/google/pick.png
new file mode 100644
index 0000000000..8fd6623bb1
Binary files /dev/null and b/public/images/emoji/google/pick.png differ
diff --git a/public/images/emoji/google/ping_pong.png b/public/images/emoji/google/ping_pong.png
new file mode 100644
index 0000000000..c5547d94ca
Binary files /dev/null and b/public/images/emoji/google/ping_pong.png differ
diff --git a/public/images/emoji/google/place_of_worship.png b/public/images/emoji/google/place_of_worship.png
new file mode 100644
index 0000000000..dc4b77ccc0
Binary files /dev/null and b/public/images/emoji/google/place_of_worship.png differ
diff --git a/public/images/emoji/google/play_pause.png b/public/images/emoji/google/play_pause.png
new file mode 100644
index 0000000000..ad2c3639ac
Binary files /dev/null and b/public/images/emoji/google/play_pause.png differ
diff --git a/public/images/emoji/google/popcorn.png b/public/images/emoji/google/popcorn.png
new file mode 100644
index 0000000000..f71c7d08f2
Binary files /dev/null and b/public/images/emoji/google/popcorn.png differ
diff --git a/public/images/emoji/google/prayer_beads.png b/public/images/emoji/google/prayer_beads.png
new file mode 100644
index 0000000000..8121c40e8d
Binary files /dev/null and b/public/images/emoji/google/prayer_beads.png differ
diff --git a/public/images/emoji/google/printer.png b/public/images/emoji/google/printer.png
new file mode 100644
index 0000000000..1bf9570bba
Binary files /dev/null and b/public/images/emoji/google/printer.png differ
diff --git a/public/images/emoji/google/projector.png b/public/images/emoji/google/projector.png
new file mode 100644
index 0000000000..cd06f11a21
Binary files /dev/null and b/public/images/emoji/google/projector.png differ
diff --git a/public/images/emoji/google/race_car.png b/public/images/emoji/google/race_car.png
new file mode 100644
index 0000000000..a751071429
Binary files /dev/null and b/public/images/emoji/google/race_car.png differ
diff --git a/public/images/emoji/google/radioactive.png b/public/images/emoji/google/radioactive.png
new file mode 100644
index 0000000000..01e580ddf4
Binary files /dev/null and b/public/images/emoji/google/radioactive.png differ
diff --git a/public/images/emoji/google/railway_track.png b/public/images/emoji/google/railway_track.png
new file mode 100644
index 0000000000..ceac451e0f
Binary files /dev/null and b/public/images/emoji/google/railway_track.png differ
diff --git a/public/images/emoji/google/record_button.png b/public/images/emoji/google/record_button.png
new file mode 100644
index 0000000000..c532d18d8d
Binary files /dev/null and b/public/images/emoji/google/record_button.png differ
diff --git a/public/images/emoji/google/reminder_ribbon.png b/public/images/emoji/google/reminder_ribbon.png
new file mode 100644
index 0000000000..95930a1858
Binary files /dev/null and b/public/images/emoji/google/reminder_ribbon.png differ
diff --git a/public/images/emoji/google/robot.png b/public/images/emoji/google/robot.png
new file mode 100644
index 0000000000..e3f6762523
Binary files /dev/null and b/public/images/emoji/google/robot.png differ
diff --git a/public/images/emoji/google/rolling_eyes.png b/public/images/emoji/google/rolling_eyes.png
new file mode 100644
index 0000000000..a6660d55aa
Binary files /dev/null and b/public/images/emoji/google/rolling_eyes.png differ
diff --git a/public/images/emoji/google/rosette.png b/public/images/emoji/google/rosette.png
new file mode 100644
index 0000000000..dc5b0ff48c
Binary files /dev/null and b/public/images/emoji/google/rosette.png differ
diff --git a/public/images/emoji/google/satellite_orbital.png b/public/images/emoji/google/satellite_orbital.png
new file mode 100644
index 0000000000..a788d48b52
Binary files /dev/null and b/public/images/emoji/google/satellite_orbital.png differ
diff --git a/public/images/emoji/google/scales.png b/public/images/emoji/google/scales.png
new file mode 100644
index 0000000000..dea79c4121
Binary files /dev/null and b/public/images/emoji/google/scales.png differ
diff --git a/public/images/emoji/google/scorpion.png b/public/images/emoji/google/scorpion.png
new file mode 100644
index 0000000000..d8ac29bdf9
Binary files /dev/null and b/public/images/emoji/google/scorpion.png differ
diff --git a/public/images/emoji/google/shamrock.png b/public/images/emoji/google/shamrock.png
new file mode 100644
index 0000000000..e5c458477e
Binary files /dev/null and b/public/images/emoji/google/shamrock.png differ
diff --git a/public/images/emoji/google/shield.png b/public/images/emoji/google/shield.png
new file mode 100644
index 0000000000..8a69eef136
Binary files /dev/null and b/public/images/emoji/google/shield.png differ
diff --git a/public/images/emoji/google/shinto_shrine.png b/public/images/emoji/google/shinto_shrine.png
new file mode 100644
index 0000000000..bd55e6fb8a
Binary files /dev/null and b/public/images/emoji/google/shinto_shrine.png differ
diff --git a/public/images/emoji/google/shopping_bags.png b/public/images/emoji/google/shopping_bags.png
new file mode 100644
index 0000000000..cff8a39cbd
Binary files /dev/null and b/public/images/emoji/google/shopping_bags.png differ
diff --git a/public/images/emoji/google/skier.png b/public/images/emoji/google/skier.png
new file mode 100644
index 0000000000..9407ff3497
Binary files /dev/null and b/public/images/emoji/google/skier.png differ
diff --git a/public/images/emoji/google/skull_crossbones.png b/public/images/emoji/google/skull_crossbones.png
new file mode 100644
index 0000000000..f3f0d910d8
Binary files /dev/null and b/public/images/emoji/google/skull_crossbones.png differ
diff --git a/public/images/emoji/google/sleeping_accommodation.png b/public/images/emoji/google/sleeping_accommodation.png
new file mode 100644
index 0000000000..c6344e1f87
Binary files /dev/null and b/public/images/emoji/google/sleeping_accommodation.png differ
diff --git a/public/images/emoji/google/slight_frown.png b/public/images/emoji/google/slight_frown.png
new file mode 100644
index 0000000000..56816d4954
Binary files /dev/null and b/public/images/emoji/google/slight_frown.png differ
diff --git a/public/images/emoji/google/slight_smile.png b/public/images/emoji/google/slight_smile.png
new file mode 100644
index 0000000000..7fbc5699e5
Binary files /dev/null and b/public/images/emoji/google/slight_smile.png differ
diff --git a/public/images/emoji/google/snowman2.png b/public/images/emoji/google/snowman2.png
new file mode 100644
index 0000000000..5e1b3c3287
Binary files /dev/null and b/public/images/emoji/google/snowman2.png differ
diff --git a/public/images/emoji/google/speaking_head.png b/public/images/emoji/google/speaking_head.png
new file mode 100644
index 0000000000..3df8c91a9b
Binary files /dev/null and b/public/images/emoji/google/speaking_head.png differ
diff --git a/public/images/emoji/google/spider.png b/public/images/emoji/google/spider.png
new file mode 100644
index 0000000000..6441b957f1
Binary files /dev/null and b/public/images/emoji/google/spider.png differ
diff --git a/public/images/emoji/google/spider_web.png b/public/images/emoji/google/spider_web.png
new file mode 100644
index 0000000000..89dff1e576
Binary files /dev/null and b/public/images/emoji/google/spider_web.png differ
diff --git a/public/images/emoji/google/spy.png b/public/images/emoji/google/spy.png
new file mode 100644
index 0000000000..fc5d8db4a8
Binary files /dev/null and b/public/images/emoji/google/spy.png differ
diff --git a/public/images/emoji/google/stadium.png b/public/images/emoji/google/stadium.png
new file mode 100644
index 0000000000..55151d4b41
Binary files /dev/null and b/public/images/emoji/google/stadium.png differ
diff --git a/public/images/emoji/google/star_and_crescent.png b/public/images/emoji/google/star_and_crescent.png
new file mode 100644
index 0000000000..d653df867f
Binary files /dev/null and b/public/images/emoji/google/star_and_crescent.png differ
diff --git a/public/images/emoji/google/star_of_david.png b/public/images/emoji/google/star_of_david.png
new file mode 100644
index 0000000000..7109e573ed
Binary files /dev/null and b/public/images/emoji/google/star_of_david.png differ
diff --git a/public/images/emoji/google/stop_button.png b/public/images/emoji/google/stop_button.png
new file mode 100644
index 0000000000..cd00a6dd93
Binary files /dev/null and b/public/images/emoji/google/stop_button.png differ
diff --git a/public/images/emoji/google/stopwatch.png b/public/images/emoji/google/stopwatch.png
new file mode 100644
index 0000000000..10e6d92019
Binary files /dev/null and b/public/images/emoji/google/stopwatch.png differ
diff --git a/public/images/emoji/google/synagogue.png b/public/images/emoji/google/synagogue.png
new file mode 100644
index 0000000000..9ab7aac973
Binary files /dev/null and b/public/images/emoji/google/synagogue.png differ
diff --git a/public/images/emoji/google/taco.png b/public/images/emoji/google/taco.png
new file mode 100644
index 0000000000..880e316f83
Binary files /dev/null and b/public/images/emoji/google/taco.png differ
diff --git a/public/images/emoji/google/ten.png b/public/images/emoji/google/ten.png
new file mode 100644
index 0000000000..43c3ab79a3
Binary files /dev/null and b/public/images/emoji/google/ten.png differ
diff --git a/public/images/emoji/google/thermometer.png b/public/images/emoji/google/thermometer.png
new file mode 100644
index 0000000000..f5fd7cb0b6
Binary files /dev/null and b/public/images/emoji/google/thermometer.png differ
diff --git a/public/images/emoji/google/thermometer_face.png b/public/images/emoji/google/thermometer_face.png
new file mode 100644
index 0000000000..c83df33be8
Binary files /dev/null and b/public/images/emoji/google/thermometer_face.png differ
diff --git a/public/images/emoji/google/thinking.png b/public/images/emoji/google/thinking.png
new file mode 100644
index 0000000000..ffdaf974ae
Binary files /dev/null and b/public/images/emoji/google/thinking.png differ
diff --git a/public/images/emoji/google/thunder_cloud_rain.png b/public/images/emoji/google/thunder_cloud_rain.png
new file mode 100644
index 0000000000..4bf859a12d
Binary files /dev/null and b/public/images/emoji/google/thunder_cloud_rain.png differ
diff --git a/public/images/emoji/google/tickets.png b/public/images/emoji/google/tickets.png
new file mode 100644
index 0000000000..c61d207c75
Binary files /dev/null and b/public/images/emoji/google/tickets.png differ
diff --git a/public/images/emoji/google/timer.png b/public/images/emoji/google/timer.png
new file mode 100644
index 0000000000..e504759aca
Binary files /dev/null and b/public/images/emoji/google/timer.png differ
diff --git a/public/images/emoji/google/tools.png b/public/images/emoji/google/tools.png
new file mode 100644
index 0000000000..81401c5680
Binary files /dev/null and b/public/images/emoji/google/tools.png differ
diff --git a/public/images/emoji/google/track_next.png b/public/images/emoji/google/track_next.png
new file mode 100644
index 0000000000..904f3b32f4
Binary files /dev/null and b/public/images/emoji/google/track_next.png differ
diff --git a/public/images/emoji/google/track_previous.png b/public/images/emoji/google/track_previous.png
new file mode 100644
index 0000000000..4b2d3c48a0
Binary files /dev/null and b/public/images/emoji/google/track_previous.png differ
diff --git a/public/images/emoji/google/trackball.png b/public/images/emoji/google/trackball.png
new file mode 100644
index 0000000000..2de9f53c98
Binary files /dev/null and b/public/images/emoji/google/trackball.png differ
diff --git a/public/images/emoji/google/turkey.png b/public/images/emoji/google/turkey.png
new file mode 100644
index 0000000000..ecc3d40b4c
Binary files /dev/null and b/public/images/emoji/google/turkey.png differ
diff --git a/public/images/emoji/google/umbrella2.png b/public/images/emoji/google/umbrella2.png
new file mode 100644
index 0000000000..869153d75b
Binary files /dev/null and b/public/images/emoji/google/umbrella2.png differ
diff --git a/public/images/emoji/google/unicorn.png b/public/images/emoji/google/unicorn.png
new file mode 100644
index 0000000000..ffcb1839ee
Binary files /dev/null and b/public/images/emoji/google/unicorn.png differ
diff --git a/public/images/emoji/google/upside_down.png b/public/images/emoji/google/upside_down.png
new file mode 100644
index 0000000000..b0bc852137
Binary files /dev/null and b/public/images/emoji/google/upside_down.png differ
diff --git a/public/images/emoji/google/urn.png b/public/images/emoji/google/urn.png
new file mode 100644
index 0000000000..edc661551b
Binary files /dev/null and b/public/images/emoji/google/urn.png differ
diff --git a/public/images/emoji/google/volleyball.png b/public/images/emoji/google/volleyball.png
new file mode 100644
index 0000000000..77d998d3e9
Binary files /dev/null and b/public/images/emoji/google/volleyball.png differ
diff --git a/public/images/emoji/google/vulcan.png b/public/images/emoji/google/vulcan.png
new file mode 100644
index 0000000000..20cb6f2786
Binary files /dev/null and b/public/images/emoji/google/vulcan.png differ
diff --git a/public/images/emoji/google/wastebasket.png b/public/images/emoji/google/wastebasket.png
new file mode 100644
index 0000000000..7064341987
Binary files /dev/null and b/public/images/emoji/google/wastebasket.png differ
diff --git a/public/images/emoji/google/wheel_of_dharma.png b/public/images/emoji/google/wheel_of_dharma.png
new file mode 100644
index 0000000000..c102a50a51
Binary files /dev/null and b/public/images/emoji/google/wheel_of_dharma.png differ
diff --git a/public/images/emoji/google/white_sun_cloud.png b/public/images/emoji/google/white_sun_cloud.png
new file mode 100644
index 0000000000..4ae2fd114a
Binary files /dev/null and b/public/images/emoji/google/white_sun_cloud.png differ
diff --git a/public/images/emoji/google/white_sun_rain_cloud.png b/public/images/emoji/google/white_sun_rain_cloud.png
new file mode 100644
index 0000000000..78535070d6
Binary files /dev/null and b/public/images/emoji/google/white_sun_rain_cloud.png differ
diff --git a/public/images/emoji/google/white_sun_small_cloud.png b/public/images/emoji/google/white_sun_small_cloud.png
new file mode 100644
index 0000000000..1e2117f247
Binary files /dev/null and b/public/images/emoji/google/white_sun_small_cloud.png differ
diff --git a/public/images/emoji/google/wind_blowing_face.png b/public/images/emoji/google/wind_blowing_face.png
new file mode 100644
index 0000000000..3db7093280
Binary files /dev/null and b/public/images/emoji/google/wind_blowing_face.png differ
diff --git a/public/images/emoji/google/writing_hand.png b/public/images/emoji/google/writing_hand.png
new file mode 100644
index 0000000000..b178941f4c
Binary files /dev/null and b/public/images/emoji/google/writing_hand.png differ
diff --git a/public/images/emoji/google/yin_yang.png b/public/images/emoji/google/yin_yang.png
new file mode 100644
index 0000000000..1e682f0582
Binary files /dev/null and b/public/images/emoji/google/yin_yang.png differ
diff --git a/public/images/emoji/google/zipper_mouth.png b/public/images/emoji/google/zipper_mouth.png
new file mode 100644
index 0000000000..de15534fb7
Binary files /dev/null and b/public/images/emoji/google/zipper_mouth.png differ
diff --git a/public/images/emoji/twitter/airplane_arriving.png b/public/images/emoji/twitter/airplane_arriving.png
new file mode 100644
index 0000000000..a75656592f
Binary files /dev/null and b/public/images/emoji/twitter/airplane_arriving.png differ
diff --git a/public/images/emoji/twitter/airplane_departure.png b/public/images/emoji/twitter/airplane_departure.png
new file mode 100644
index 0000000000..dc86670a86
Binary files /dev/null and b/public/images/emoji/twitter/airplane_departure.png differ
diff --git a/public/images/emoji/twitter/airplane_small.png b/public/images/emoji/twitter/airplane_small.png
new file mode 100644
index 0000000000..6a67b428f9
Binary files /dev/null and b/public/images/emoji/twitter/airplane_small.png differ
diff --git a/public/images/emoji/twitter/alembic.png b/public/images/emoji/twitter/alembic.png
new file mode 100644
index 0000000000..f450e6da1f
Binary files /dev/null and b/public/images/emoji/twitter/alembic.png differ
diff --git a/public/images/emoji/twitter/amphora.png b/public/images/emoji/twitter/amphora.png
new file mode 100644
index 0000000000..550f047067
Binary files /dev/null and b/public/images/emoji/twitter/amphora.png differ
diff --git a/public/images/emoji/twitter/anger_right.png b/public/images/emoji/twitter/anger_right.png
new file mode 100644
index 0000000000..d6e6ffd819
Binary files /dev/null and b/public/images/emoji/twitter/anger_right.png differ
diff --git a/public/images/emoji/twitter/atom.png b/public/images/emoji/twitter/atom.png
new file mode 100644
index 0000000000..e1203eec7d
Binary files /dev/null and b/public/images/emoji/twitter/atom.png differ
diff --git a/public/images/emoji/twitter/badminton.png b/public/images/emoji/twitter/badminton.png
new file mode 100644
index 0000000000..86cf6f1465
Binary files /dev/null and b/public/images/emoji/twitter/badminton.png differ
diff --git a/public/images/emoji/twitter/ballot_box.png b/public/images/emoji/twitter/ballot_box.png
new file mode 100644
index 0000000000..583ec9c01d
Binary files /dev/null and b/public/images/emoji/twitter/ballot_box.png differ
diff --git a/public/images/emoji/twitter/basketball_player.png b/public/images/emoji/twitter/basketball_player.png
new file mode 100644
index 0000000000..8b98c38994
Binary files /dev/null and b/public/images/emoji/twitter/basketball_player.png differ
diff --git a/public/images/emoji/twitter/beach.png b/public/images/emoji/twitter/beach.png
new file mode 100644
index 0000000000..16509a7e8d
Binary files /dev/null and b/public/images/emoji/twitter/beach.png differ
diff --git a/public/images/emoji/twitter/beach_umbrella.png b/public/images/emoji/twitter/beach_umbrella.png
new file mode 100644
index 0000000000..2bb23697b7
Binary files /dev/null and b/public/images/emoji/twitter/beach_umbrella.png differ
diff --git a/public/images/emoji/twitter/bed.png b/public/images/emoji/twitter/bed.png
new file mode 100644
index 0000000000..4680571709
Binary files /dev/null and b/public/images/emoji/twitter/bed.png differ
diff --git a/public/images/emoji/twitter/bellhop.png b/public/images/emoji/twitter/bellhop.png
new file mode 100644
index 0000000000..07c6badfda
Binary files /dev/null and b/public/images/emoji/twitter/bellhop.png differ
diff --git a/public/images/emoji/twitter/biohazard.png b/public/images/emoji/twitter/biohazard.png
new file mode 100644
index 0000000000..1ef96832a0
Binary files /dev/null and b/public/images/emoji/twitter/biohazard.png differ
diff --git a/public/images/emoji/twitter/bow_and_arrow.png b/public/images/emoji/twitter/bow_and_arrow.png
new file mode 100644
index 0000000000..f50a1389fe
Binary files /dev/null and b/public/images/emoji/twitter/bow_and_arrow.png differ
diff --git a/public/images/emoji/twitter/burrito.png b/public/images/emoji/twitter/burrito.png
new file mode 100644
index 0000000000..74894241cc
Binary files /dev/null and b/public/images/emoji/twitter/burrito.png differ
diff --git a/public/images/emoji/twitter/calendar_spiral.png b/public/images/emoji/twitter/calendar_spiral.png
new file mode 100644
index 0000000000..e2edcfeeb3
Binary files /dev/null and b/public/images/emoji/twitter/calendar_spiral.png differ
diff --git a/public/images/emoji/twitter/camera_with_flash.png b/public/images/emoji/twitter/camera_with_flash.png
new file mode 100644
index 0000000000..ddb3b744bf
Binary files /dev/null and b/public/images/emoji/twitter/camera_with_flash.png differ
diff --git a/public/images/emoji/twitter/camping.png b/public/images/emoji/twitter/camping.png
new file mode 100644
index 0000000000..1bcf75dfd4
Binary files /dev/null and b/public/images/emoji/twitter/camping.png differ
diff --git a/public/images/emoji/twitter/candle.png b/public/images/emoji/twitter/candle.png
new file mode 100644
index 0000000000..57a63deca6
Binary files /dev/null and b/public/images/emoji/twitter/candle.png differ
diff --git a/public/images/emoji/twitter/card_box.png b/public/images/emoji/twitter/card_box.png
new file mode 100644
index 0000000000..9a032fff61
Binary files /dev/null and b/public/images/emoji/twitter/card_box.png differ
diff --git a/public/images/emoji/twitter/chains.png b/public/images/emoji/twitter/chains.png
new file mode 100644
index 0000000000..15b22f2e75
Binary files /dev/null and b/public/images/emoji/twitter/chains.png differ
diff --git a/public/images/emoji/twitter/champagne.png b/public/images/emoji/twitter/champagne.png
new file mode 100644
index 0000000000..f27c9ea1e2
Binary files /dev/null and b/public/images/emoji/twitter/champagne.png differ
diff --git a/public/images/emoji/twitter/cheese.png b/public/images/emoji/twitter/cheese.png
new file mode 100644
index 0000000000..8566b2e59b
Binary files /dev/null and b/public/images/emoji/twitter/cheese.png differ
diff --git a/public/images/emoji/twitter/chipmunk.png b/public/images/emoji/twitter/chipmunk.png
new file mode 100644
index 0000000000..e46b2790d6
Binary files /dev/null and b/public/images/emoji/twitter/chipmunk.png differ
diff --git a/public/images/emoji/twitter/city_dusk.png b/public/images/emoji/twitter/city_dusk.png
new file mode 100644
index 0000000000..2fd9ace38c
Binary files /dev/null and b/public/images/emoji/twitter/city_dusk.png differ
diff --git a/public/images/emoji/twitter/cityscape.png b/public/images/emoji/twitter/cityscape.png
new file mode 100644
index 0000000000..74a0df8a9a
Binary files /dev/null and b/public/images/emoji/twitter/cityscape.png differ
diff --git a/public/images/emoji/twitter/classical_building.png b/public/images/emoji/twitter/classical_building.png
new file mode 100644
index 0000000000..4e9508d696
Binary files /dev/null and b/public/images/emoji/twitter/classical_building.png differ
diff --git a/public/images/emoji/twitter/clock.png b/public/images/emoji/twitter/clock.png
new file mode 100644
index 0000000000..028f514b37
Binary files /dev/null and b/public/images/emoji/twitter/clock.png differ
diff --git a/public/images/emoji/twitter/cloud_lightning.png b/public/images/emoji/twitter/cloud_lightning.png
new file mode 100644
index 0000000000..032be57a73
Binary files /dev/null and b/public/images/emoji/twitter/cloud_lightning.png differ
diff --git a/public/images/emoji/twitter/cloud_rain.png b/public/images/emoji/twitter/cloud_rain.png
new file mode 100644
index 0000000000..d7f1c98964
Binary files /dev/null and b/public/images/emoji/twitter/cloud_rain.png differ
diff --git a/public/images/emoji/twitter/cloud_snow.png b/public/images/emoji/twitter/cloud_snow.png
new file mode 100644
index 0000000000..e7c797ba25
Binary files /dev/null and b/public/images/emoji/twitter/cloud_snow.png differ
diff --git a/public/images/emoji/twitter/cloud_tornado.png b/public/images/emoji/twitter/cloud_tornado.png
new file mode 100644
index 0000000000..720f7faec9
Binary files /dev/null and b/public/images/emoji/twitter/cloud_tornado.png differ
diff --git a/public/images/emoji/twitter/coffin.png b/public/images/emoji/twitter/coffin.png
new file mode 100644
index 0000000000..c61f4912f4
Binary files /dev/null and b/public/images/emoji/twitter/coffin.png differ
diff --git a/public/images/emoji/twitter/comet.png b/public/images/emoji/twitter/comet.png
new file mode 100644
index 0000000000..4ddea9ad81
Binary files /dev/null and b/public/images/emoji/twitter/comet.png differ
diff --git a/public/images/emoji/twitter/compression.png b/public/images/emoji/twitter/compression.png
new file mode 100644
index 0000000000..b22237fb7f
Binary files /dev/null and b/public/images/emoji/twitter/compression.png differ
diff --git a/public/images/emoji/twitter/construction_site.png b/public/images/emoji/twitter/construction_site.png
new file mode 100644
index 0000000000..082a743265
Binary files /dev/null and b/public/images/emoji/twitter/construction_site.png differ
diff --git a/public/images/emoji/twitter/control_knobs.png b/public/images/emoji/twitter/control_knobs.png
new file mode 100644
index 0000000000..336be91878
Binary files /dev/null and b/public/images/emoji/twitter/control_knobs.png differ
diff --git a/public/images/emoji/twitter/couch.png b/public/images/emoji/twitter/couch.png
new file mode 100644
index 0000000000..56a8bfa9ed
Binary files /dev/null and b/public/images/emoji/twitter/couch.png differ
diff --git a/public/images/emoji/twitter/crab.png b/public/images/emoji/twitter/crab.png
new file mode 100644
index 0000000000..021356a53d
Binary files /dev/null and b/public/images/emoji/twitter/crab.png differ
diff --git a/public/images/emoji/twitter/crayon.png b/public/images/emoji/twitter/crayon.png
new file mode 100644
index 0000000000..d309e3ba3a
Binary files /dev/null and b/public/images/emoji/twitter/crayon.png differ
diff --git a/public/images/emoji/twitter/cricket.png b/public/images/emoji/twitter/cricket.png
new file mode 100644
index 0000000000..128d9efa82
Binary files /dev/null and b/public/images/emoji/twitter/cricket.png differ
diff --git a/public/images/emoji/twitter/cross.png b/public/images/emoji/twitter/cross.png
new file mode 100644
index 0000000000..53f8e5cd4b
Binary files /dev/null and b/public/images/emoji/twitter/cross.png differ
diff --git a/public/images/emoji/twitter/crossed_swords.png b/public/images/emoji/twitter/crossed_swords.png
new file mode 100644
index 0000000000..ec1da04367
Binary files /dev/null and b/public/images/emoji/twitter/crossed_swords.png differ
diff --git a/public/images/emoji/twitter/cruise_ship.png b/public/images/emoji/twitter/cruise_ship.png
new file mode 100644
index 0000000000..99ea24ed75
Binary files /dev/null and b/public/images/emoji/twitter/cruise_ship.png differ
diff --git a/public/images/emoji/twitter/dagger.png b/public/images/emoji/twitter/dagger.png
new file mode 100644
index 0000000000..85607ff4c0
Binary files /dev/null and b/public/images/emoji/twitter/dagger.png differ
diff --git a/public/images/emoji/twitter/dark_sunglasses.png b/public/images/emoji/twitter/dark_sunglasses.png
new file mode 100644
index 0000000000..5e20bb49f5
Binary files /dev/null and b/public/images/emoji/twitter/dark_sunglasses.png differ
diff --git a/public/images/emoji/twitter/desert.png b/public/images/emoji/twitter/desert.png
new file mode 100644
index 0000000000..3ec8a867b4
Binary files /dev/null and b/public/images/emoji/twitter/desert.png differ
diff --git a/public/images/emoji/twitter/desktop.png b/public/images/emoji/twitter/desktop.png
new file mode 100644
index 0000000000..ba57371eba
Binary files /dev/null and b/public/images/emoji/twitter/desktop.png differ
diff --git a/public/images/emoji/twitter/dividers.png b/public/images/emoji/twitter/dividers.png
new file mode 100644
index 0000000000..fe01846bb5
Binary files /dev/null and b/public/images/emoji/twitter/dividers.png differ
diff --git a/public/images/emoji/twitter/dove.png b/public/images/emoji/twitter/dove.png
new file mode 100644
index 0000000000..c303dda429
Binary files /dev/null and b/public/images/emoji/twitter/dove.png differ
diff --git a/public/images/emoji/twitter/eye.png b/public/images/emoji/twitter/eye.png
new file mode 100644
index 0000000000..182e105230
Binary files /dev/null and b/public/images/emoji/twitter/eye.png differ
diff --git a/public/images/emoji/twitter/ferry.png b/public/images/emoji/twitter/ferry.png
new file mode 100644
index 0000000000..26633aad4d
Binary files /dev/null and b/public/images/emoji/twitter/ferry.png differ
diff --git a/public/images/emoji/twitter/field_hockey.png b/public/images/emoji/twitter/field_hockey.png
new file mode 100644
index 0000000000..1021200777
Binary files /dev/null and b/public/images/emoji/twitter/field_hockey.png differ
diff --git a/public/images/emoji/twitter/file_cabinet.png b/public/images/emoji/twitter/file_cabinet.png
new file mode 100644
index 0000000000..73162f3305
Binary files /dev/null and b/public/images/emoji/twitter/file_cabinet.png differ
diff --git a/public/images/emoji/twitter/film_frames.png b/public/images/emoji/twitter/film_frames.png
new file mode 100644
index 0000000000..f0fcd6fc1d
Binary files /dev/null and b/public/images/emoji/twitter/film_frames.png differ
diff --git a/public/images/emoji/twitter/flag_black.png b/public/images/emoji/twitter/flag_black.png
new file mode 100644
index 0000000000..c8d8e24c3a
Binary files /dev/null and b/public/images/emoji/twitter/flag_black.png differ
diff --git a/public/images/emoji/twitter/flag_cn.png b/public/images/emoji/twitter/flag_cn.png
new file mode 100644
index 0000000000..3c8867958c
Binary files /dev/null and b/public/images/emoji/twitter/flag_cn.png differ
diff --git a/public/images/emoji/twitter/flag_de.png b/public/images/emoji/twitter/flag_de.png
new file mode 100644
index 0000000000..8df6465dfe
Binary files /dev/null and b/public/images/emoji/twitter/flag_de.png differ
diff --git a/public/images/emoji/twitter/flag_es.png b/public/images/emoji/twitter/flag_es.png
new file mode 100644
index 0000000000..4f5942de64
Binary files /dev/null and b/public/images/emoji/twitter/flag_es.png differ
diff --git a/public/images/emoji/twitter/flag_fr.png b/public/images/emoji/twitter/flag_fr.png
new file mode 100644
index 0000000000..1818a910e9
Binary files /dev/null and b/public/images/emoji/twitter/flag_fr.png differ
diff --git a/public/images/emoji/twitter/flag_gb.png b/public/images/emoji/twitter/flag_gb.png
new file mode 100644
index 0000000000..fa1e1d6580
Binary files /dev/null and b/public/images/emoji/twitter/flag_gb.png differ
diff --git a/public/images/emoji/twitter/flag_it.png b/public/images/emoji/twitter/flag_it.png
new file mode 100644
index 0000000000..556a8df4b2
Binary files /dev/null and b/public/images/emoji/twitter/flag_it.png differ
diff --git a/public/images/emoji/twitter/flag_jp.png b/public/images/emoji/twitter/flag_jp.png
new file mode 100644
index 0000000000..53fabdb484
Binary files /dev/null and b/public/images/emoji/twitter/flag_jp.png differ
diff --git a/public/images/emoji/twitter/flag_kr.png b/public/images/emoji/twitter/flag_kr.png
new file mode 100644
index 0000000000..2132a435e3
Binary files /dev/null and b/public/images/emoji/twitter/flag_kr.png differ
diff --git a/public/images/emoji/twitter/flag_ru.png b/public/images/emoji/twitter/flag_ru.png
new file mode 100644
index 0000000000..7988099751
Binary files /dev/null and b/public/images/emoji/twitter/flag_ru.png differ
diff --git a/public/images/emoji/twitter/flag_us.png b/public/images/emoji/twitter/flag_us.png
new file mode 100644
index 0000000000..d2d67ab784
Binary files /dev/null and b/public/images/emoji/twitter/flag_us.png differ
diff --git a/public/images/emoji/twitter/flag_white.png b/public/images/emoji/twitter/flag_white.png
new file mode 100644
index 0000000000..68543be8f2
Binary files /dev/null and b/public/images/emoji/twitter/flag_white.png differ
diff --git a/public/images/emoji/twitter/fleur-de-lis.png b/public/images/emoji/twitter/fleur-de-lis.png
new file mode 100644
index 0000000000..eaa91aeb3a
Binary files /dev/null and b/public/images/emoji/twitter/fleur-de-lis.png differ
diff --git a/public/images/emoji/twitter/fog.png b/public/images/emoji/twitter/fog.png
new file mode 100644
index 0000000000..f8aee2c7b5
Binary files /dev/null and b/public/images/emoji/twitter/fog.png differ
diff --git a/public/images/emoji/twitter/fork_knife_plate.png b/public/images/emoji/twitter/fork_knife_plate.png
new file mode 100644
index 0000000000..693fa161c6
Binary files /dev/null and b/public/images/emoji/twitter/fork_knife_plate.png differ
diff --git a/public/images/emoji/twitter/frame_photo.png b/public/images/emoji/twitter/frame_photo.png
new file mode 100644
index 0000000000..c498052425
Binary files /dev/null and b/public/images/emoji/twitter/frame_photo.png differ
diff --git a/public/images/emoji/twitter/frowning2.png b/public/images/emoji/twitter/frowning2.png
new file mode 100644
index 0000000000..0b8335cd57
Binary files /dev/null and b/public/images/emoji/twitter/frowning2.png differ
diff --git a/public/images/emoji/twitter/gear.png b/public/images/emoji/twitter/gear.png
new file mode 100644
index 0000000000..b85014eca3
Binary files /dev/null and b/public/images/emoji/twitter/gear.png differ
diff --git a/public/images/emoji/twitter/golfer.png b/public/images/emoji/twitter/golfer.png
new file mode 100644
index 0000000000..e13b10d9e6
Binary files /dev/null and b/public/images/emoji/twitter/golfer.png differ
diff --git a/public/images/emoji/twitter/hammer_pick.png b/public/images/emoji/twitter/hammer_pick.png
new file mode 100644
index 0000000000..3243f0a422
Binary files /dev/null and b/public/images/emoji/twitter/hammer_pick.png differ
diff --git a/public/images/emoji/twitter/hand_splayed.png b/public/images/emoji/twitter/hand_splayed.png
new file mode 100644
index 0000000000..cf2dcda2dc
Binary files /dev/null and b/public/images/emoji/twitter/hand_splayed.png differ
diff --git a/public/images/emoji/twitter/head_bandage.png b/public/images/emoji/twitter/head_bandage.png
new file mode 100644
index 0000000000..3be8843a96
Binary files /dev/null and b/public/images/emoji/twitter/head_bandage.png differ
diff --git a/public/images/emoji/twitter/heart_exclamation.png b/public/images/emoji/twitter/heart_exclamation.png
new file mode 100644
index 0000000000..adcc6238e0
Binary files /dev/null and b/public/images/emoji/twitter/heart_exclamation.png differ
diff --git a/public/images/emoji/twitter/helmet_with_cross.png b/public/images/emoji/twitter/helmet_with_cross.png
new file mode 100644
index 0000000000..5d8a20a6b1
Binary files /dev/null and b/public/images/emoji/twitter/helmet_with_cross.png differ
diff --git a/public/images/emoji/twitter/hockey.png b/public/images/emoji/twitter/hockey.png
new file mode 100644
index 0000000000..0959352b88
Binary files /dev/null and b/public/images/emoji/twitter/hockey.png differ
diff --git a/public/images/emoji/twitter/hole.png b/public/images/emoji/twitter/hole.png
new file mode 100644
index 0000000000..0f35340287
Binary files /dev/null and b/public/images/emoji/twitter/hole.png differ
diff --git a/public/images/emoji/twitter/homes.png b/public/images/emoji/twitter/homes.png
new file mode 100644
index 0000000000..42fdacd954
Binary files /dev/null and b/public/images/emoji/twitter/homes.png differ
diff --git a/public/images/emoji/twitter/hot_pepper.png b/public/images/emoji/twitter/hot_pepper.png
new file mode 100644
index 0000000000..c0f7d3a8f0
Binary files /dev/null and b/public/images/emoji/twitter/hot_pepper.png differ
diff --git a/public/images/emoji/twitter/hotdog.png b/public/images/emoji/twitter/hotdog.png
new file mode 100644
index 0000000000..9d5050a3c9
Binary files /dev/null and b/public/images/emoji/twitter/hotdog.png differ
diff --git a/public/images/emoji/twitter/house_abandoned.png b/public/images/emoji/twitter/house_abandoned.png
new file mode 100644
index 0000000000..4ca92ee5ca
Binary files /dev/null and b/public/images/emoji/twitter/house_abandoned.png differ
diff --git a/public/images/emoji/twitter/hugging.png b/public/images/emoji/twitter/hugging.png
new file mode 100644
index 0000000000..aa07844841
Binary files /dev/null and b/public/images/emoji/twitter/hugging.png differ
diff --git a/public/images/emoji/twitter/ice_skate.png b/public/images/emoji/twitter/ice_skate.png
new file mode 100644
index 0000000000..373137fb1d
Binary files /dev/null and b/public/images/emoji/twitter/ice_skate.png differ
diff --git a/public/images/emoji/twitter/island.png b/public/images/emoji/twitter/island.png
new file mode 100644
index 0000000000..8be357d21f
Binary files /dev/null and b/public/images/emoji/twitter/island.png differ
diff --git a/public/images/emoji/twitter/joystick.png b/public/images/emoji/twitter/joystick.png
new file mode 100644
index 0000000000..2cb7d212e2
Binary files /dev/null and b/public/images/emoji/twitter/joystick.png differ
diff --git a/public/images/emoji/twitter/kaaba.png b/public/images/emoji/twitter/kaaba.png
new file mode 100644
index 0000000000..1f4914e706
Binary files /dev/null and b/public/images/emoji/twitter/kaaba.png differ
diff --git a/public/images/emoji/twitter/key2.png b/public/images/emoji/twitter/key2.png
new file mode 100644
index 0000000000..bb0baeeb6d
Binary files /dev/null and b/public/images/emoji/twitter/key2.png differ
diff --git a/public/images/emoji/twitter/keyboard.png b/public/images/emoji/twitter/keyboard.png
new file mode 100644
index 0000000000..35faa872ef
Binary files /dev/null and b/public/images/emoji/twitter/keyboard.png differ
diff --git a/public/images/emoji/twitter/label.png b/public/images/emoji/twitter/label.png
new file mode 100644
index 0000000000..b455f5684d
Binary files /dev/null and b/public/images/emoji/twitter/label.png differ
diff --git a/public/images/emoji/twitter/level_slider.png b/public/images/emoji/twitter/level_slider.png
new file mode 100644
index 0000000000..560cb59a09
Binary files /dev/null and b/public/images/emoji/twitter/level_slider.png differ
diff --git a/public/images/emoji/twitter/levitate.png b/public/images/emoji/twitter/levitate.png
new file mode 100644
index 0000000000..3a3c4b9894
Binary files /dev/null and b/public/images/emoji/twitter/levitate.png differ
diff --git a/public/images/emoji/twitter/lifter.png b/public/images/emoji/twitter/lifter.png
new file mode 100644
index 0000000000..5f43a35776
Binary files /dev/null and b/public/images/emoji/twitter/lifter.png differ
diff --git a/public/images/emoji/twitter/lion_face.png b/public/images/emoji/twitter/lion_face.png
new file mode 100644
index 0000000000..7e818c2c11
Binary files /dev/null and b/public/images/emoji/twitter/lion_face.png differ
diff --git a/public/images/emoji/twitter/map.png b/public/images/emoji/twitter/map.png
new file mode 100644
index 0000000000..c7a727c28f
Binary files /dev/null and b/public/images/emoji/twitter/map.png differ
diff --git a/public/images/emoji/twitter/medal.png b/public/images/emoji/twitter/medal.png
new file mode 100644
index 0000000000..c56f77095f
Binary files /dev/null and b/public/images/emoji/twitter/medal.png differ
diff --git a/public/images/emoji/twitter/menorah.png b/public/images/emoji/twitter/menorah.png
new file mode 100644
index 0000000000..f63c13ac9b
Binary files /dev/null and b/public/images/emoji/twitter/menorah.png differ
diff --git a/public/images/emoji/twitter/metal.png b/public/images/emoji/twitter/metal.png
new file mode 100644
index 0000000000..6107226f13
Binary files /dev/null and b/public/images/emoji/twitter/metal.png differ
diff --git a/public/images/emoji/twitter/microphone2.png b/public/images/emoji/twitter/microphone2.png
new file mode 100644
index 0000000000..a256e3d491
Binary files /dev/null and b/public/images/emoji/twitter/microphone2.png differ
diff --git a/public/images/emoji/twitter/middle_finger.png b/public/images/emoji/twitter/middle_finger.png
new file mode 100644
index 0000000000..ba7dcb95d6
Binary files /dev/null and b/public/images/emoji/twitter/middle_finger.png differ
diff --git a/public/images/emoji/twitter/military_medal.png b/public/images/emoji/twitter/military_medal.png
new file mode 100644
index 0000000000..afa7ac77e8
Binary files /dev/null and b/public/images/emoji/twitter/military_medal.png differ
diff --git a/public/images/emoji/twitter/money_mouth.png b/public/images/emoji/twitter/money_mouth.png
new file mode 100644
index 0000000000..c1f7dcaa33
Binary files /dev/null and b/public/images/emoji/twitter/money_mouth.png differ
diff --git a/public/images/emoji/twitter/mosque.png b/public/images/emoji/twitter/mosque.png
new file mode 100644
index 0000000000..570f6971c6
Binary files /dev/null and b/public/images/emoji/twitter/mosque.png differ
diff --git a/public/images/emoji/twitter/motorboat.png b/public/images/emoji/twitter/motorboat.png
new file mode 100644
index 0000000000..a849f0683a
Binary files /dev/null and b/public/images/emoji/twitter/motorboat.png differ
diff --git a/public/images/emoji/twitter/motorcycle.png b/public/images/emoji/twitter/motorcycle.png
new file mode 100644
index 0000000000..89f8265e3f
Binary files /dev/null and b/public/images/emoji/twitter/motorcycle.png differ
diff --git a/public/images/emoji/twitter/motorway.png b/public/images/emoji/twitter/motorway.png
new file mode 100644
index 0000000000..8bc3caf951
Binary files /dev/null and b/public/images/emoji/twitter/motorway.png differ
diff --git a/public/images/emoji/twitter/mountain.png b/public/images/emoji/twitter/mountain.png
new file mode 100644
index 0000000000..01384a0d1e
Binary files /dev/null and b/public/images/emoji/twitter/mountain.png differ
diff --git a/public/images/emoji/twitter/mountain_snow.png b/public/images/emoji/twitter/mountain_snow.png
new file mode 100644
index 0000000000..05f51304e9
Binary files /dev/null and b/public/images/emoji/twitter/mountain_snow.png differ
diff --git a/public/images/emoji/twitter/mouse_three_button.png b/public/images/emoji/twitter/mouse_three_button.png
new file mode 100644
index 0000000000..08541826f4
Binary files /dev/null and b/public/images/emoji/twitter/mouse_three_button.png differ
diff --git a/public/images/emoji/twitter/nerd.png b/public/images/emoji/twitter/nerd.png
new file mode 100644
index 0000000000..1d14fc303c
Binary files /dev/null and b/public/images/emoji/twitter/nerd.png differ
diff --git a/public/images/emoji/twitter/newspaper2.png b/public/images/emoji/twitter/newspaper2.png
new file mode 100644
index 0000000000..bc184c041e
Binary files /dev/null and b/public/images/emoji/twitter/newspaper2.png differ
diff --git a/public/images/emoji/twitter/notepad_spiral.png b/public/images/emoji/twitter/notepad_spiral.png
new file mode 100644
index 0000000000..b57a95c28a
Binary files /dev/null and b/public/images/emoji/twitter/notepad_spiral.png differ
diff --git a/public/images/emoji/twitter/oil.png b/public/images/emoji/twitter/oil.png
new file mode 100644
index 0000000000..6aab4045d7
Binary files /dev/null and b/public/images/emoji/twitter/oil.png differ
diff --git a/public/images/emoji/twitter/om_symbol.png b/public/images/emoji/twitter/om_symbol.png
new file mode 100644
index 0000000000..6b59c98032
Binary files /dev/null and b/public/images/emoji/twitter/om_symbol.png differ
diff --git a/public/images/emoji/twitter/orthodox_cross.png b/public/images/emoji/twitter/orthodox_cross.png
new file mode 100644
index 0000000000..796b51f9d1
Binary files /dev/null and b/public/images/emoji/twitter/orthodox_cross.png differ
diff --git a/public/images/emoji/twitter/paintbrush.png b/public/images/emoji/twitter/paintbrush.png
new file mode 100644
index 0000000000..94b575de12
Binary files /dev/null and b/public/images/emoji/twitter/paintbrush.png differ
diff --git a/public/images/emoji/twitter/paperclips.png b/public/images/emoji/twitter/paperclips.png
new file mode 100644
index 0000000000..126b439269
Binary files /dev/null and b/public/images/emoji/twitter/paperclips.png differ
diff --git a/public/images/emoji/twitter/park.png b/public/images/emoji/twitter/park.png
new file mode 100644
index 0000000000..5dec43509b
Binary files /dev/null and b/public/images/emoji/twitter/park.png differ
diff --git a/public/images/emoji/twitter/pause_button.png b/public/images/emoji/twitter/pause_button.png
new file mode 100644
index 0000000000..78d4ae8ac9
Binary files /dev/null and b/public/images/emoji/twitter/pause_button.png differ
diff --git a/public/images/emoji/twitter/peace.png b/public/images/emoji/twitter/peace.png
new file mode 100644
index 0000000000..74e529b159
Binary files /dev/null and b/public/images/emoji/twitter/peace.png differ
diff --git a/public/images/emoji/twitter/pen_ballpoint.png b/public/images/emoji/twitter/pen_ballpoint.png
new file mode 100644
index 0000000000..6219ae26cc
Binary files /dev/null and b/public/images/emoji/twitter/pen_ballpoint.png differ
diff --git a/public/images/emoji/twitter/pen_fountain.png b/public/images/emoji/twitter/pen_fountain.png
new file mode 100644
index 0000000000..f2579410b2
Binary files /dev/null and b/public/images/emoji/twitter/pen_fountain.png differ
diff --git a/public/images/emoji/twitter/pick.png b/public/images/emoji/twitter/pick.png
new file mode 100644
index 0000000000..696accaff2
Binary files /dev/null and b/public/images/emoji/twitter/pick.png differ
diff --git a/public/images/emoji/twitter/ping_pong.png b/public/images/emoji/twitter/ping_pong.png
new file mode 100644
index 0000000000..44de4d9510
Binary files /dev/null and b/public/images/emoji/twitter/ping_pong.png differ
diff --git a/public/images/emoji/twitter/place_of_worship.png b/public/images/emoji/twitter/place_of_worship.png
new file mode 100644
index 0000000000..b8e0996955
Binary files /dev/null and b/public/images/emoji/twitter/place_of_worship.png differ
diff --git a/public/images/emoji/twitter/play_pause.png b/public/images/emoji/twitter/play_pause.png
new file mode 100644
index 0000000000..0839a426ee
Binary files /dev/null and b/public/images/emoji/twitter/play_pause.png differ
diff --git a/public/images/emoji/twitter/popcorn.png b/public/images/emoji/twitter/popcorn.png
new file mode 100644
index 0000000000..6f4e0f0b6b
Binary files /dev/null and b/public/images/emoji/twitter/popcorn.png differ
diff --git a/public/images/emoji/twitter/prayer_beads.png b/public/images/emoji/twitter/prayer_beads.png
new file mode 100644
index 0000000000..e7709c6cb2
Binary files /dev/null and b/public/images/emoji/twitter/prayer_beads.png differ
diff --git a/public/images/emoji/twitter/printer.png b/public/images/emoji/twitter/printer.png
new file mode 100644
index 0000000000..58961b6b09
Binary files /dev/null and b/public/images/emoji/twitter/printer.png differ
diff --git a/public/images/emoji/twitter/projector.png b/public/images/emoji/twitter/projector.png
new file mode 100644
index 0000000000..6135a3366c
Binary files /dev/null and b/public/images/emoji/twitter/projector.png differ
diff --git a/public/images/emoji/twitter/race_car.png b/public/images/emoji/twitter/race_car.png
new file mode 100644
index 0000000000..894f1b62c2
Binary files /dev/null and b/public/images/emoji/twitter/race_car.png differ
diff --git a/public/images/emoji/twitter/radioactive.png b/public/images/emoji/twitter/radioactive.png
new file mode 100644
index 0000000000..2c4d0ab579
Binary files /dev/null and b/public/images/emoji/twitter/radioactive.png differ
diff --git a/public/images/emoji/twitter/railway_track.png b/public/images/emoji/twitter/railway_track.png
new file mode 100644
index 0000000000..8a09aa1ede
Binary files /dev/null and b/public/images/emoji/twitter/railway_track.png differ
diff --git a/public/images/emoji/twitter/record_button.png b/public/images/emoji/twitter/record_button.png
new file mode 100644
index 0000000000..3725e1c215
Binary files /dev/null and b/public/images/emoji/twitter/record_button.png differ
diff --git a/public/images/emoji/twitter/reminder_ribbon.png b/public/images/emoji/twitter/reminder_ribbon.png
new file mode 100644
index 0000000000..09d8d0e308
Binary files /dev/null and b/public/images/emoji/twitter/reminder_ribbon.png differ
diff --git a/public/images/emoji/twitter/robot.png b/public/images/emoji/twitter/robot.png
new file mode 100644
index 0000000000..03eff68a69
Binary files /dev/null and b/public/images/emoji/twitter/robot.png differ
diff --git a/public/images/emoji/twitter/rolling_eyes.png b/public/images/emoji/twitter/rolling_eyes.png
new file mode 100644
index 0000000000..e2e047be10
Binary files /dev/null and b/public/images/emoji/twitter/rolling_eyes.png differ
diff --git a/public/images/emoji/twitter/rosette.png b/public/images/emoji/twitter/rosette.png
new file mode 100644
index 0000000000..3ef48e7eb1
Binary files /dev/null and b/public/images/emoji/twitter/rosette.png differ
diff --git a/public/images/emoji/twitter/satellite_orbital.png b/public/images/emoji/twitter/satellite_orbital.png
new file mode 100644
index 0000000000..81715516af
Binary files /dev/null and b/public/images/emoji/twitter/satellite_orbital.png differ
diff --git a/public/images/emoji/twitter/scales.png b/public/images/emoji/twitter/scales.png
new file mode 100644
index 0000000000..1647464628
Binary files /dev/null and b/public/images/emoji/twitter/scales.png differ
diff --git a/public/images/emoji/twitter/scorpion.png b/public/images/emoji/twitter/scorpion.png
new file mode 100644
index 0000000000..cf0f2e7e1f
Binary files /dev/null and b/public/images/emoji/twitter/scorpion.png differ
diff --git a/public/images/emoji/twitter/shamrock.png b/public/images/emoji/twitter/shamrock.png
new file mode 100644
index 0000000000..275a505981
Binary files /dev/null and b/public/images/emoji/twitter/shamrock.png differ
diff --git a/public/images/emoji/twitter/shield.png b/public/images/emoji/twitter/shield.png
new file mode 100644
index 0000000000..51ce00cd20
Binary files /dev/null and b/public/images/emoji/twitter/shield.png differ
diff --git a/public/images/emoji/twitter/shinto_shrine.png b/public/images/emoji/twitter/shinto_shrine.png
new file mode 100644
index 0000000000..d5c11c548d
Binary files /dev/null and b/public/images/emoji/twitter/shinto_shrine.png differ
diff --git a/public/images/emoji/twitter/shopping_bags.png b/public/images/emoji/twitter/shopping_bags.png
new file mode 100644
index 0000000000..685a70cdcd
Binary files /dev/null and b/public/images/emoji/twitter/shopping_bags.png differ
diff --git a/public/images/emoji/twitter/skier.png b/public/images/emoji/twitter/skier.png
new file mode 100644
index 0000000000..0a99f58df8
Binary files /dev/null and b/public/images/emoji/twitter/skier.png differ
diff --git a/public/images/emoji/twitter/skull_crossbones.png b/public/images/emoji/twitter/skull_crossbones.png
new file mode 100644
index 0000000000..8aebd69f28
Binary files /dev/null and b/public/images/emoji/twitter/skull_crossbones.png differ
diff --git a/public/images/emoji/twitter/sleeping_accommodation.png b/public/images/emoji/twitter/sleeping_accommodation.png
new file mode 100644
index 0000000000..aab85aeaa5
Binary files /dev/null and b/public/images/emoji/twitter/sleeping_accommodation.png differ
diff --git a/public/images/emoji/twitter/slight_frown.png b/public/images/emoji/twitter/slight_frown.png
new file mode 100644
index 0000000000..3f3c9251aa
Binary files /dev/null and b/public/images/emoji/twitter/slight_frown.png differ
diff --git a/public/images/emoji/twitter/slight_smile.png b/public/images/emoji/twitter/slight_smile.png
new file mode 100644
index 0000000000..4360c49ec5
Binary files /dev/null and b/public/images/emoji/twitter/slight_smile.png differ
diff --git a/public/images/emoji/twitter/snowman2.png b/public/images/emoji/twitter/snowman2.png
new file mode 100644
index 0000000000..8d53ae6e2e
Binary files /dev/null and b/public/images/emoji/twitter/snowman2.png differ
diff --git a/public/images/emoji/twitter/speaking_head.png b/public/images/emoji/twitter/speaking_head.png
new file mode 100644
index 0000000000..56d482de53
Binary files /dev/null and b/public/images/emoji/twitter/speaking_head.png differ
diff --git a/public/images/emoji/twitter/spider.png b/public/images/emoji/twitter/spider.png
new file mode 100644
index 0000000000..e3e128e540
Binary files /dev/null and b/public/images/emoji/twitter/spider.png differ
diff --git a/public/images/emoji/twitter/spider_web.png b/public/images/emoji/twitter/spider_web.png
new file mode 100644
index 0000000000..683a02c906
Binary files /dev/null and b/public/images/emoji/twitter/spider_web.png differ
diff --git a/public/images/emoji/twitter/spy.png b/public/images/emoji/twitter/spy.png
new file mode 100644
index 0000000000..5dfa1e366b
Binary files /dev/null and b/public/images/emoji/twitter/spy.png differ
diff --git a/public/images/emoji/twitter/stadium.png b/public/images/emoji/twitter/stadium.png
new file mode 100644
index 0000000000..6e56ffd85c
Binary files /dev/null and b/public/images/emoji/twitter/stadium.png differ
diff --git a/public/images/emoji/twitter/star_and_crescent.png b/public/images/emoji/twitter/star_and_crescent.png
new file mode 100644
index 0000000000..ae1f138691
Binary files /dev/null and b/public/images/emoji/twitter/star_and_crescent.png differ
diff --git a/public/images/emoji/twitter/star_of_david.png b/public/images/emoji/twitter/star_of_david.png
new file mode 100644
index 0000000000..efe21ecdfe
Binary files /dev/null and b/public/images/emoji/twitter/star_of_david.png differ
diff --git a/public/images/emoji/twitter/stop_button.png b/public/images/emoji/twitter/stop_button.png
new file mode 100644
index 0000000000..8b8953809a
Binary files /dev/null and b/public/images/emoji/twitter/stop_button.png differ
diff --git a/public/images/emoji/twitter/stopwatch.png b/public/images/emoji/twitter/stopwatch.png
new file mode 100644
index 0000000000..91ee4827ad
Binary files /dev/null and b/public/images/emoji/twitter/stopwatch.png differ
diff --git a/public/images/emoji/twitter/synagogue.png b/public/images/emoji/twitter/synagogue.png
new file mode 100644
index 0000000000..9dc959850a
Binary files /dev/null and b/public/images/emoji/twitter/synagogue.png differ
diff --git a/public/images/emoji/twitter/taco.png b/public/images/emoji/twitter/taco.png
new file mode 100644
index 0000000000..fdb8752e1f
Binary files /dev/null and b/public/images/emoji/twitter/taco.png differ
diff --git a/public/images/emoji/twitter/ten.png b/public/images/emoji/twitter/ten.png
new file mode 100644
index 0000000000..9151e978ce
Binary files /dev/null and b/public/images/emoji/twitter/ten.png differ
diff --git a/public/images/emoji/twitter/thermometer.png b/public/images/emoji/twitter/thermometer.png
new file mode 100644
index 0000000000..53746a78bf
Binary files /dev/null and b/public/images/emoji/twitter/thermometer.png differ
diff --git a/public/images/emoji/twitter/thermometer_face.png b/public/images/emoji/twitter/thermometer_face.png
new file mode 100644
index 0000000000..c9440239c0
Binary files /dev/null and b/public/images/emoji/twitter/thermometer_face.png differ
diff --git a/public/images/emoji/twitter/thinking.png b/public/images/emoji/twitter/thinking.png
new file mode 100644
index 0000000000..41be4fd6bc
Binary files /dev/null and b/public/images/emoji/twitter/thinking.png differ
diff --git a/public/images/emoji/twitter/thunder_cloud_rain.png b/public/images/emoji/twitter/thunder_cloud_rain.png
new file mode 100644
index 0000000000..71c2af1396
Binary files /dev/null and b/public/images/emoji/twitter/thunder_cloud_rain.png differ
diff --git a/public/images/emoji/twitter/tickets.png b/public/images/emoji/twitter/tickets.png
new file mode 100644
index 0000000000..11c88ec854
Binary files /dev/null and b/public/images/emoji/twitter/tickets.png differ
diff --git a/public/images/emoji/twitter/timer.png b/public/images/emoji/twitter/timer.png
new file mode 100644
index 0000000000..c7f6d21c6c
Binary files /dev/null and b/public/images/emoji/twitter/timer.png differ
diff --git a/public/images/emoji/twitter/tools.png b/public/images/emoji/twitter/tools.png
new file mode 100644
index 0000000000..2448331da8
Binary files /dev/null and b/public/images/emoji/twitter/tools.png differ
diff --git a/public/images/emoji/twitter/track_next.png b/public/images/emoji/twitter/track_next.png
new file mode 100644
index 0000000000..9aafe8deb8
Binary files /dev/null and b/public/images/emoji/twitter/track_next.png differ
diff --git a/public/images/emoji/twitter/track_previous.png b/public/images/emoji/twitter/track_previous.png
new file mode 100644
index 0000000000..d6f3c89e27
Binary files /dev/null and b/public/images/emoji/twitter/track_previous.png differ
diff --git a/public/images/emoji/twitter/trackball.png b/public/images/emoji/twitter/trackball.png
new file mode 100644
index 0000000000..8205a4e843
Binary files /dev/null and b/public/images/emoji/twitter/trackball.png differ
diff --git a/public/images/emoji/twitter/turkey.png b/public/images/emoji/twitter/turkey.png
new file mode 100644
index 0000000000..20856a9e8b
Binary files /dev/null and b/public/images/emoji/twitter/turkey.png differ
diff --git a/public/images/emoji/twitter/umbrella2.png b/public/images/emoji/twitter/umbrella2.png
new file mode 100644
index 0000000000..24e72f080b
Binary files /dev/null and b/public/images/emoji/twitter/umbrella2.png differ
diff --git a/public/images/emoji/twitter/unicorn.png b/public/images/emoji/twitter/unicorn.png
new file mode 100644
index 0000000000..4afcbe217f
Binary files /dev/null and b/public/images/emoji/twitter/unicorn.png differ
diff --git a/public/images/emoji/twitter/upside_down.png b/public/images/emoji/twitter/upside_down.png
new file mode 100644
index 0000000000..e8abd43812
Binary files /dev/null and b/public/images/emoji/twitter/upside_down.png differ
diff --git a/public/images/emoji/twitter/urn.png b/public/images/emoji/twitter/urn.png
new file mode 100644
index 0000000000..cc65fe127e
Binary files /dev/null and b/public/images/emoji/twitter/urn.png differ
diff --git a/public/images/emoji/twitter/volleyball.png b/public/images/emoji/twitter/volleyball.png
new file mode 100644
index 0000000000..08edda7440
Binary files /dev/null and b/public/images/emoji/twitter/volleyball.png differ
diff --git a/public/images/emoji/twitter/vulcan.png b/public/images/emoji/twitter/vulcan.png
new file mode 100644
index 0000000000..72cc1170de
Binary files /dev/null and b/public/images/emoji/twitter/vulcan.png differ
diff --git a/public/images/emoji/twitter/wastebasket.png b/public/images/emoji/twitter/wastebasket.png
new file mode 100644
index 0000000000..9e8f4719ec
Binary files /dev/null and b/public/images/emoji/twitter/wastebasket.png differ
diff --git a/public/images/emoji/twitter/wheel_of_dharma.png b/public/images/emoji/twitter/wheel_of_dharma.png
new file mode 100644
index 0000000000..c4d0c56251
Binary files /dev/null and b/public/images/emoji/twitter/wheel_of_dharma.png differ
diff --git a/public/images/emoji/twitter/white_sun_cloud.png b/public/images/emoji/twitter/white_sun_cloud.png
new file mode 100644
index 0000000000..cabbfd2497
Binary files /dev/null and b/public/images/emoji/twitter/white_sun_cloud.png differ
diff --git a/public/images/emoji/twitter/white_sun_rain_cloud.png b/public/images/emoji/twitter/white_sun_rain_cloud.png
new file mode 100644
index 0000000000..1270388a29
Binary files /dev/null and b/public/images/emoji/twitter/white_sun_rain_cloud.png differ
diff --git a/public/images/emoji/twitter/white_sun_small_cloud.png b/public/images/emoji/twitter/white_sun_small_cloud.png
new file mode 100644
index 0000000000..8757d5503c
Binary files /dev/null and b/public/images/emoji/twitter/white_sun_small_cloud.png differ
diff --git a/public/images/emoji/twitter/wind_blowing_face.png b/public/images/emoji/twitter/wind_blowing_face.png
new file mode 100644
index 0000000000..190cfc18a8
Binary files /dev/null and b/public/images/emoji/twitter/wind_blowing_face.png differ
diff --git a/public/images/emoji/twitter/writing_hand.png b/public/images/emoji/twitter/writing_hand.png
new file mode 100644
index 0000000000..eb2e8c89b9
Binary files /dev/null and b/public/images/emoji/twitter/writing_hand.png differ
diff --git a/public/images/emoji/twitter/yin_yang.png b/public/images/emoji/twitter/yin_yang.png
new file mode 100644
index 0000000000..beb2a87dc3
Binary files /dev/null and b/public/images/emoji/twitter/yin_yang.png differ
diff --git a/public/images/emoji/twitter/zipper_mouth.png b/public/images/emoji/twitter/zipper_mouth.png
new file mode 100644
index 0000000000..d59236821b
Binary files /dev/null and b/public/images/emoji/twitter/zipper_mouth.png differ
diff --git a/script/import_scripts/phpbb3/importer.rb b/script/import_scripts/phpbb3/importer.rb
index f2c1dc9de1..9f88a73b2b 100644
--- a/script/import_scripts/phpbb3/importer.rb
+++ b/script/import_scripts/phpbb3/importer.rb
@@ -108,6 +108,29 @@ module ImportScripts::PhpBB3
end
end
+ # uncomment below lines to create permalink for categories
+ # def create_category(opts, import_id)
+ # new_category = super
+ # url = "viewforum.php?f=#{import_id}"
+ # if !Permalink.find_by(url: url)
+ # Permalink.create(url: url, category_id: new_category.id)
+ # end
+ # new_category
+ # end
+
+ # uncomment below lines to create permalink for topics
+ # def create_post(opts, import_id)
+ # post = super
+ # if post && (topic = post.topic) && (category = topic.category)
+ # url = "viewtopic.php?f=#{category.custom_fields["import_id"]}&t=#{opts[:import_topic_id]}"
+
+ # if !Permalink.find_by(url: url)
+ # Permalink.create(url: url, topic_id: topic.id)
+ # end
+ # end
+ # post
+ # end
+
def import_private_messages
if @settings.fix_private_messages
puts '', 'fixing private messages'
diff --git a/script/import_scripts/phpbb3/importers/post_importer.rb b/script/import_scripts/phpbb3/importers/post_importer.rb
index b6de98622f..a00335232c 100644
--- a/script/import_scripts/phpbb3/importers/post_importer.rb
+++ b/script/import_scripts/phpbb3/importers/post_importer.rb
@@ -28,7 +28,8 @@ module ImportScripts::PhpBB3
id: row[:post_id],
user_id: user_id,
created_at: Time.zone.at(row[:post_time]),
- raw: @text_processor.process_post(row[:post_text], attachments)
+ raw: @text_processor.process_post(row[:post_text], attachments),
+ import_topic_id: row[:topic_id]
}
if is_first_post
diff --git a/script/import_scripts/phpbb3/importers/user_importer.rb b/script/import_scripts/phpbb3/importers/user_importer.rb
index f1958ef147..ca50197a95 100644
--- a/script/import_scripts/phpbb3/importers/user_importer.rb
+++ b/script/import_scripts/phpbb3/importers/user_importer.rb
@@ -91,10 +91,12 @@ module ImportScripts::PhpBB3
end
if disable_email
- user.email_digests = false
- user.email_private_messages = false
- user.email_direct = false
- user.email_always = false
+ user_option = user.user_option
+ user_option.email_digests = false
+ user_option.email_private_messages = false
+ user_option.email_direct = false
+ user_option.email_always = false
+ user_option.save!
end
if user.save
diff --git a/script/import_scripts/phpbb3/support/smiley_processor.rb b/script/import_scripts/phpbb3/support/smiley_processor.rb
index 0b0785fd3f..342cadfaab 100644
--- a/script/import_scripts/phpbb3/support/smiley_processor.rb
+++ b/script/import_scripts/phpbb3/support/smiley_processor.rb
@@ -28,7 +28,7 @@ module ImportScripts::PhpBB3
def add_default_smilies
{
[':D', ':-D', ':grin:'] => ':smiley:',
- [':)', ':-)', ':smile:'] => ':slightly_smiling:',
+ [':)', ':-)', ':smile:'] => ':slight_smile:',
[';)', ';-)', ':wink:'] => ':wink:',
[':(', ':-(', ':sad:'] => ':frowning:',
[':o', ':-o', ':eek:'] => ':astonished:',
diff --git a/script/import_scripts/sourceforge.rb b/script/import_scripts/sourceforge.rb
new file mode 100644
index 0000000000..d1b85366f4
--- /dev/null
+++ b/script/import_scripts/sourceforge.rb
@@ -0,0 +1,137 @@
+require_relative 'base.rb'
+
+# Import script for SourceForge discussions.
+#
+# See the following instructions on how to export your discussions from SourceForge:
+# https://sourceforge.net/p/forge/documentation/Project%20Data%20Export/
+#
+# Change the constants (PROJECT_NAME and JSON_FILE) before running the importer!
+#
+# Use the following command to run the importer within the Docker container:
+# su discourse -c 'ruby /var/www/discourse/script/import_scripts/sourceforge.rb'
+
+class ImportScripts::Sourceforge < ImportScripts::Base
+ # When the URL of your project is https://sourceforge.net/projects/foo/
+ # than the value of PROJECT_NAME is 'foo'
+ PROJECT_NAME = 'project_name'
+
+ # This is the path to the discussion.json that you exported from SourceForge.
+ JSON_FILE = '/path/to/discussion.json'
+
+ def initialize
+ super
+
+ @system_user = Discourse.system_user
+ end
+
+ def execute
+ puts '', 'Importing from SourceForge...'
+
+ load_json
+
+ import_categories
+ import_topics
+ end
+
+ def load_json
+ @json = MultiJson.load(File.read(JSON_FILE), :symbolize_keys => true)
+ end
+
+ def import_categories
+ puts '', 'importing categories'
+
+ create_categories(@json[:forums]) do |forum|
+ {
+ id: forum[:shortname],
+ name: forum[:name],
+ post_create_action: proc do |category|
+ changes = {raw: forum[:description]}
+ opts = {revised_at: Time.now, bypass_bump: true}
+
+ post = category.topic.first_post
+ post.revise(@system_user, changes, opts)
+ end
+ }
+ end
+ end
+
+ def import_topics
+ puts '', 'importing posts'
+ imported_post_count = 0
+ total_post_count = count_posts
+
+ @json[:forums].each do |forum|
+ imported_category_id = @lookup.category_id_from_imported_category_id(forum[:shortname])
+
+ forum[:threads].each do |thread|
+ posts = thread[:posts]
+ next if posts.size == 0
+
+ first_post = posts[0]
+ first_post_id = post_id_of(thread, first_post)
+ imported_topic = nil
+
+ create_posts(posts, total: total_post_count, offset: imported_post_count) do |post|
+ mapped = {
+ id: "#{thread[:_id]}_#{post[:slug]}",
+ user_id: @system_user,
+ created_at: Time.zone.parse(post[:timestamp]),
+ raw: process_post_text(forum, thread, post)
+ }
+
+ if post == first_post
+ mapped[:category] = imported_category_id
+ mapped[:title] = thread[:subject][0...255]
+ else
+ if imported_topic.nil?
+ imported_topic = @lookup.topic_lookup_from_imported_post_id(first_post_id)
+ end
+
+ mapped[:topic_id] = imported_topic[:topic_id]
+ end
+
+ imported_post_count += 1
+ mapped
+ end
+ end
+ end
+ end
+
+ def count_posts
+ total_count = 0
+
+ @json[:forums].each do |forum|
+ forum[:threads].each do |thread|
+ total_count += thread[:posts].size
+ end
+ end
+
+ total_count
+ end
+
+ def post_id_of(thread, post)
+ "#{thread[:_id]}_#{post[:slug]}"
+ end
+
+ def process_post_text(forum, thread, post)
+ text = post[:text]
+ text.gsub!(/~{3,}/, '```') # Discourse doesn't recognize ~~~ as beginning/end of code blocks
+
+ # SourceForge doesn't allow symbols in usernames, so we are safe here.
+ # Well, unless it's the anonymous user, which has an evil asterisk in the JSON file...
+ username = post[:author]
+ username = 'anonymous' if username == '*anonymous'
+
+ # anonymous and nobody are nonexistent users. Make sure we don't create links for them.
+ user_without_profile = username == 'anonymous' || username == 'nobody'
+ user_link = user_without_profile ? username : "[#{username}](https://sourceforge.net/u/#{username}/)"
+
+ # Create a nice looking header for each imported post that links to the author's user profile and the old post.
+ post_date = Time.zone.parse(post[:timestamp]).strftime('%A, %B %d, %Y')
+ post_url = "https://sourceforge.net/p/#{PROJECT_NAME}/discussion/#{forum[:shortname]}/thread/#{thread[:_id]}/##{post[:slug]}"
+
+ "**#{user_link}** wrote on [#{post_date}](#{post_url}):\n\n#{text}"
+ end
+end
+
+ImportScripts::Sourceforge.new.perform
diff --git a/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb b/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb
index 35a3487d26..0456f616d4 100644
--- a/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb
+++ b/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb
@@ -3,10 +3,10 @@ require_dependency 'active_record/connection_adapters/postgresql_fallback_adapte
describe ActiveRecord::ConnectionHandling do
let(:replica_host) { "1.1.1.1" }
- let(:replica_port) { "6432" }
+ let(:replica_port) { 6432 }
let(:config) do
- ActiveRecord::Base.configurations["test"].merge({
+ ActiveRecord::Base.configurations[Rails.env].merge({
"adapter" => "postgresql_fallback",
"replica_host" => replica_host,
"replica_port" => replica_port
@@ -14,8 +14,7 @@ describe ActiveRecord::ConnectionHandling do
end
after do
- Discourse.disable_readonly_mode
- ::PostgreSQLFallbackHandler.instance.master = true
+ ::PostgreSQLFallbackHandler.instance.setup!
end
describe "#postgresql_fallback_connection" do
@@ -25,17 +24,39 @@ describe ActiveRecord::ConnectionHandling do
end
context 'when master server is down' do
+ let(:multisite_db) { "database_2" }
+
+ let(:multisite_config) do
+ {
+ host: 'localhost1',
+ port: 5432,
+ replica_host: replica_host,
+ replica_port: replica_port
+ }
+ end
+
before do
@replica_connection = mock('replica_connection')
end
- it 'should failover to a replica server' do
- ActiveRecord::Base.expects(:postgresql_connection).with(config).raises(PG::ConnectionBad)
- ActiveRecord::Base.expects(:verify_replica).with(@replica_connection)
+ after do
+ with_multisite_db(multisite_db) { Discourse.disable_readonly_mode }
+ Discourse.disable_readonly_mode
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Rails.env])
+ end
- ActiveRecord::Base.expects(:postgresql_connection).with(config.merge({
- host: replica_host, port: replica_port
- })).returns(@replica_connection)
+ it 'should failover to a replica server' do
+ RailsMultisite::ConnectionManagement.stubs(:all_dbs).returns(['default', multisite_db])
+ ::PostgreSQLFallbackHandler.instance.setup!
+
+ [config, multisite_config].each do |configuration|
+ ActiveRecord::Base.expects(:postgresql_connection).with(configuration).raises(PG::ConnectionBad)
+ ActiveRecord::Base.expects(:verify_replica).with(@replica_connection)
+
+ ActiveRecord::Base.expects(:postgresql_connection).with(configuration.merge({
+ host: replica_host, port: replica_port
+ })).returns(@replica_connection)
+ end
expect { ActiveRecord::Base.postgresql_fallback_connection(config) }
.to raise_error(PG::ConnectionBad)
@@ -43,6 +64,14 @@ describe ActiveRecord::ConnectionHandling do
expect{ ActiveRecord::Base.postgresql_fallback_connection(config) }
.to change{ Discourse.readonly_mode? }.from(false).to(true)
+ with_multisite_db(multisite_db) do
+ expect { ActiveRecord::Base.postgresql_fallback_connection(multisite_config) }
+ .to raise_error(PG::ConnectionBad)
+
+ expect{ ActiveRecord::Base.postgresql_fallback_connection(multisite_config) }
+ .to change{ Discourse.readonly_mode? }.from(false).to(true)
+ end
+
ActiveRecord::Base.unstub(:postgresql_connection)
current_threads = Thread.list
@@ -59,7 +88,7 @@ describe ActiveRecord::ConnectionHandling do
end
# Wait for the thread to finish execution
- threads = (Thread.list - current_threads).each(&:join)
+ (Thread.list - current_threads).each(&:join)
expect(Discourse.readonly_mode?).to eq(false)
@@ -72,7 +101,11 @@ describe ActiveRecord::ConnectionHandling do
context 'when both master and replica server is down' do
it 'should raise the right error' do
- ActiveRecord::Base.expects(:postgresql_connection).raises(PG::ConnectionBad).twice
+ ActiveRecord::Base.expects(:postgresql_connection).with(config).raises(PG::ConnectionBad).once
+
+ ActiveRecord::Base.expects(:postgresql_connection).with(config.dup.merge({
+ host: replica_host, port: replica_port
+ })).raises(PG::ConnectionBad).once
2.times do
expect { ActiveRecord::Base.postgresql_fallback_connection(config) }
@@ -81,4 +114,10 @@ describe ActiveRecord::ConnectionHandling do
end
end
end
+
+ def with_multisite_db(dbname)
+ RailsMultisite::ConnectionManagement.expects(:current_db).returns(dbname).at_least_once
+ yield
+ RailsMultisite::ConnectionManagement.unstub(:current_db)
+ end
end
diff --git a/spec/components/discourse_i18n_spec.rb b/spec/components/discourse_i18n_spec.rb
index 40dbf4a2ef..f41b9caafa 100644
--- a/spec/components/discourse_i18n_spec.rb
+++ b/spec/components/discourse_i18n_spec.rb
@@ -15,6 +15,7 @@ describe I18n::Backend::DiscourseI18n do
end
after do
+ I18n.locale = :en
I18n.reload!
end
@@ -40,6 +41,11 @@ describe I18n::Backend::DiscourseI18n do
expect(results['items.other']).to eq('%{count} items')
end
+ it 'uses fallback locales for searching' do
+ expect(backend.search(:de, 'bar')).to eq({'bar' => 'Bar in :de'})
+ expect(backend.search(:de, 'foo')).to eq({'foo' => 'Foo in :en'})
+ end
+
describe '#exists?' do
it 'returns true when a key is given that exists' do
expect(backend.exists?(:de, :bar)).to eq(true)
@@ -73,15 +79,23 @@ describe I18n::Backend::DiscourseI18n do
end
describe 'with overrides' do
- it 'returns the overriden key' do
+ it 'returns the overridden key' do
TranslationOverride.upsert!('en', 'foo', 'Overwritten foo')
expect(I18n.translate('foo')).to eq('Overwritten foo')
TranslationOverride.upsert!('en', 'foo', 'new value')
- I18n.reload!
expect(I18n.translate('foo')).to eq('new value')
end
+ it 'returns the overridden key after switching the locale' do
+ TranslationOverride.upsert!('en', 'foo', 'Overwritten foo in EN')
+ TranslationOverride.upsert!('de', 'foo', 'Overwritten foo in DE')
+
+ expect(I18n.translate('foo')).to eq('Overwritten foo in EN')
+ I18n.locale = :de
+ expect(I18n.translate('foo')).to eq('Overwritten foo in DE')
+ end
+
it "can be searched" do
TranslationOverride.upsert!('en', 'wat', 'Overwritten value')
expect(I18n.search('wat', backend: backend)).to eq({'wat' => 'Overwritten value'})
diff --git a/spec/components/discourse_spec.rb b/spec/components/discourse_spec.rb
index a66cecda46..b8b108519e 100644
--- a/spec/components/discourse_spec.rb
+++ b/spec/components/discourse_spec.rb
@@ -111,8 +111,12 @@ describe Discourse do
end
it "returns true when the key is present in redis" do
- $redis.expects(:get).with(Discourse.readonly_mode_key).returns("1")
- expect(Discourse.readonly_mode?).to eq(true)
+ begin
+ $redis.set(Discourse.readonly_mode_key, 1)
+ expect(Discourse.readonly_mode?).to eq(true)
+ ensure
+ $redis.del(Discourse.readonly_mode_key)
+ end
end
it "returns true when Discourse is recently read only" do
@@ -121,6 +125,13 @@ describe Discourse do
end
end
+ context ".received_readonly!" do
+ it "sets the right time" do
+ time = Discourse.received_readonly!
+ expect(Discourse.last_read_only['default']).to eq(time)
+ end
+ end
+
context "#handle_exception" do
class TempSidekiqLogger < Sidekiq::ExceptionHandler::Logger
diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb
index 236c372046..734276c6a7 100644
--- a/spec/components/email/receiver_spec.rb
+++ b/spec/components/email/receiver_spec.rb
@@ -131,6 +131,11 @@ describe Email::Receiver do
expect(topic.posts.last.raw).to eq("Do you like liquorice?\n\nI really like them. One could even say that I am *addicted* to liquorice. Anf if\nyou can mix it up with some anise, then I'm in heaven ;)")
end
+ it "handles invalid from header" do
+ expect { process(:invalid_from) }.to change { topic.posts.count }
+ expect(topic.posts.last.raw).to eq("This email was sent with an invalid from header field.")
+ end
+
describe 'Unsubscribing via email' do
let(:last_email) { ActionMailer::Base.deliveries.last }
@@ -218,7 +223,7 @@ describe Email::Receiver do
context "new message to a group" do
- let!(:group) { Fabricate(:group, incoming_email: "team@bar.com") }
+ let!(:group) { Fabricate(:group, incoming_email: "team@bar.com|meat@bar.com") }
it "handles encoded display names" do
expect { process(:encoded_display_name) }.to change(Topic, :count)
@@ -266,38 +271,45 @@ describe Email::Receiver do
expect { process(:email_reply_4) }.to change { topic.posts.count }
end
+ it "supports any kind of attachments when 'allow_all_attachments_for_group_messages' is enabled" do
+ SiteSetting.allow_all_attachments_for_group_messages = true
+ expect { process(:attached_rb_file) }.to change(Topic, :count)
+ expect(Post.last.raw).to match(/discourse\.rb/)
+ end
+
end
context "new topic in a category" do
- let!(:category) { Fabricate(:category, email_in: "category@bar.com", email_in_allow_strangers: false) }
+ let!(:category) { Fabricate(:category, email_in: "category@bar.com|category@foo.com", email_in_allow_strangers: false) }
it "raises a StrangersNotAllowedError when 'email_in_allow_strangers' is disabled" do
- expect { process(:stranger_not_allowed) }.to raise_error(Email::Receiver::StrangersNotAllowedError)
+ expect { process(:new_user) }.to raise_error(Email::Receiver::StrangersNotAllowedError)
end
it "raises an InsufficientTrustLevelError when user's trust level isn't enough" do
+ Fabricate(:user, email: "existing@bar.com", trust_level: 3)
SiteSetting.email_in_min_trust = 4
- Fabricate(:user, email: "insufficient@bar.com", trust_level: 3)
- expect { process(:insufficient_trust_level) }.to raise_error(Email::Receiver::InsufficientTrustLevelError)
+ expect { process(:existing_user) }.to raise_error(Email::Receiver::InsufficientTrustLevelError)
end
- it "raises an InvalidAccess when the user is part of a readonly group" do
- user = Fabricate(:user, email: "readonly@bar.com", trust_level: SiteSetting.email_in_min_trust)
+ it "works" do
+ user = Fabricate(:user, email: "existing@bar.com", trust_level: SiteSetting.email_in_min_trust)
group = Fabricate(:group)
group.add(user)
group.save
- category.set_permissions(group => :readonly)
+ category.set_permissions(group => :create_post)
category.save
- expect { process(:readonly) }.to raise_error(Discourse::InvalidAccess)
- end
+ # raises an InvalidAccess when the user doesn't have the privileges to create a topic
+ expect { process(:existing_user) }.to raise_error(Discourse::InvalidAccess)
- it "works" do
- Fabricate(:user, email: "sufficient@bar.com", trust_level: SiteSetting.email_in_min_trust)
- expect { process(:sufficient_trust_level) }.to change(Topic, :count)
+ category.update_columns(email_in_allow_strangers: true)
+
+ # allows new user to create a topic
+ expect { process(:new_user) }.to change(Topic, :count)
end
end
diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb
index 14db91210f..7951409e00 100644
--- a/spec/components/guardian_spec.rb
+++ b/spec/components/guardian_spec.rb
@@ -370,6 +370,57 @@ describe Guardian do
end
end
+ describe 'a Category' do
+
+ it 'allows public categories' do
+ public_category = build(:category, read_restricted: false)
+ expect(Guardian.new.can_see?(public_category)).to be_truthy
+ end
+
+ it 'correctly handles secure categories' do
+ normal_user = build(:user)
+ staged_user = build(:user, staged: true)
+ admin_user = build(:user, admin: true)
+
+ secure_category = build(:category, read_restricted: true)
+ expect(Guardian.new(normal_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(staged_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(admin_user).can_see?(secure_category)).to be_truthy
+
+ secure_category = build(:category, read_restricted: true, email_in: "foo@bar.com")
+ expect(Guardian.new(normal_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(staged_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(admin_user).can_see?(secure_category)).to be_truthy
+
+ secure_category = build(:category, read_restricted: true, email_in_allow_strangers: true)
+ expect(Guardian.new(normal_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(staged_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(admin_user).can_see?(secure_category)).to be_truthy
+
+ secure_category = build(:category, read_restricted: true, email_in: "foo@bar.com", email_in_allow_strangers: true)
+ expect(Guardian.new(normal_user).can_see?(secure_category)).to be_falsey
+ expect(Guardian.new(staged_user).can_see?(secure_category)).to be_truthy
+ expect(Guardian.new(admin_user).can_see?(secure_category)).to be_truthy
+ end
+
+ it 'allows members of an authorized group' do
+ user = Fabricate(:user)
+ group = Fabricate(:group)
+
+ secure_category = Fabricate(:category)
+ secure_category.set_permissions(group => :readonly)
+ secure_category.save
+
+ expect(Guardian.new(user).can_see?(secure_category)).to be_falsey
+
+ group.add(user)
+ group.save
+
+ expect(Guardian.new(user).can_see?(secure_category)).to be_truthy
+ end
+
+ end
+
describe 'a Topic' do
it 'allows non logged in users to view topics' do
expect(Guardian.new.can_see?(topic)).to be_truthy
diff --git a/spec/components/new_post_manager_spec.rb b/spec/components/new_post_manager_spec.rb
index 57be6bfe3b..955292e7b3 100644
--- a/spec/components/new_post_manager_spec.rb
+++ b/spec/components/new_post_manager_spec.rb
@@ -69,9 +69,10 @@ describe NewPostManager do
end
end
- context 'with a high approval post count' do
+ context 'with a high approval post count and TL0' do
before do
SiteSetting.approve_post_count = 100
+ topic.user.trust_level = 0
end
it "will return an enqueue result" do
result = NewPostManager.default_handler(manager)
@@ -80,6 +81,29 @@ describe NewPostManager do
end
end
+ context 'with a high approval post count and TL1' do
+ before do
+ SiteSetting.approve_post_count = 100
+ topic.user.trust_level = 1
+ end
+ it "will return an enqueue result" do
+ result = NewPostManager.default_handler(manager)
+ expect(NewPostManager.queue_enabled?).to eq(true)
+ expect(result.action).to eq(:enqueued)
+ end
+ end
+
+ context 'with a high approval post count, but TL2' do
+ before do
+ SiteSetting.approve_post_count = 100
+ topic.user.trust_level = 2
+ end
+ it "will return an enqueue result" do
+ result = NewPostManager.default_handler(manager)
+ expect(result).to be_nil
+ end
+ end
+
context 'with a high trust level setting' do
before do
SiteSetting.approve_unless_trust_level = 4
diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb
index 0cca316e1b..94fe6437f0 100644
--- a/spec/components/pretty_text_spec.rb
+++ b/spec/components/pretty_text_spec.rb
@@ -48,6 +48,11 @@ HTML
expect(PrettyText.cook('@hello @hello @hello')).to match_html "
@hello@hello@hello
"
end
+ it "should handle group mentions with a hyphen and without" do
+ expect(PrettyText.cook('@hello @hello-hello')).to match_html "
@hello@hello-hello
"
+ end
+
+
it "should sanitize the html" do
expect(PrettyText.cook("")).to match_html ""
end
@@ -390,8 +395,16 @@ HTML
expect(PrettyText.cook("💣")).to match(/\:bomb\:/)
end
+ it "doesn't replace emoji in inline code blocks with our emoji sets if emoji is enabled" do
+ expect(PrettyText.cook("`💣`")).not_to match(/\:bomb\:/)
+ end
+
+ it "doesn't replace emoji in code blocks with our emoji sets if emoji is enabled" do
+ expect(PrettyText.cook("```\n💣`\n```\n")).not_to match(/\:bomb\:/)
+ end
+
it "replaces some glyphs that are not in the emoji range" do
- expect(PrettyText.cook("☺")).to match(/\:slightly_smiling\:/)
+ expect(PrettyText.cook("☺")).to match(/\:slight_smile\:/)
end
it "doesn't replace unicode emoji if emoji is disabled" do
diff --git a/spec/components/topic_query_spec.rb b/spec/components/topic_query_spec.rb
index fad4faaea0..276ee76567 100644
--- a/spec/components/topic_query_spec.rb
+++ b/spec/components/topic_query_spec.rb
@@ -232,6 +232,33 @@ describe TopicQuery do
# returns the topics in reverse posters order if requested" do
expect(ids_in_order('posters', false)).to eq([archived_topic, closed_topic, invisible_topic, future_topic, regular_topic, pinned_topic].map(&:id))
+
+ # sets a custom field for each topic to emulate a plugin
+ regular_topic.custom_fields["sheep"] = 26
+ pinned_topic.custom_fields["sheep"] = 47
+ archived_topic.custom_fields["sheep"] = 69
+ invisible_topic.custom_fields["sheep"] = 12
+ closed_topic.custom_fields["sheep"] = 31
+ future_topic.custom_fields["sheep"] = 53
+
+ regular_topic.save
+ pinned_topic.save
+ archived_topic.save
+ invisible_topic.save
+ closed_topic.save
+ future_topic.save
+
+ # adds the custom field as a viable sort option
+ class ::TopicQuery
+ SORTABLE_MAPPING["sheep"] = "custom_fields.sheep"
+ end
+ # returns the topics in the sheep order if requested" do
+ expect(ids_in_order('sheep')).to eq([archived_topic, future_topic, pinned_topic, closed_topic, regular_topic, invisible_topic].map(&:id))
+
+ # returns the topics in reverse sheep order if requested" do
+ expect(ids_in_order('sheep', false)).to eq([invisible_topic, regular_topic, closed_topic, pinned_topic, future_topic, archived_topic].map(&:id))
+
+
end
end
diff --git a/spec/components/validators/password_validator_spec.rb b/spec/components/validators/password_validator_spec.rb
index d95c0d5505..3cfe4f4357 100644
--- a/spec/components/validators/password_validator_spec.rb
+++ b/spec/components/validators/password_validator_spec.rb
@@ -40,6 +40,15 @@ describe PasswordValidator do
validate
expect(record.errors[:password]).to be_present
end
+
+ it "adds an error when user is admin and password is less than 15 chars" do
+ SiteSetting.min_admin_password_length = 15
+
+ @password = "12345678912"
+ record.admin = true
+ validate
+ expect(record.errors[:password]).to be_present
+ end
end
context "min password length is 12" do
@@ -55,6 +64,7 @@ describe PasswordValidator do
context "password is commonly used" do
before do
+ SiteSetting.stubs(:min_password_length).returns(8)
CommonPasswords.stubs(:common_password?).returns(true)
end
@@ -74,7 +84,7 @@ describe PasswordValidator do
end
it "adds an error when password is the same as the username" do
- @password = "porkchops1"
+ @password = "porkchops1234"
record.username = @password
validate
expect(record.errors[:password]).to be_present
diff --git a/spec/controllers/admin/groups_controller_spec.rb b/spec/controllers/admin/groups_controller_spec.rb
index 028945d226..96fb3d229a 100644
--- a/spec/controllers/admin/groups_controller_spec.rb
+++ b/spec/controllers/admin/groups_controller_spec.rb
@@ -33,7 +33,8 @@ describe Admin::GroupsController do
"grant_trust_level"=>nil,
"incoming_email"=>nil,
"notification_level"=>2,
- "has_messages"=>false
+ "has_messages"=>false,
+ "mentionable"=>false
}])
end
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
index 48a217039c..49ddc8f814 100644
--- a/spec/controllers/application_controller_spec.rb
+++ b/spec/controllers/application_controller_spec.rb
@@ -13,6 +13,10 @@ describe TopicsController do
request.env['HTTP_REFERER'] = ref
end
+ def set_accept_language(locale)
+ request.env['HTTP_ACCEPT_LANGUAGE'] = locale
+ end
+
it "doesn't store an incoming link when there's no referer" do
expect {
get :show, id: topic.id
@@ -33,7 +37,7 @@ describe TopicsController do
end
it "uses the application layout even with an escaped fragment param" do
- get :show, {'topic_id' => topic.id, 'slug' => topic.slug, '_escaped_fragment_' => 'true'}
+ get :show, {'topic_id' => topic.id, 'slug' => topic.slug, '_escaped_fragment_' => 'true'}
expect(response).to render_template(layout: 'application')
assert_select "meta[name=fragment]", false, "it doesn't have the meta tag"
end
@@ -51,7 +55,7 @@ describe TopicsController do
end
it "uses the crawler layout when there's an _escaped_fragment_ param" do
- get :show, topic_id: topic.id, slug: topic.slug, _escaped_fragment_: 'true'
+ get :show, topic_id: topic.id, slug: topic.slug, _escaped_fragment_: 'true'
expect(response).to render_template(layout: 'crawler')
assert_select "meta[name=fragment]", false, "it doesn't have the meta tag"
end
@@ -114,25 +118,87 @@ describe TopicsController do
end
end
- describe 'set_locale' do
- it 'sets the one the user prefers' do
- SiteSetting.stubs(:allow_user_locale).returns(true)
+ describe "set_locale" do
+ context "allow_user_locale disabled" do
+ context "accept-language header differs from default locale" do
+ before do
+ SiteSetting.stubs(:allow_user_locale).returns(false)
+ SiteSetting.stubs(:default_locale).returns("en")
+ set_accept_language("fr")
+ end
- user = Fabricate(:user, locale: :fr)
- log_in_user(user)
+ context "with an anonymous user" do
+ it "uses the default locale" do
+ get :show, {topic_id: topic.id}
- get :show, {topic_id: topic.id}
+ expect(I18n.locale).to eq(:en)
+ end
+ end
- expect(I18n.locale).to eq(:fr)
+ context "with a logged in user" do
+ it "it uses the default locale" do
+ user = Fabricate(:user, locale: :fr)
+ log_in_user(user)
+
+ get :show, {topic_id: topic.id}
+
+ expect(I18n.locale).to eq(:en)
+ end
+ end
+ end
end
- it 'is sets the default locale when the setting not enabled' do
- user = Fabricate(:user, locale: :fr)
- log_in_user(user)
+ context "allow_user_locale enabled" do
+ context "accept-language header differs from default locale" do
+ before do
+ SiteSetting.stubs(:allow_user_locale).returns(true)
+ SiteSetting.stubs(:default_locale).returns("en")
+ set_accept_language("fr")
+ end
- get :show, {topic_id: topic.id}
+ context "with an anonymous user" do
+ it "uses the locale from the headers" do
+ get :show, {topic_id: topic.id}
- expect(I18n.locale).to eq(:en)
+ expect(I18n.locale).to eq(:fr)
+ end
+ end
+
+ context "with a logged in user" do
+ it "uses the user's preferred locale" do
+ user = Fabricate(:user, locale: :fr)
+ log_in_user(user)
+
+ get :show, {topic_id: topic.id}
+
+ expect(I18n.locale).to eq(:fr)
+ end
+ end
+ end
+
+ context "the preferred locale includes a region" do
+ it "returns the locale and region separated by an underscore" do
+ SiteSetting.stubs(:allow_user_locale).returns(true)
+ SiteSetting.stubs(:default_locale).returns("en")
+ set_accept_language("zh-CN")
+
+ get :show, {topic_id: topic.id}
+
+ expect(I18n.locale).to eq(:zh_CN)
+ end
+ end
+
+ context 'accept-language header is not set' do
+ it 'uses the site default locale' do
+ SiteSetting.stubs(:allow_user_locale).returns(true)
+ SiteSetting.stubs(:default_locale).returns('en')
+ set_accept_language('')
+
+ get :show, {topic_id: topic.id}
+
+ expect(I18n.locale).to eq(:en)
+ end
+ end
end
end
diff --git a/spec/controllers/embed_controller_spec.rb b/spec/controllers/embed_controller_spec.rb
index 52a6387b31..9539666d6c 100644
--- a/spec/controllers/embed_controller_spec.rb
+++ b/spec/controllers/embed_controller_spec.rb
@@ -4,6 +4,7 @@ describe EmbedController do
let(:host) { "eviltrout.com" }
let(:embed_url) { "http://eviltrout.com/2013/02/10/why-discourse-uses-emberjs.html" }
+ let(:discourse_username) { "eviltrout" }
it "is 404 without an embed_url" do
get :comments
@@ -94,6 +95,12 @@ describe EmbedController do
TopicView.expects(:new).with(123, nil, {limit: 100, exclude_first: true, exclude_deleted_users: true})
get :comments, embed_url: embed_url
end
+
+ it "provides the topic retriever with the discourse username when provided" do
+ TopicRetriever.expects(:new).with(embed_url, has_entry({author_username: discourse_username}))
+ get :comments, embed_url: embed_url, discourse_username: discourse_username
+ end
+
end
end
diff --git a/spec/controllers/invites_controller_spec.rb b/spec/controllers/invites_controller_spec.rb
index ca0d4823eb..745c781f9c 100644
--- a/spec/controllers/invites_controller_spec.rb
+++ b/spec/controllers/invites_controller_spec.rb
@@ -218,6 +218,16 @@ describe InvitesController do
end
end
+ context 'user is already logged in' do
+ let!(:user) { log_in }
+ let(:topic) { Fabricate(:topic) }
+ let(:invite) { topic.invite_by_email(topic.user, "iceking@adventuretime.ooo") }
+
+ it "doesn't redeem the invite" do
+ Invite.any_instance.stubs(:redeem).never
+ get :show, id: invite.invite_key
+ end
+ end
end
context '.create_disposable_invite' do
diff --git a/spec/controllers/topics_controller_spec.rb b/spec/controllers/topics_controller_spec.rb
index 69281fca35..92f36ba5f8 100644
--- a/spec/controllers/topics_controller_spec.rb
+++ b/spec/controllers/topics_controller_spec.rb
@@ -563,6 +563,11 @@ describe TopicsController do
expect(response).to redirect_to(topic.relative_url + "/42?page=123")
end
+ it 'does not accept page params as an array' do
+ xhr :get, :show, id: topic.slug, post_number: 42, page: [2]
+ expect(response).to redirect_to("#{topic.relative_url}/42?page=1")
+ end
+
it 'returns 404 when an invalid slug is given and no id' do
xhr :get, :show, id: 'nope-nope'
expect(response.status).to eq(404)
diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb
index 651bf03087..8bc4130839 100644
--- a/spec/controllers/users_controller_spec.rb
+++ b/spec/controllers/users_controller_spec.rb
@@ -333,7 +333,7 @@ describe UsersController do
old_token = user.auth_token
get :password_reset, token: token
- put :password_reset, token: token, password: 'newpassword'
+ put :password_reset, token: token, password: 'hg9ow8yhg98o'
expect(response).to be_success
expect(assigns[:error]).to be_blank
@@ -372,14 +372,14 @@ describe UsersController do
end
it "logs in the user" do
- put :password_reset, token: token, password: 'newpassword'
+ put :password_reset, token: token, password: 'ksjafh928r'
expect(assigns(:user).errors).to be_blank
expect(session[:current_user_id]).to be_present
end
it "doesn't log in the user when not approved" do
SiteSetting.expects(:must_approve_users?).returns(true)
- put :password_reset, token: token, password: 'newpassword'
+ put :password_reset, token: token, password: 'ksjafh928r'
expect(assigns(:user).errors).to be_blank
expect(session[:current_user_id]).to be_blank
end
@@ -479,6 +479,15 @@ describe UsersController do
email: @user.email
end
+ context 'when creating a user' do
+ it 'sets the user locale to I18n.locale' do
+ SiteSetting.stubs(:default_locale).returns('en')
+ I18n.stubs(:locale).returns(:fr)
+ post_user
+ expect(User.find_by(username: @user.username).locale).to eq('fr')
+ end
+ end
+
context 'when creating a non active user (unconfirmed email)' do
it 'returns a 500 when local logins are disabled' do
@@ -723,7 +732,7 @@ describe UsersController do
context "with values for the fields" do
let(:create_params) { {
name: @user.name,
- password: 'watwatwat',
+ password: 'watwatwatwat',
username: @user.username,
email: @user.email,
user_fields: {
@@ -773,7 +782,7 @@ describe UsersController do
context "without values for the fields" do
let(:create_params) { {
name: @user.name,
- password: 'watwatwat',
+ password: 'watwatwatwat',
username: @user.username,
email: @user.email,
} }
@@ -793,7 +802,7 @@ describe UsersController do
let!(:staged) { Fabricate(:staged, email: "staged@account.com") }
it "succeeds" do
- xhr :post, :create, email: staged.email, username: "zogstrip", password: "P4ssw0rd"
+ xhr :post, :create, email: staged.email, username: "zogstrip", password: "P4ssw0rd$$"
result = ::JSON.parse(response.body)
expect(result["success"]).to eq(true)
expect(User.find_by(email: staged.email).staged).to eq(false)
@@ -1181,6 +1190,19 @@ describe UsersController do
end
+ context 'a locale is chosen that differs from I18n.locale' do
+ it "updates the user's locale" do
+ I18n.stubs(:locale).returns('fr')
+
+ put :update,
+ username: user.username,
+ locale: :fa_IR
+
+ expect(User.find_by(username: user.username).locale).to eq('fa_IR')
+ end
+
+ end
+
context "with user fields" do
context "an editable field" do
let!(:user_field) { Fabricate(:user_field) }
@@ -1229,9 +1251,7 @@ describe UsersController do
it 'does not allow the update' do
user = Fabricate(:user, name: 'Billy Bob')
log_in_user(user)
- guardian = Guardian.new(user)
- guardian.stubs(:ensure_can_edit!).with(user).raises(Discourse::InvalidAccess.new)
- Guardian.stubs(new: guardian).with(user)
+ Guardian.any_instance.expects(:can_edit?).with(user).returns(false)
put :update, username: user.username, name: 'Jim Tom'
diff --git a/spec/fixtures/emails/attached_rb_file.eml b/spec/fixtures/emails/attached_rb_file.eml
new file mode 100644
index 0000000000..960b3e6d67
--- /dev/null
+++ b/spec/fixtures/emails/attached_rb_file.eml
@@ -0,0 +1,31 @@
+Return-Path:
+From: Foo Bar
+To: team@bar.com
+Date: Mon, 29 Feb 2016 21:54:01 +0100
+Message-ID: <56d4afe991ed0_3ab83fdf94441a20677f0@HAL.lan.mail>
+Subject: Email with .rb file attached
+Mime-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="--==_mimepart_56d4afe991d17_3ab83fdf94441a206765";
+ charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+
+----==_mimepart_56d4afe991d17_3ab83fdf94441a206765
+Content-Type: text/plain;
+ charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+Please find the source code of Discourse attached.
+----==_mimepart_56d4afe991d17_3ab83fdf94441a206765
+Content-Type: application/x-ruby;
+ charset=UTF-8;
+ filename=discourse.rb
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename=discourse.rb
+Content-ID: <56d4afe992cb6_3ab83fdf94441a20678c3@HAL.lan.mail>
+
+cHV0cyAiSGVsbG8gRGlzY291cnNlIgo=
+
+----==_mimepart_56d4afe991d17_3ab83fdf94441a206765--
diff --git a/spec/fixtures/emails/encoded_display_name.eml b/spec/fixtures/emails/encoded_display_name.eml
index cf31f703ef..1b5d6bb3a1 100644
--- a/spec/fixtures/emails/encoded_display_name.eml
+++ b/spec/fixtures/emails/encoded_display_name.eml
@@ -1,6 +1,6 @@
Return-Path:
From: =?UTF-8?B?0KHQu9GD0YfQsNC50L3QsNGP?= =?UTF-8?B?INCY0LzRjw==?=
-To: team@bar.com
+To: meat@bar.com
Subject: I need help
Date: Fri, 15 Jan 2016 00:12:43 +0100
Message-ID: <29@foo.bar.mail>
diff --git a/spec/fixtures/emails/insufficient_trust_level.eml b/spec/fixtures/emails/existing_user.eml
similarity index 52%
rename from spec/fixtures/emails/insufficient_trust_level.eml
rename to spec/fixtures/emails/existing_user.eml
index 4800b432be..db41b91ac5 100644
--- a/spec/fixtures/emails/insufficient_trust_level.eml
+++ b/spec/fixtures/emails/existing_user.eml
@@ -1,11 +1,11 @@
-Return-Path:
-From: Foo Bar
+Return-Path:
+From: Foo Bar
To: category@bar.com
-Subject: This is a topic from a complete stranger
+Subject: This is a topic from an existing user
Date: Fri, 15 Jan 2016 00:12:43 +0100
Message-ID: <32@foo.bar.mail>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
-Hey, this is a topic from a complete stranger ;)
+Hey, this is a topic from an existing user ;)
diff --git a/spec/fixtures/emails/invalid_from.eml b/spec/fixtures/emails/invalid_from.eml
new file mode 100644
index 0000000000..38dc0fbc8e
--- /dev/null
+++ b/spec/fixtures/emails/invalid_from.eml
@@ -0,0 +1,9 @@
+Return-Path:
+From: Foo Bar [THIS IS INVALID]
+To: reply+4f97315cc828096c9cb34c6f1a0d6fe8@bar.com
+Date: Fri, 15 Jan 2016 00:12:43 +0100
+Message-ID: <41@foo.bar.mail>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+
+This email was sent with an invalid from header field.
diff --git a/spec/fixtures/emails/stranger_not_allowed.eml b/spec/fixtures/emails/new_user.eml
similarity index 94%
rename from spec/fixtures/emails/stranger_not_allowed.eml
rename to spec/fixtures/emails/new_user.eml
index 1464e8ddd8..fdae501ab9 100644
--- a/spec/fixtures/emails/stranger_not_allowed.eml
+++ b/spec/fixtures/emails/new_user.eml
@@ -1,6 +1,6 @@
Return-Path:
From: Foo Bar
-To: category@bar.com
+To: category@foo.com
Subject: This is a topic from a complete stranger
Date: Fri, 15 Jan 2016 00:12:43 +0100
Message-ID: <31@foo.bar.mail>
diff --git a/spec/fixtures/emails/no_subject.eml b/spec/fixtures/emails/no_subject.eml
index 5804109647..ccfd9ea599 100644
--- a/spec/fixtures/emails/no_subject.eml
+++ b/spec/fixtures/emails/no_subject.eml
@@ -1,5 +1,5 @@
From: Some One
-To: team@bar.com
+To: meat@bar.com
Date: Mon, 1 Feb 2016 00:12:43 +0100
Message-ID: <40@foo.bar.mail>
Mime-Version: 1.0
diff --git a/spec/fixtures/emails/sufficient_trust_level.eml b/spec/fixtures/emails/sufficient_trust_level.eml
deleted file mode 100644
index cee56f11be..0000000000
--- a/spec/fixtures/emails/sufficient_trust_level.eml
+++ /dev/null
@@ -1,11 +0,0 @@
-Return-Path:
-From: Foo Bar
-To: category@bar.com
-Subject: This is a topic from a know user
-Date: Fri, 15 Jan 2016 00:12:43 +0100
-Message-ID: <33@foo.bar.mail>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: quoted-printable
-
-Hey, this is a topic from a known user ;)
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index fb97b0454c..5931ec0d3a 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -84,5 +84,16 @@ describe ApplicationHelper do
end
end
+ describe '#rtl_class' do
+ it "returns 'rtl' when the I18n.locale is rtl" do
+ I18n.stubs(:locale).returns(:he)
+ expect(helper.rtl_class).to eq('rtl')
+ end
+
+ it 'returns an empty string when the I18n.locale is not rtl' do
+ I18n.stubs(:locale).returns(:zh_TW)
+ expect(helper.rtl_class).to eq('')
+ end
+ end
end
diff --git a/spec/jobs/user_email_spec.rb b/spec/jobs/user_email_spec.rb
index 5cce202fe3..5054089b5d 100644
--- a/spec/jobs/user_email_spec.rb
+++ b/spec/jobs/user_email_spec.rb
@@ -200,6 +200,12 @@ describe Jobs::UserEmail do
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_id: notification.id, post_id: post.id)
# other times, we only pass the type of notification
Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post.id)
+ # When post is nil
+ Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted")
+ # When post does not have a topic
+ post = Fabricate(:post)
+ post.topic.destroy
+ Jobs::UserEmail.new.execute(type: :user_mentioned, user_id: user.id, notification_type: "posted", post_id: post)
end
it "doesn't send the email if the post has been user deleted" do
diff --git a/spec/mailers/user_notifications_spec.rb b/spec/mailers/user_notifications_spec.rb
index a58c2d16f5..a309290979 100644
--- a/spec/mailers/user_notifications_spec.rb
+++ b/spec/mailers/user_notifications_spec.rb
@@ -15,11 +15,16 @@ describe UserNotifications do
_post7 = Fabricate(:post, topic: post1.topic, post_type: Post.types[:whisper])
last = Fabricate(:post, topic: post1.topic)
+ post1.user.user_option.email_previous_replies = UserOption.previous_replies_type[:always]
+
# default is only post #1
- expect(UserNotifications.get_context_posts(last, nil).count).to eq(1)
+ expect(UserNotifications.get_context_posts(last, nil, post1.user).count).to eq(1)
# staff members can also see the whisper
- tu = TopicUser.new(topic: post1.topic, user: build(:moderator))
- expect(UserNotifications.get_context_posts(last, tu).count).to eq(2)
+ moderator = build(:moderator)
+ moderator.user_option = UserOption.new
+ moderator.user_option.email_previous_replies = UserOption.previous_replies_type[:always]
+ tu = TopicUser.new(topic: post1.topic, user: moderator)
+ expect(UserNotifications.get_context_posts(last, tu, tu.user).count).to eq(2)
end
it "allows users to control context" do
@@ -32,13 +37,15 @@ describe UserNotifications do
topic_user = TopicUser.find_by(user_id: user.id, topic_id: post1.topic_id)
# to avoid reloads after update_columns
user = topic_user.user
- expect(UserNotifications.get_context_posts(post3, topic_user).count).to eq(1)
+ user.user_option.update_columns(email_previous_replies: UserOption.previous_replies_type[:unless_emailed])
+
+ expect(UserNotifications.get_context_posts(post3, topic_user, user).count).to eq(1)
user.user_option.update_columns(email_previous_replies: UserOption.previous_replies_type[:never])
- expect(UserNotifications.get_context_posts(post3, topic_user).count).to eq(0)
+ expect(UserNotifications.get_context_posts(post3, topic_user, user).count).to eq(0)
user.user_option.update_columns(email_previous_replies: UserOption.previous_replies_type[:always])
- expect(UserNotifications.get_context_posts(post3, topic_user).count).to eq(2)
+ expect(UserNotifications.get_context_posts(post3, topic_user, user).count).to eq(2)
end
end
@@ -110,12 +117,14 @@ describe UserNotifications do
let(:response_by_user) { Fabricate(:user, name: "John Doe") }
let(:category) { Fabricate(:category, name: 'India') }
let(:topic) { Fabricate(:topic, category: category) }
- let(:post) { Fabricate(:post, topic: topic) }
- let(:response) { Fabricate(:post, topic: post.topic, user: response_by_user)}
+ let(:post) { Fabricate(:post, topic: topic, raw: 'This is My super duper cool topic') }
+ let(:response) { Fabricate(:post, reply_to_post_number: 1, topic: post.topic, user: response_by_user)}
let(:user) { Fabricate(:user) }
let(:notification) { Fabricate(:notification, user: user) }
it 'generates a correct email' do
+
+ # Fabricator is not fabricating this ...
SiteSetting.enable_names = true
SiteSetting.display_name_on_posts = true
mail = UserNotifications.user_replied(response.user,
@@ -123,25 +132,41 @@ describe UserNotifications do
notification_type: notification.notification_type,
notification_data_hash: notification.data_hash
)
-
# from should include full user name
expect(mail[:from].display_names).to eql(['John Doe'])
# subject should include category name
expect(mail.subject).to match(/India/)
+ mail_html = mail.html_part.to_s
+
+ expect(mail_html.scan(/My super duper cool topic/).count).to eq(1)
+ expect(mail_html.scan(/In Reply To/).count).to eq(1)
+
# 2 "visit topic" link
- expect(mail.html_part.to_s.scan(/Visit Topic/).count).to eq(2)
+ expect(mail_html.scan(/Visit Topic/).count).to eq(2)
# 2 respond to links cause we have 1 context post
- expect(mail.html_part.to_s.scan(/to respond/).count).to eq(2)
+ expect(mail_html.scan(/to respond/).count).to eq(2)
# 1 unsubscribe
- expect(mail.html_part.to_s.scan(/To unsubscribe/).count).to eq(1)
+ expect(mail_html.scan(/To unsubscribe/).count).to eq(1)
# side effect, topic user is updated with post number
tu = TopicUser.get(post.topic_id, response.user)
expect(tu.last_emailed_post_number).to eq(response.post_number)
+
+
+ # no In Reply To if user opts out
+ response.user.user_option.email_in_reply_to = false
+ mail = UserNotifications.user_replied(response.user,
+ post: response,
+ notification_type: notification.notification_type,
+ notification_data_hash: notification.data_hash
+ )
+
+
+ expect(mail.html_part.to_s.scan(/In Reply To/).count).to eq(0)
end
end
@@ -169,8 +194,8 @@ describe UserNotifications do
# subject should not include category name
expect(mail.subject).not_to match(/Uncategorized/)
- # 2 respond to links cause we have 1 context post
- expect(mail.html_part.to_s.scan(/to respond/).count).to eq(2)
+ # 1 respond to links as no context by default
+ expect(mail.html_part.to_s.scan(/to respond/).count).to eq(1)
# 1 unsubscribe link
expect(mail.html_part.to_s.scan(/To unsubscribe/).count).to eq(1)
@@ -243,6 +268,15 @@ describe UserNotifications do
end
end
+ # The parts of emails that are derived from templates are translated
+ shared_examples "sets user locale" do
+ context "set locale for translating templates" do
+ it "sets the locale" do
+ expects_build_with(has_key(:locale))
+ end
+ end
+ end
+
shared_examples "notification email building" do
let(:post) { Fabricate(:post, user: user) }
let(:mail_type) { "user_#{notification_type}"}
@@ -316,6 +350,7 @@ describe UserNotifications do
include_examples "notification email building" do
let(:notification_type) { :mentioned }
include_examples "supports reply by email"
+ include_examples "sets user locale"
end
end
@@ -323,6 +358,7 @@ describe UserNotifications do
include_examples "notification email building" do
let(:notification_type) { :replied }
include_examples "supports reply by email"
+ include_examples "sets user locale"
end
end
@@ -330,6 +366,7 @@ describe UserNotifications do
include_examples "notification email building" do
let(:notification_type) { :quoted }
include_examples "supports reply by email"
+ include_examples "sets user locale"
end
end
@@ -337,6 +374,7 @@ describe UserNotifications do
include_examples "notification email building" do
let(:notification_type) { :posted }
include_examples "supports reply by email"
+ include_examples "sets user locale"
end
end
@@ -344,6 +382,7 @@ describe UserNotifications do
include_examples "notification email building" do
let(:notification_type) { :invited_to_private_message }
include_examples "no reply by email"
+ include_examples "sets user locale"
end
end
@@ -351,7 +390,58 @@ describe UserNotifications do
include_examples "notification email building" do
let(:notification_type) { :invited_to_topic }
include_examples "no reply by email"
+ include_examples "sets user locale"
end
end
+ # notification emails derived from templates are translated into the user's locale
+ shared_examples "notification derived from template" do
+ let(:user) { Fabricate(:user, locale: locale) }
+ let(:mail_type) { mail_type }
+ let(:notification) { Fabricate(:notification, user: user) }
+ end
+
+ describe "notifications from template" do
+
+ context "user locale has been set" do
+
+ %w(signup signup_after_approval authorize_email forgot_password admin_login account_created).each do |mail_type|
+ include_examples "notification derived from template" do
+ SiteSetting.default_locale = "en"
+ let(:locale) { "fr" }
+ let(:mail_type) { mail_type }
+ it "sets the locale" do
+ expects_build_with(has_entry(:locale, "fr"))
+ end
+ end
+ end
+ end
+
+ context "user locale has not been set" do
+ %w(signup signup_after_approval authorize_email forgot_password admin_login account_created).each do |mail_type|
+ include_examples "notification derived from template" do
+ SiteSetting.default_locale = "en"
+ let(:locale) { nil }
+ let(:mail_type) { mail_type }
+ it "sets the locale" do
+ expects_build_with(has_entry(:locale, nil))
+ end
+ end
+ end
+ end
+
+ context "user locale is an empty string" do
+ %w(signup signup_after_approval authorize_email forgot_password admin_login account_created).each do |mail_type|
+ include_examples "notification derived from template" do
+ SiteSetting.default_locale = "en"
+ let(:locale) { "" }
+ let(:mail_type) { mail_type }
+ it "sets the locale" do
+ expects_build_with(has_entry(:locale, nil))
+ end
+ end
+ end
+ end
+
+ end
end
diff --git a/spec/models/digest_email_site_setting_spec.rb b/spec/models/digest_email_site_setting_spec.rb
index 5eb899928a..cebcfb2342 100644
--- a/spec/models/digest_email_site_setting_spec.rb
+++ b/spec/models/digest_email_site_setting_spec.rb
@@ -3,11 +3,11 @@ require 'rails_helper'
describe DigestEmailSiteSetting do
describe 'valid_value?' do
it 'returns true for a valid value as an int' do
- expect(DigestEmailSiteSetting.valid_value?(1)).to eq true
+ expect(DigestEmailSiteSetting.valid_value?(1440)).to eq true
end
it 'returns true for a valid value as a string' do
- expect(DigestEmailSiteSetting.valid_value?('1')).to eq true
+ expect(DigestEmailSiteSetting.valid_value?('1440')).to eq true
end
it 'returns false for an invalid value' do
diff --git a/spec/models/directory_item_spec.rb b/spec/models/directory_item_spec.rb
index d19be0af82..6612686e3f 100644
--- a/spec/models/directory_item_spec.rb
+++ b/spec/models/directory_item_spec.rb
@@ -19,13 +19,17 @@ describe DirectoryItem do
end
context 'refresh' do
- let!(:post) { Fabricate(:post) }
+ before do
+ ActiveRecord::Base.observers.enable :all
+ end
+
+ let!(:post) { create_post }
it "creates the record for the user" do
DirectoryItem.refresh!
expect(DirectoryItem.where(period_type: DirectoryItem.period_types[:all])
.where(user_id: post.user.id)
- .exists?).to be_truthy
+ .where(topic_count: 1).count).to eq(1)
end
end
diff --git a/spec/models/incoming_links_report_spec.rb b/spec/models/incoming_links_report_spec.rb
index d85e4bd7cb..1ed432f745 100644
--- a/spec/models/incoming_links_report_spec.rb
+++ b/spec/models/incoming_links_report_spec.rb
@@ -40,8 +40,8 @@ describe IncomingLinksReport do
r = IncomingLinksReport.find('top_referrers').as_json
expect(r[:data]).to eq [
- {username: p1.user.username, num_clicks: 7 + 2, num_topics: 2},
- {username: p2.user.username, num_clicks: 3, num_topics: 1}
+ {username: p1.user.username, user_id: p1.user.id, num_clicks: 7 + 2, num_topics: 2},
+ {username: p2.user.username, user_id: p2.user.id, num_clicks: 3, num_topics: 1}
]
r = IncomingLinksReport.find('top_traffic_sources').as_json
@@ -98,8 +98,8 @@ describe IncomingLinksReport do
Fabricate(:incoming_link, user: bob, post: post1).save
end
- expect(top_referrers[:data][0]).to eq({username: 'amy', num_clicks: 3, num_topics: 2})
- expect(top_referrers[:data][1]).to eq({username: 'bob', num_clicks: 2, num_topics: 1})
+ expect(top_referrers[:data][0]).to eq({username: 'amy', user_id: amy.id, num_clicks: 3, num_topics: 2})
+ expect(top_referrers[:data][1]).to eq({username: 'bob', user_id: bob.id, num_clicks: 2, num_topics: 1})
end
end
diff --git a/spec/models/post_action_spec.rb b/spec/models/post_action_spec.rb
index 9146ad19e7..e7a906bc60 100644
--- a/spec/models/post_action_spec.rb
+++ b/spec/models/post_action_spec.rb
@@ -12,6 +12,24 @@ describe PostAction do
let(:second_post) { Fabricate(:post, topic_id: post.topic_id) }
let(:bookmark) { PostAction.new(user_id: post.user_id, post_action_type_id: PostActionType.types[:bookmark] , post_id: post.id) }
+ describe "rate limits" do
+
+ it "limits redo/undo" do
+
+ RateLimiter.stubs(:disabled?).returns(false)
+
+ PostAction.act(eviltrout, post, PostActionType.types[:like])
+ PostAction.remove_act(eviltrout, post, PostActionType.types[:like])
+ PostAction.act(eviltrout, post, PostActionType.types[:like])
+ PostAction.remove_act(eviltrout, post, PostActionType.types[:like])
+
+ expect {
+ PostAction.act(eviltrout, post, PostActionType.types[:like])
+ }.to raise_error
+
+ end
+ end
+
describe "messaging" do
it "doesn't generate title longer than 255 characters" do
@@ -464,8 +482,6 @@ describe PostAction do
end
it "prevents user to act twice at the same time" do
- post = Fabricate(:post)
-
# flags are already being tested
all_types_except_flags = PostActionType.types.except(PostActionType.flag_types)
all_types_except_flags.values.each do |action|
diff --git a/spec/models/post_alert_observer_spec.rb b/spec/models/post_alert_observer_spec.rb
index c4de604173..be6f8c7876 100644
--- a/spec/models/post_alert_observer_spec.rb
+++ b/spec/models/post_alert_observer_spec.rb
@@ -21,11 +21,8 @@ describe PostAlertObserver do
end
context 'when removing a liked post' do
- before do
- PostAction.act(evil_trout, post, PostActionType.types[:like])
- end
-
it 'removes a notification' do
+ PostAction.act(evil_trout, post, PostActionType.types[:like])
expect {
PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
}.to change(Notification, :count).by(-1)
diff --git a/spec/models/post_analyzer_spec.rb b/spec/models/post_analyzer_spec.rb
index 57e68ee88a..3940fa73d8 100644
--- a/spec/models/post_analyzer_spec.rb
+++ b/spec/models/post_analyzer_spec.rb
@@ -206,6 +206,11 @@ describe PostAnalyzer do
expect(post_analyzer.raw_mentions).to eq(['jake', 'finn', 'jake_old'])
end
+ it "handles hyphen in groupname" do
+ post_analyzer = PostAnalyzer.new("@org-board", default_topic_id)
+ expect(post_analyzer.raw_mentions).to eq(['org-board'])
+ end
+
it "ignores emails" do
post_analyzer = PostAnalyzer.new("1@test.com 1@best.com @best @not", default_topic_id)
expect(post_analyzer.raw_mentions).to eq(['best', 'not'])
diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb
index c7a6ead930..369763284e 100644
--- a/spec/models/post_spec.rb
+++ b/spec/models/post_spec.rb
@@ -426,6 +426,11 @@ describe Post do
expect(post.raw_mentions).to eq(['jake', 'finn', 'jake_old'])
end
+ it "handles hyphen in groupname" do
+ post = Fabricate.build(:post, post_args.merge(raw: "@org-board"))
+ expect(post.raw_mentions).to eq(['org-board'])
+ end
+
end
context "max mentions" do
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index dfbabbe039..35a9e72725 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -1157,7 +1157,7 @@ describe User do
context "when user preferences are overriden" do
before do
- SiteSetting.default_email_digest_frequency = 1 # daily
+ SiteSetting.default_email_digest_frequency = 1440 # daily
SiteSetting.default_email_private_messages = false
SiteSetting.default_email_direct = false
SiteSetting.default_email_mailing_list_mode = true
@@ -1183,7 +1183,7 @@ describe User do
options = user.user_option
expect(options.email_always).to eq(true)
expect(options.mailing_list_mode).to eq(true)
- expect(options.digest_after_days).to eq(1)
+ expect(options.digest_after_minutes).to eq(1440)
expect(options.email_private_messages).to eq(false)
expect(options.external_links_in_new_tab).to eq(true)
expect(options.enable_quoting).to eq(false)
diff --git a/spec/services/post_alerter_spec.rb b/spec/services/post_alerter_spec.rb
index 882e680dc8..f029469692 100644
--- a/spec/services/post_alerter_spec.rb
+++ b/spec/services/post_alerter_spec.rb
@@ -3,6 +3,7 @@ require 'rails_helper'
describe PostAlerter do
let!(:evil_trout) { Fabricate(:evil_trout) }
+ let(:user) { Fabricate(:user) }
def create_post_with_alerts(args={})
post = Fabricate(:post, args)
@@ -23,20 +24,115 @@ describe PostAlerter do
end
end
- context 'likes' do
- it 'does not double notify users on likes' do
+ context 'edits' do
+ it 'notifies correctly on edits' do
+
ActiveRecord::Base.observers.enable :all
post = Fabricate(:post, raw: 'I love waffles')
- PostAction.act(evil_trout, post, PostActionType.types[:like])
admin = Fabricate(:admin)
post.revise(admin, {raw: 'I made a revision'})
+ # skip this notification cause we already notified on a similar edit
+ Timecop.freeze(2.hours.from_now) do
+ post.revise(admin, {raw: 'I made another revision'})
+ end
+
+ post.revise(Fabricate(:admin), {raw: 'I made a revision'})
+
+ Timecop.freeze(4.hours.from_now) do
+ post.revise(admin, {raw: 'I made another revision'})
+ end
+
+ expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(3)
+ end
+ end
+
+ context 'likes' do
+
+ it 'notifies on likes after an undo' do
+ ActiveRecord::Base.observers.enable :all
+
+ post = Fabricate(:post, raw: 'I love waffles')
+
+ PostAction.act(evil_trout, post, PostActionType.types[:like])
+ PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
+ PostAction.act(evil_trout, post, PostActionType.types[:like])
+
+ expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(1)
+ end
+
+ it 'notifies on does not notify when never is selected' do
+ ActiveRecord::Base.observers.enable :all
+
+ post = Fabricate(:post, raw: 'I love waffles')
+
+ post.user.user_option.update_columns(like_notification_frequency:
+ UserOption.like_notification_frequency_type[:never])
+
+ PostAction.act(evil_trout, post, PostActionType.types[:like])
+
+
+ expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(0)
+ end
+
+ it 'notifies on likes correctly' do
+ ActiveRecord::Base.observers.enable :all
+
+ post = Fabricate(:post, raw: 'I love waffles')
+
+ PostAction.act(evil_trout, post, PostActionType.types[:like])
+ admin = Fabricate(:admin)
PostAction.act(admin, post, PostActionType.types[:like])
- # one like and one edit notification
+ # one like
+ expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(1)
+
+
+ post.user.user_option.update_columns(like_notification_frequency:
+ UserOption.like_notification_frequency_type[:always])
+
+ admin2 = Fabricate(:admin)
+ PostAction.act(admin2, post, PostActionType.types[:like])
+ expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(1)
+
+ # adds info to the notification
+ notification = Notification.find_by(post_number: 1,
+ topic_id: post.topic_id)
+
+
+ expect(notification.data_hash["count"].to_i).to eq(2)
+ expect(notification.data_hash["username2"]).to eq(evil_trout.username)
+
+ # this is a tricky thing ... removing a like should fix up the notifications
+ PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
+
+ # rebuilds the missing notification
+ expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(1)
+ notification = Notification.find_by(post_number: 1,
+ topic_id: post.topic_id)
+
+ expect(notification.data_hash["count"]).to eq(2)
+ expect(notification.data_hash["username"]).to eq(admin2.username)
+ expect(notification.data_hash["username2"]).to eq(admin.username)
+
+
+ post.user.user_option.update_columns(like_notification_frequency:
+ UserOption.like_notification_frequency_type[:first_time_and_daily])
+
+ # this gets skipped
+ admin3 = Fabricate(:admin)
+ PostAction.act(admin3, post, PostActionType.types[:like])
+
+ Timecop.freeze(2.days.from_now) do
+ admin4 = Fabricate(:admin)
+ PostAction.act(admin4, post, PostActionType.types[:like])
+ end
+
+ # first happend within the same day, no need to notify
expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(2)
+
end
end
@@ -112,19 +208,25 @@ describe PostAlerter do
expect(GroupMention.count).to eq(1)
- group.update_columns(alias_level: Group::ALIAS_LEVELS[:members_mods_and_admins])
+ Fabricate(:group, name: 'group-alt', alias_level: Group::ALIAS_LEVELS[:everyone])
+ expect {
+ create_post_with_alerts(raw: "Hello, @group-alt should not trigger a notification?")
+ }.to change(evil_trout.notifications, :count).by(0)
+
+ expect(GroupMention.count).to eq(2)
+
+ group.update_columns(alias_level: Group::ALIAS_LEVELS[:members_mods_and_admins])
expect {
create_post_with_alerts(raw: "Hello @group you are not mentionable")
}.to change(evil_trout.notifications, :count).by(0)
- expect(GroupMention.count).to eq(2)
+ expect(GroupMention.count).to eq(3)
end
end
context '@mentions' do
- let(:user) { Fabricate(:user) }
let(:mention_post) { create_post_with_alerts(user: user, raw: 'Hello @eviltrout')}
let(:topic) { mention_post.topic }
@@ -150,4 +252,32 @@ describe PostAlerter do
end
end
+
+ describe ".create_notification" do
+ let(:topic) { Fabricate(:private_message_topic, user: user, created_at: 1.hour.ago) }
+ let(:post) { Fabricate(:post, topic: topic, created_at: 1.hour.ago) }
+
+ it "creates a notification for PMs" do
+ post.revise(user, { raw: 'This is the revised post' }, revised_at: Time.zone.now)
+
+ expect {
+ PostAlerter.new.create_notification(user, Notification.types[:private_message], post)
+ }.to change { user.notifications.count }.by(1)
+
+ expect(user.notifications.last.data_hash["topic_title"]).to eq(topic.title)
+ end
+
+ it "keeps the original title for PMs" do
+ original_title = topic.title
+
+ post.revise(user, { title: "This is the revised title" }, revised_at: Time.now)
+
+ expect {
+ PostAlerter.new.create_notification(user, Notification.types[:private_message], post)
+ }.to change { user.notifications.count }.by(1)
+
+ expect(user.notifications.last.data_hash["topic_title"]).to eq(original_title)
+ end
+ end
+
end
diff --git a/spec/services/random_topic_selector_spec.rb b/spec/services/random_topic_selector_spec.rb
index dd2d1cccb3..d57f5519d2 100644
--- a/spec/services/random_topic_selector_spec.rb
+++ b/spec/services/random_topic_selector_spec.rb
@@ -11,8 +11,15 @@ describe RandomTopicSelector do
$redis.rpush key, t
end
+ expect(RandomTopicSelector.next(0)).to eq([])
expect(RandomTopicSelector.next(2)).to eq([0,1])
+
+ $redis.expects(:multi).returns(Discourse.received_readonly!)
expect(RandomTopicSelector.next(2)).to eq([2,3])
+ $redis.unstub(:multi)
+
+ expect(RandomTopicSelector.next(2)).to eq([2,3])
+ expect(RandomTopicSelector.next(2)).to eq([])
end
it 'can correctly backfill' do
diff --git a/spec/services/user_updater_spec.rb b/spec/services/user_updater_spec.rb
index 7866206bfe..d061509025 100644
--- a/spec/services/user_updater_spec.rb
+++ b/spec/services/user_updater_spec.rb
@@ -46,18 +46,20 @@ describe UserUpdater do
updater.update(bio_raw: 'my new bio',
email_always: 'true',
mailing_list_mode: true,
- digest_after_days: "8",
+ digest_after_minutes: "45",
new_topic_duration_minutes: 100,
- auto_track_topics_after_msecs: 101
+ auto_track_topics_after_msecs: 101,
+ email_in_reply_to: false
)
user.reload
expect(user.user_profile.bio_raw).to eq 'my new bio'
expect(user.user_option.email_always).to eq true
expect(user.user_option.mailing_list_mode).to eq true
- expect(user.user_option.digest_after_days).to eq 8
+ expect(user.user_option.digest_after_minutes).to eq 45
expect(user.user_option.new_topic_duration_minutes).to eq 100
expect(user.user_option.auto_track_topics_after_msecs).to eq 101
+ expect(user.user_option.email_in_reply_to).to eq false
end
context 'when update succeeds' do
diff --git a/test/javascripts/acceptance/composer-test.js.es6 b/test/javascripts/acceptance/composer-test.js.es6
index e8d8e8dbf5..38789579c1 100644
--- a/test/javascripts/acceptance/composer-test.js.es6
+++ b/test/javascripts/acceptance/composer-test.js.es6
@@ -192,8 +192,8 @@ test("Edit the first post", () => {
ok(!exists('.topic-post:eq(0) .post-info.edits'), 'it has no edits icon at first');
- click('.topic-post:eq(0) button[data-action=showMoreActions]');
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.show-more-actions');
+ click('.topic-post:eq(0) button.edit');
andThen(() => {
equal(find('.d-editor-input').val().indexOf('Any plans to support'), 0, 'it populates the input with the post text');
});
@@ -212,11 +212,11 @@ test("Edit the first post", () => {
test("Composer can switch between edits", () => {
visit("/t/this-is-a-test-topic/9");
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.edit');
andThen(() => {
equal(find('.d-editor-input').val().indexOf('This is the first post.'), 0, 'it populates the input with the post text');
});
- click('.topic-post:eq(1) button[data-action=edit]');
+ click('.topic-post:eq(1) button.edit');
andThen(() => {
equal(find('.d-editor-input').val().indexOf('This is the second post.'), 0, 'it populates the input with the post text');
});
@@ -225,9 +225,9 @@ test("Composer can switch between edits", () => {
test("Composer with dirty edit can toggle to another edit", () => {
visit("/t/this-is-a-test-topic/9");
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.edit');
fillIn('.d-editor-input', 'This is a dirty reply');
- click('.topic-post:eq(1) button[data-action=edit]');
+ click('.topic-post:eq(1) button.edit');
andThen(() => {
ok(exists('.bootbox.modal'), 'it pops up a confirmation dialog');
});
@@ -240,15 +240,15 @@ test("Composer with dirty edit can toggle to another edit", () => {
test("Composer can toggle between edit and reply", () => {
visit("/t/this-is-a-test-topic/9");
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.edit');
andThen(() => {
equal(find('.d-editor-input').val().indexOf('This is the first post.'), 0, 'it populates the input with the post text');
});
- click('.topic-post:eq(0) button[data-action=reply]');
+ click('.topic-post:eq(0) button.reply');
andThen(() => {
equal(find('.d-editor-input').val(), "", 'it clears the input');
});
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.edit');
andThen(() => {
equal(find('.d-editor-input').val().indexOf('This is the first post.'), 0, 'it populates the input with the post text');
});
@@ -257,9 +257,9 @@ test("Composer can toggle between edit and reply", () => {
test("Composer with dirty reply can toggle to edit", () => {
visit("/t/this-is-a-test-topic/9");
- click('.topic-post:eq(0) button[data-action=reply]');
+ click('.topic-post:eq(0) button.reply');
fillIn('.d-editor-input', 'This is a dirty reply');
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.edit');
andThen(() => {
ok(exists('.bootbox.modal'), 'it pops up a confirmation dialog');
});
@@ -272,10 +272,10 @@ test("Composer with dirty reply can toggle to edit", () => {
test("Composer draft with dirty reply can toggle to edit", () => {
visit("/t/this-is-a-test-topic/9");
- click('.topic-post:eq(0) button[data-action=reply]');
+ click('.topic-post:eq(0) button.reply');
fillIn('.d-editor-input', 'This is a dirty reply');
click('.toggler');
- click('.topic-post:eq(0) button[data-action=edit]');
+ click('.topic-post:eq(0) button.edit');
andThen(() => {
ok(exists('.bootbox.modal'), 'it pops up a confirmation dialog');
});
diff --git a/test/javascripts/components/d-editor-test.js.es6 b/test/javascripts/components/d-editor-test.js.es6
index ecb486f3a5..d8985c19c7 100644
--- a/test/javascripts/components/d-editor-test.js.es6
+++ b/test/javascripts/components/d-editor-test.js.es6
@@ -1,5 +1,5 @@
import componentTest from 'helpers/component-test';
-import { onToolbarCreate } from 'discourse/components/d-editor';
+import { withPluginApi } from 'discourse/lib/plugin-api';
moduleForComponent('d-editor', {integration: true});
@@ -540,12 +540,14 @@ componentTest('emoji', {
template: '{{d-editor value=value}}',
setup() {
// Test adding a custom button
- onToolbarCreate(toolbar => {
- toolbar.addButton({
- id: 'emoji',
- group: 'extras',
- icon: 'smile-o',
- action: 'emoji'
+ withPluginApi('0.1', api => {
+ api.onToolbarCreate(toolbar => {
+ toolbar.addButton({
+ id: 'emoji',
+ group: 'extras',
+ icon: 'smile-o',
+ action: 'emoji'
+ });
});
});
this.set('value', 'hello world.');
diff --git a/test/javascripts/components/post-menu-test.js.es6 b/test/javascripts/components/post-menu-test.js.es6
deleted file mode 100644
index a027bb660f..0000000000
--- a/test/javascripts/components/post-menu-test.js.es6
+++ /dev/null
@@ -1,52 +0,0 @@
-import componentTest from 'helpers/component-test';
-
-moduleForComponent('post-menu', {integration: true});
-
-function setup(store) {
- const topic = store.createRecord('topic', {id: 123});
- const post = store.createRecord('post', {
- id: 1,
- post_number: 1,
- topic,
- like_count: 3,
- actions_summary: [
- {id: 2, count: 3, hidden: false, can_act: true}
- ]
- });
-
- this.on('toggleLike', function() {
- post.toggleProperty('likeAction.acted');
- });
-
- this.set('post', post);
-}
-
-componentTest('basic render', {
- template: '{{post-menu post=post}}',
- setup,
- test(assert) {
- assert.ok(!!this.$('.post-menu-area').length, 'it renders a post menu');
- assert.ok(!!this.$('.actions button[data-share-url]').length, 'it renders a share button');
- }
-});
-
-componentTest('liking', {
- template: '{{post-menu post=post toggleLike="toggleLike"}}',
- setup,
- test(assert) {
- assert.ok(!!this.$('.actions button.like').length);
- assert.ok(!!this.$('.actions button.like-count').length);
-
- click('.actions button.like');
- andThen(() => {
- assert.ok(!this.$('.actions button.like').length);
- assert.ok(!!this.$('.actions button.has-like').length);
- });
-
- click('.actions button.has-like');
- andThen(() => {
- assert.ok(!!this.$('.actions button.like').length);
- assert.ok(!this.$('.actions button.has-like').length);
- });
- }
-});
diff --git a/test/javascripts/controllers/create-account-test.js.es6 b/test/javascripts/controllers/create-account-test.js.es6
index 4c202880aa..0f7284be6f 100644
--- a/test/javascripts/controllers/create-account-test.js.es6
+++ b/test/javascripts/controllers/create-account-test.js.es6
@@ -28,11 +28,11 @@ test('passwordValidation', function() {
var controller = subject();
controller.set('passwordRequired', true);
- controller.set('accountEmail', 'pork@chops.com');
- controller.set('accountUsername', 'porkchops');
+ controller.set('accountEmail', 'pork@chops.com');
+ controller.set('accountUsername', 'porkchops');
controller.set('prefilledUsername', 'porkchops');
- controller.set('accountPassword', 'b4fcdae11f9167');
+ controller.set('accountPassword', 'b4fcdae11f9167');
equal(controller.get('passwordValidation.ok'), true, 'Password is ok');
equal(controller.get('passwordValidation.reason'), I18n.t('user.password.ok'), 'Password is valid');
diff --git a/test/javascripts/controllers/topic-test.js.es6 b/test/javascripts/controllers/topic-test.js.es6
index 13fdc144eb..48f0bcdbd0 100644
--- a/test/javascripts/controllers/topic-test.js.es6
+++ b/test/javascripts/controllers/topic-test.js.es6
@@ -6,6 +6,7 @@ moduleFor('controller:topic', 'controller:topic', {
});
import Topic from 'discourse/models/topic';
+import AppEvents from 'discourse/lib/app-events';
var buildTopic = function() {
return Topic.create({
@@ -62,7 +63,7 @@ test("toggledSelectedPost", function() {
});
test("selectAll", function() {
- var tc = this.subject({model: buildTopic()}),
+ var tc = this.subject({model: buildTopic(), appEvents: AppEvents.create()}),
post = Discourse.Post.create({id: 123, post_number: 2}),
postStream = tc.get('model.postStream');
diff --git a/test/javascripts/ember/resolver-test.js.es6 b/test/javascripts/ember/resolver-test.js.es6
index 948add12d8..1e5ad1ea59 100644
--- a/test/javascripts/ember/resolver-test.js.es6
+++ b/test/javascripts/ember/resolver-test.js.es6
@@ -1,7 +1,7 @@
import DiscourseResolver from 'discourse/ember/resolver';
-var originalTemplates, originalMobileViewFlag;
-var resolver = DiscourseResolver.create();
+let originalTemplates;
+let resolver;
function lookupTemplate(name, expectedTemplate, message) {
var parseName = resolver.parseName(name);
@@ -20,13 +20,11 @@ module("lib:resolver", {
originalTemplates = Ember.TEMPLATES;
Ember.TEMPLATES = {};
- originalMobileViewFlag = Discourse.Mobile.mobileView;
- Discourse.Mobile.mobileView = false;
+ resolver = DiscourseResolver.create();
},
teardown: function() {
Ember.TEMPLATES = originalTemplates;
- Discourse.Mobile.mobileView = originalMobileViewFlag;
}
});
@@ -92,7 +90,7 @@ test("resolves mobile templates to 'mobile/' namespace", function() {
"baz"
]);
- Discourse.Mobile.mobileView = true;
+ resolver.mobileView = true;
lookupTemplate("template:foo", "mobile/foo", "finding mobile version even if normal one is not present");
lookupTemplate("template:bar", "mobile/bar", "preferring mobile version when both mobile and normal versions are present");
diff --git a/test/javascripts/fixtures/site-fixtures.js.es6 b/test/javascripts/fixtures/site-fixtures.js.es6
index 9e29ee832f..81ce4b8697 100644
--- a/test/javascripts/fixtures/site-fixtures.js.es6
+++ b/test/javascripts/fixtures/site-fixtures.js.es6
@@ -19,7 +19,8 @@ export default {
"post_types":{
"regular":1,
"moderator_action":2,
- "small_action":3
+ "small_action":3,
+ "whisper":4
},
"group_names":[
"admins",
diff --git a/test/javascripts/fixtures/user_fixtures.js.es6 b/test/javascripts/fixtures/user_fixtures.js.es6
index c18d6f2fe9..c123605c3a 100644
--- a/test/javascripts/fixtures/user_fixtures.js.es6
+++ b/test/javascripts/fixtures/user_fixtures.js.es6
@@ -1,6 +1,6 @@
/*jshint maxlen:10000000 */
export default {
-"/users/eviltrout.json": {"user_badges":[{"id":5870,"granted_at":"2014-05-16T02:39:38.388Z","badge_id":4,"user_id":19,"granted_by_id":-1},{"id":40673,"granted_at":"2014-03-31T14:23:18.060Z","post_id":7241,"post_number":19,"badge_id":23,"user_id":19,"granted_by_id":-1,"topic_id":3153},{"id":5868,"granted_at":"2014-05-16T02:39:38.380Z","badge_id":3,"user_id":19,"granted_by_id":-1}],"badges":[{"id":4,"name":"Leader","description":null,"grant_count":7,"allow_title":true,"multiple_grant":false,"icon":"fa-user","image":null,"listable":true,"enabled":true,"badge_grouping_id":4,"system":true,"badge_type_id":1},{"id":23,"name":"Great Share","description":null,"grant_count":14,"allow_title":false,"multiple_grant":true,"icon":"fa-certificate","image":null,"listable":true,"enabled":true,"badge_grouping_id":2,"system":true,"badge_type_id":1},{"id":3,"name":"Regular","description":null,"grant_count":30,"allow_title":true,"multiple_grant":false,"icon":"fa-user","image":null,"listable":true,"enabled":true,"badge_grouping_id":4,"system":true,"badge_type_id":2}],"badge_types":[{"id":1,"name":"Gold","sort_order":9},{"id":2,"name":"Silver","sort_order":8},{"id":3,"name":"Bronze","sort_order":7}],"users":[{"id":19,"username":"eviltrout","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/eviltrout/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png"},{"id":-1,"username":"system","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/system/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png"}],"topics":[{"id":3153,"title":"Is it better for Discourse to use JavaScript or CoffeeScript?","fancy_title":"Is it better for Discourse to use JavaScript or CoffeeScript?","slug":"is-it-better-for-discourse-to-use-javascript-or-coffeescript","posts_count":56}],"user":{"user_option":{},"id":19,"username":"eviltrout","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/eviltrout/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png","name":"Robin Ward","email":"robin.ward@gmail.com","last_posted_at":"2015-05-07T15:23:35.074Z","last_seen_at":"2015-05-13T14:34:23.188Z","bio_raw":"Co-founder of Discourse. Previously, I created Forumwarz. Follow me on Twitter.","bio_cooked":"
","created_at":"2013-02-03T15:19:22.704Z","website":"http://eviltrout.com","location":"Toronto","can_edit":false,"can_edit_username":true,"can_edit_email":true,"can_edit_name":true,"stats":[{"action_type":13,"count":342,"id":null},{"action_type":12,"count":109,"id":null},{"action_type":4,"count":27,"id":null},{"action_type":5,"count":1607,"id":null},{"action_type":6,"count":771,"id":null},{"action_type":1,"count":333,"id":null},{"action_type":2,"count":2671,"id":null},{"action_type":7,"count":949,"id":null},{"action_type":9,"count":42,"id":null},{"action_type":3,"count":8,"id":null},{"action_type":11,"count":20,"id":null}],"can_send_private_messages":true,"can_send_private_message_to_user":false,"bio_excerpt":"Co-founder of Discourse. Previously, I created Forumwarz. Follow me on Twitter.","trust_level":4,"moderator":true,"admin":true,"title":"co-founder","badge_count":23,"notification_count":3244,"has_title_badges":true,"custom_fields":{},"user_fields":{"1":"33"},"pending_count":0,"post_count":1987,"can_be_deleted":false,"can_delete_all_posts":false,"locale":"","email_digests":true,"email_private_messages":true,"email_direct":true,"email_always":true,"digest_after_days":7,"mailing_list_mode":false,"auto_track_topics_after_msecs":60000,"new_topic_duration_minutes":1440,"external_links_in_new_tab":false,"dynamic_favicon":true,"enable_quoting":true,"muted_category_ids":[],"tracked_category_ids":[],"watched_category_ids":[3],"private_messages_stats":{"all":101,"mine":13,"unread":3},"disable_jump_reply":false,"gravatar_avatar_upload_id":5275,"custom_avatar_upload_id":1573,"card_image_badge":"https://meta-discourse.global.ssl.fastly.net/uploads/default/36220/15b19c80dd99d5a5.png","card_image_badge_id":120,"muted_usernames":[],"invited_by":{"id":1,"username":"sam","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/sam/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png"},"custom_groups":[{"id":44,"automatic":false,"name":"ubuntu","user_count":11,"alias_level":0,"visible":true,"automatic_membership_email_domains":null,"automatic_membership_retroactive":false,"primary_group":false,"title":null},{"id":47,"automatic":false,"name":"discourse","user_count":7,"alias_level":0,"visible":true,"automatic_membership_email_domains":null,"automatic_membership_retroactive":false,"primary_group":false,"title":null}],"featured_user_badge_ids":[5870,40673,5868],"card_badge":{"id":120,"name":"Garbage Man","description":"This Discourse developer successfully called something \"garbage!\"","grant_count":3,"allow_title":false,"multiple_grant":false,"icon":"https://meta-discourse.global.ssl.fastly.net/uploads/default/36220/15b19c80dd99d5a5.png","image":"https://meta-discourse.global.ssl.fastly.net/uploads/default/36220/15b19c80dd99d5a5.png","listable":false,"enabled":false,"badge_grouping_id":8,"system":false,"badge_type_id":3}}},
+"/users/eviltrout.json": {"user_badges":[{"id":5870,"granted_at":"2014-05-16T02:39:38.388Z","badge_id":4,"user_id":19,"granted_by_id":-1},{"id":40673,"granted_at":"2014-03-31T14:23:18.060Z","post_id":7241,"post_number":19,"badge_id":23,"user_id":19,"granted_by_id":-1,"topic_id":3153},{"id":5868,"granted_at":"2014-05-16T02:39:38.380Z","badge_id":3,"user_id":19,"granted_by_id":-1}],"badges":[{"id":4,"name":"Leader","description":null,"grant_count":7,"allow_title":true,"multiple_grant":false,"icon":"fa-user","image":null,"listable":true,"enabled":true,"badge_grouping_id":4,"system":true,"badge_type_id":1},{"id":23,"name":"Great Share","description":null,"grant_count":14,"allow_title":false,"multiple_grant":true,"icon":"fa-certificate","image":null,"listable":true,"enabled":true,"badge_grouping_id":2,"system":true,"badge_type_id":1},{"id":3,"name":"Regular","description":null,"grant_count":30,"allow_title":true,"multiple_grant":false,"icon":"fa-user","image":null,"listable":true,"enabled":true,"badge_grouping_id":4,"system":true,"badge_type_id":2}],"badge_types":[{"id":1,"name":"Gold","sort_order":9},{"id":2,"name":"Silver","sort_order":8},{"id":3,"name":"Bronze","sort_order":7}],"users":[{"id":19,"username":"eviltrout","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/eviltrout/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png"},{"id":-1,"username":"system","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/system/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png"}],"topics":[{"id":3153,"title":"Is it better for Discourse to use JavaScript or CoffeeScript?","fancy_title":"Is it better for Discourse to use JavaScript or CoffeeScript?","slug":"is-it-better-for-discourse-to-use-javascript-or-coffeescript","posts_count":56}],"user":{"user_option":{},"id":19,"username":"eviltrout","uploaded_avatar_id":null,"avatar_template":"/letter_avatar/eviltrout/{size}/3_f9720745f5ce6dfc2b5641fca999d934.png","name":"Robin Ward","email":"robin.ward@gmail.com","last_posted_at":"2015-05-07T15:23:35.074Z","last_seen_at":"2015-05-13T14:34:23.188Z","bio_raw":"Co-founder of Discourse. Previously, I created Forumwarz. Follow me on Twitter.","bio_cooked":"