From 6e942a11218760829fd7b34b893306abf4041ef3 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 11:11:41 -0500 Subject: [PATCH 001/116] Fix typos in comments --- plugins/talk-plugin-google-auth/server/router.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-google-auth/server/router.js b/plugins/talk-plugin-google-auth/server/router.js index 89977f35b..d369505af 100644 --- a/plugins/talk-plugin-google-auth/server/router.js +++ b/plugins/talk-plugin-google-auth/server/router.js @@ -2,7 +2,7 @@ module.exports = router => { const { passport, HandleAuthPopupCallback } = require('services/passport'); /** - * Google auth endpoint, this will redirect the user immediatly to google + * Google auth endpoint, this will redirect the user immediately to google * for authorization. */ router.get( @@ -16,7 +16,7 @@ module.exports = router => { /** * Google callback endpoint, this will send the user a html page designed to - * send back the user credentials upon sucesfull login. + * send back the user credentials upon sucessful login. */ router.get('/api/v1/auth/google/callback', (req, res, next) => { // Perform the google login flow and pass the data back through the opener. From 76237f42dae338234da423b96ab5714374e7ed8e Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 11:29:28 -0500 Subject: [PATCH 002/116] Begin adding Hebrew translation --- client/coral-framework/services/i18n.js | 5 + locales/he.yml | 465 ++++++++++++++++++++++++ 2 files changed, 470 insertions(+) create mode 100644 locales/he.yml diff --git a/client/coral-framework/services/i18n.js b/client/coral-framework/services/i18n.js index f467f7f53..0a4040007 100644 --- a/client/coral-framework/services/i18n.js +++ b/client/coral-framework/services/i18n.js @@ -8,6 +8,7 @@ import 'moment/locale/da'; import 'moment/locale/de'; import 'moment/locale/es'; import 'moment/locale/fr'; +import 'moment/locale/he'; import 'moment/locale/pt-br'; import { createStorage } from 'coral-framework/services/storage'; @@ -16,6 +17,7 @@ import daTA from 'timeago.js/locales/da'; import deTA from 'timeago.js/locales/de'; import esTA from 'timeago.js/locales/es'; import frTA from 'timeago.js/locales/fr'; +import heTA from 'timeago.js/locales/he'; import pt_BRTA from 'timeago.js/locales/pt_BR'; import zh_CNTA from 'timeago.js/locales/zh_CN'; import zh_TWTA from 'timeago.js/locales/zh_TW'; @@ -26,6 +28,7 @@ import da from '../../../locales/da.yml'; import de from '../../../locales/de.yml'; import es from '../../../locales/es.yml'; import fr from '../../../locales/fr.yml'; +import he from '../../../locales/he.yml'; import pt_BR from '../../../locales/pt_BR.yml'; import zh_CN from '../../../locales/zh_CN.yml'; import zh_TW from '../../../locales/zh_TW.yml'; @@ -38,6 +41,7 @@ const translations = { ...de, ...es, ...fr, + ...he, ...nl_NL, ...pt_BR, ...zh_CN, @@ -92,6 +96,7 @@ export function setupTranslations() { ta.register('da', daTA); ta.register('de', deTA); ta.register('fr', frTA); + ta.register('he', heTA); ta.register('pt_BR', pt_BRTA); ta.register('zh_CN', zh_CNTA); ta.register('zh_TW', zh_TWTA); diff --git a/locales/he.yml b/locales/he.yml new file mode 100644 index 000000000..8f7a3853b --- /dev/null +++ b/locales/he.yml @@ -0,0 +1,465 @@ +en: + your_account_has_been_suspended: Your account has been temporarily suspended. + your_account_has_been_banned: Your account has been banned. + your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username. + embed_comments_tab: Comments + bandialog: + are_you_sure: "Are you sure you would like to ban {0}?" + ban_user: "Ban User?" + banned_user: "Banned User" + cancel: "Cancel" + note: "Note: {0}" + note_reject_comment: "Banning this user will also place this comment in the Rejected queue." + note_ban_user: "Banning this user will not let them comment, react to, or report comments." + yes_ban_user: "Yes, Ban User" + write_a_message: "Write a message" + send: "Send" + notify_ban_headline: "Notify the user of ban" + notify_ban_description: "This will notify the user by email that they have been banned from the community" + email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." + bio_offensive: "This bio is offensive" + cancel: "Cancel" + confirm_email: + click_to_confirm: "Click below to confirm your email address" + confirm: "Confirm" + password_reset: + mail_sent: 'If you have a registered account, a password reset link was sent to that email' + set_new_password: "Change Your Password" + new_password: "New Password" + new_password_help: "Password must be at least 8 characters" + confirm_new_password: "Confirm New Password" + change_password: "Change Password" + characters_remaining: "characters remaining" + comment: + anon: "Anonymous" + undo_reject: "Undo" + ban_user: "Ban User" + comment: "Post a comment" + edited: Edited + flagged: "flagged" + view_context: "View context" + comment_box: + post: "Post" + cancel: "Cancel" + reply: "Reply" + comment: "Post a comment" + name: "Name" + comment_post_notif: "Your comment has been posted." + comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." + comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." + characters_remaining: "characters remaining" + comment_offensive: "This comment is offensive" + comment_singular: Comment + comment_plural: Comments + comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." + comment_post_notif: "Your comment has been posted." + comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." + common: + copy: 'Copy' + error: 'An error has occurred.' + reply: 'reply' + replies: 'replies' + reaction: 'reaction' + reactions: 'reactions' + story: 'Story' + flagged_usernames: + notify_approved: '{0} approved username {1}' + notify_rejected: '{0} rejected username {1}' + notify_flagged: '{0} reported username {1}' + notify_changed: 'user {0} changed their username to {1}' + community: + account_creation_date: "Account Creation Date" + active: Active + admin: Administrator + ads_marketing: "This looks like an ad/marketing" + are_you_sure: "Are you sure you would like to ban {0}?" + ban_user: "Ban User?" + banned: Banned + banned_user: "Banned User" + cancel: Cancel + dont_like_username: "Dislike username" + flaggedaccounts: "Reported Usernames" + flags: Flags + impersonating: "Impersonation" + loading: "Loading results" + moderator: Moderator + newsroom_role: "Newsroom Role" + no_flagged_accounts: "The Reported Usernames queue is currently empty." + no_results: "No users found with that user name or email address. They're hiding!" + offensive: "Offensive" + other: Other + people: People + role: "Select role..." + select_status: "Select status..." + spam_ads: "Spam/Ads" + staff: "Staff" + status: Status + username_and_email: "Username and Email" + yes_ban_user: "Yes Ban User" + commenter: "Commenter" + configure: + apply: Apply + banned_word_text: "Comments which contain these words or phrases (not case-sensitive) will be automatically removed from the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." + banned_words_title: "Banned words list" + close: "Close" + close_after: "Close comments after" + close_stream: "Close Stream" + close_stream_configuration: "This comment stream is currently closed. By opening this comment stream new comments may be submitted and displayed" + closed_comments_desc: "Write a message to be displayed when when your comment stream is closed and no longer accepting comments." + closed_comments_label: "Write a message..." + closed_stream_settings: "Closed Stream Message" + comment_count_error: "Please enter a valid number." + comment_count_header: "Limit Comment Length" + comment_count_text_post: characters + comment_count_text_pre: "Comments will be limited to" + comment_settings: Settings + comment_stream: "Comment Stream" + comment_stream_will_close: "The comment stream will close" + community: Community + configure: Configure + copy_and_paste: "Copy and paste code below into your CMS to embed your comment box in your articles" + custom_css_url: "Custom CSS URL" + custom_css_url_desc: "URL of a CSS stylesheet that will override default Embed Stream styles. Can be internal or external." + days: Days + description: "As an admin, you can customize the settings for the comment stream for this story:" + domain_list_text: "Enter the domains you would like to permit for Talk e.g. your local staging and production environments (ex. localhost:3000 staging.domain.com domain.com)." + domain_list_title: "Permitted Domains" + edit_comment_timeframe_heading: "Edit Comment Timeframe" + edit_comment_timeframe_text_pre: "Commenters will have" + edit_comment_timeframe_text_post: "seconds to edit their comments." + embed_comment_stream: "Embed Stream" + enable_premod_links_text: "Moderators must approve any comment containing a link before it is published." + enable_pre_moderation: "Enable pre-moderation" + enable_pre_moderation_text: "Moderators must approve any comment before it is published." + enable_premod_links: "Pre-Moderate Comments Containing Links" + enable_premod: "Enable Premoderation" + enable_premod_description: "Moderators must approve any comment before it is published." + enable_premod_links_description: "Moderators must approve any comment containing a link before it is published." + enable_questionbox: "Ask Readers a Question" + enable_questionbox_description: "This question will appear at the top of this comment stream. Ask readers about a certain issue in the article or pose discussion questions etc." + hours: Hours + include_comment_stream: "Include Comment Stream Description for Readers" + include_comment_stream_desc: "Write a message to be added to the top of your comment stream. Pose a topic include community guidelines etc." + include_text: "Include your text here." + include_question_here: "Write your question here:" + moderate: Moderate + moderation_settings: "Moderation Settings" + open: "Open" + open_stream: "Open Stream" + open_stream_configuration: "This comment stream is currently open. By closing this comment stream no new comments may be submitted and all previous comments will still be displayed." + require_email_verification: "Require Email Verification" + require_email_verification_text: "New Users must verify their email before commenting" + save_changes: "Save Changes" + shortcuts: Shortcuts + sign_out: "Sign Out" + stories: Stories + stream_settings: "Stream Settings" + suspect_word_title: "Suspect words list" + suspect_word_text: "Comments which contain these words or phrases (not case-sensitive) will be highlighted in the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." + tech_settings: "Tech Settings" + title: "Configure Comment Stream" + weeks: Weeks + wordlist: "Banned Words" + continue: "Continue" + createdisplay: + check_the_form: "Invalid Form. Please check the fields" + continue: "Continue with the same Facebook username" + error_create: "Error when changing username" + fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." + fake_comment_date: "1 minute ago" + if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." + required_field: "Required field" + save: Save + special_characters: "Usernames can contain letters numbers and _ only" + username: Username + write_your_username: "Edit your username" + your_username: "Your username appears on every comment you post." + done: Done + edit_comment: + body_input_label: "Edit this comment" + save_button: "Save changes" + edit_window_expired: "You can no longer edit this comment. The time window to do so has expired. Why not post another one?" + edit_window_expired_close: "Close" + edit_window_timer_prefix: "Edit Window: " + second: "second" + seconds_plural: "seconds" + minute: "minute" + minutes_plural: "minutes" + email: + suspended: + subject: "Your account has been suspended" + banned: + subject: "Your account has been banned" + body: "In accordance with The Coral Project’s community guidelines, your account has been banned. You are now longer allowed to comment, flag or engage with our community." + confirm: + has_been_requested: "A email confirmation has been requested for the following account:" + to_confirm: "To confirm the account, please visit the following link:" + confirm_email: "Confirm Email" + if_you_did_not: "If you did not request this, you can safely ignore this email." + subject: "Email Confirmation" + password_reset: + we_received_a_request: "We received a request to reset your password. If you did not request this change, you can ignore this email." + if_you_did: "If you did," + please_click: "please click here to reset password" + embedlink: + copy: "Copy to Clipboard" + error: + COMMENT_PARENT_NOT_VISIBLE: "The comment that you're replying to has been removed or doesn't exist." + EMAIL_VERIFICATION_TOKEN_INVALID: "Email verification token is invalid." + PASSWORD_RESET_TOKEN_INVALID: "Your password reset link is invalid." + COMMENT_TOO_SHORT: "Comments should be more than one character, please revise your comment and try again." + NOT_AUTHORIZED: "You are not authorized to perform this action." + NO_SPECIAL_CHARACTERS: "Usernames can contain letters numbers and _ only" + PASSWORD_LENGTH: "Password is too short" + PROFANITY_ERROR: "Usernames must not contain profanity. Please contact the administrator if you believe this to be in error." + RATE_LIMIT_EXCEEDED: "Rate limit exceeded" + USERNAME_IN_USE: "Username already in use" + USERNAME_REQUIRED: "Must input a username" + EMAIL_NOT_VERIFIED: "E-mail address not verified" + EDIT_WINDOW_ENDED: "You can no longer edit this comment. The time window to do so has expired." + EDIT_USERNAME_NOT_AUTHORIZED: "You do not have permission to update your username." + SAME_USERNAME_PROVIDED: "You must submit a different username." + EMAIL_IN_USE: "Email address already in use" + EMAIL_REQUIRED: "An email address is required" + LOGIN_MAXIMUM_EXCEEDED: "You have made too many unsuccessful password attempts. Please wait." + PASSWORD_REQUIRED: "Must input a password" + COMMENTING_CLOSED: "Commenting is already closed" + NOT_FOUND: "Resource not found" + ALREADY_EXISTS: "Resource already exists" + INVALID_ASSET_URL: "Assert URL is invalid" + CANNOT_IGNORE_STAFF: "Cannot ignore Staff members." + email: "Not a valid E-Mail" + confirm_password: "Passwords don't match. Please check again" + network_error: "Failed to connect to server. Check your internet connection and try again." + email_not_verified: "E-mail address {0} not verified." + email_password: "E-mail and/or password combination incorrect." + organization_name: "Organization name must only contain letters or numbers." + password: "Password must be at least 8 characters" + username: "Usernames can contain letters numbers and _ only" + unexpected: "Unexpected error occurred. Sorry!" + required_field: "This field is required" + temporarily_suspended: "Your account is currently suspended. It will be reactivated {0}. Please contact us if you have any questions." + flag_comment: "Report comment" + flag_reason: "Reason for reporting (Optional)" + flag_username: "Report username" + framework: + banned_account_header: "Your account is currently banned." + banned_account_body: "This means that you cannot Like, Report, or write comments." + comment: comment + comment_is_ignored: "This comment is hidden because you ignored this user." + comment_is_rejected: "You have rejected this comment." + comment_is_hidden: "This comment is not available." + comments: comments + configure_stream: "Configure" + content_not_available: "This content is not available" + edit_name: + button: Submit + error: "Usernames can contain letters numbers and _ only" + label: "New Username" + msg: "Your account is currently suspended because your username has been deemed inappropriate. To restore your account please enter a new username. Please contact us if you have any questions." + changed_name: + msg: "Your username change is under review by our moderation team." + my_comments: "My Comments" + my_profile: "My profile" + new_count: "View {0} more {1}" + profile: Profile + show_all_comments: "Show all comments" + success_bio_update: "Your biography has been updated" + success_name_update: "Your username has been updated" + success_update_settings: "The changes you have made have been applied to the comment stream on this article" + show_all_replies: Show all replies + show_more_replies: Show more replies + view_more_comments: "view more comments" + view_reply: "view reply" + from_settings_page: "From the Profile Page you can see your comment history." + like: Like + loading_results: "Loading Results" + marketing: "This looks like an ad/marketing" + moderate_this_stream: "Moderate this stream" + flags: + reasons: + user: + username_offensive: "Offensive" + username_nolike: "Dislike" + username_impersonating: "Impersonation" + username_spam: "Spam" + username_other: "Other" + comment: + comment_offensive: "Offensive" + comment_spam: "Spam" + comment_noagree: "Disagree" + comment_other: "Other" + suspect_word: "Suspect Word" + banned_word: "Banned Word" + body_count: "Body exceeds max length" + trust: "Trust" + links: "Link" + modqueue: + account: "account flags" + actions: Actions + all: all + all_streams: "All Streams" + notify_edited: '{0} edited comment "{1}"' + notify_accepted: '{0} accepted comment "{1}"' + notify_rejected: '{0} rejected comment "{1}"' + notify_flagged: '{0} flagged comment "{1}"' + notify_reset: '{0} reset status of comment "{1}"' + approve: "Approve" + approved: "Approved" + ban_user: "Ban" + billion: B + close: Close + empty_queue: "No more comments to moderate! You're all caught up. Go have some ☕️" + flagged: flagged + reported: reported + less_detail: "Less detail" + likes: likes + million: M + mod_faster: "Moderate faster with keyboard shortcuts" + moderate: "Moderate →" + more_detail: "More detail" + new: New + newest_first: "Newest First" + navigation: Navigation + next_comment: "Go to the next comment" + toggle_search: "Open search" + next_queue: "Switch queues" + oldest_first: "Oldest First" + premod: pre-mod + prev_comment: "Go to the previous comment" + reject: "Reject" + rejected: "Rejected" + reply: "Reply" + select_stream: "Select Stream" + shift_key: "⇧" + shortcuts: "Shortcuts" + sort: "Sort" + show_shortcuts: "Show Shortcuts" + singleview: "Zen mode" + thismenu: "Open this menu" + jump_to_queue: "Jump to specific queue" + thousand: k + try_these: "Try these" + view_more_shortcuts: "View more shortcuts" + my_comment_history: "My comment History" + name: Name + no_agree_comment: "I don't agree with this comment" + no_like_bio: "I don't like this bio" + no_like_username: "I don't like this username" + already_flagged_username: "You have already flagged this username." + other: Other + permalink: Share + personal_info: "This comment reveals personally identifiable information" + post: Post + profile: Profile + profile_settings: "Profile Settings" + reply: Reply + report: Report + report_notif: "Thank you for reporting this comment. Our moderation team has been notified and will review it shortly." + report_notif_remove: "Your report has been removed." + reported: Reported + settings: + from_settings_page: "From the Profile Page you can see your comment history." + my_comment_history: "My comment History" + profile: Profile + profile_settings: "Profile Settings" + sign_in: "Sign in" + to_access: "to access Profile" + user_no_comment: "You've never left a comment. Join the conversation!" + stream: + all_comments: "All Comments" + temporarily_suspended: "In accordance with {0}'s community guidelines, your account has been temporarily suspended. Please rejoin the conversation {1}." + comment_not_found: "This comment has been removed or does not exist." + no_comments: "There are no comments yet, why don’t you write one?" + no_comments_and_closed: "There were no comments on this article." + step_1_header: "Report an issue" + step_2_header: "Help us understand" + step_3_header: "Thank you for your input" + streams: + all: All + article: Story + closed: Closed + empty_result: "No assets match this search. Maybe try widening your search?" + filter_streams: "Filter Streams" + newest: Newest + oldest: Oldest + open: Open + pubdate: "Publication Date" + search: Search + sort_by: "Sort By" + status: "Stream Status" + stream_status: "Stream Status" + suspenduser: + title_suspend: "Suspend User" + description_suspend: "You are suspending {0}. This comment will go to the Rejected queue, and {0} will not be allowed to like, report, reply or post until the suspension time is complete." + select_duration: "Select suspension duration" + one_hour: "1 hour" + hours: "{0} hours" + days: "{0} days" + cancel: "Cancel" + suspend_user: "Suspend User" + email_message_suspend: "Dear {0},\n\nIn accordance with {1}’s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}." + title_notify: "Notify the user of their temporary suspension" + notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." + description_notify: "Suspending this user will temporarily disable their account." + write_message: "Write a message" + send: Send + reject_username: + username: username + no_cancel: "No cancel" + description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}." + title_notify: "Notify the user of their temporary suspension" + description_notify: "Suspending this user will temporarily disable their account." + title_reject: "We noticed you rejected a username" + suspend_user: "Suspend User" + yes_suspend: "Yes suspend" + email_message_reject: "Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please e-mail us if you have any questions or concerns." + write_message: "Write a message" + send: Send + thank_you: "We value your safety and feedback. A moderator will review your report." + user: + bio_flags: "flags for this bio" + user_bio: "User Bio" + username_flags: "flags for this username" + user_detail: + remove_suspension: "Remove Suspension" + suspend: "Suspend User" + remove_ban: "Remove Ban" + ban: "Ban User" + member_since: "Member Since" + email: "Email" + total_comments: "Total Comments" + reject_rate: "Reject Rate" + reports: "Reports" + all: "All" + rejected: "Rejected" + account_history: "Account History" + user_impersonating: "This user is impersonating" + user_no_comment: "You've never left a comment. Join the conversation!" + username_offensive: "This username is offensive" + view_conversation: "View Conversation" + install: + initial: + description: "Let's set up your Talk community in just a few short steps." + submit: "Get Started" + add_organization: + description: "Please tell us the name of your organization. This will appear in emails when inviting new team members." + label: "Organization Name" + save: "Save" + create: + email: "Email address" + username: "Username" + password: "Password" + confirm_password: "Confirm Password" + save: "Save" + permitted_domains: + title: "Permitted domains" + description: "Enter the domains you would like to permit for Talk, e.g. your local, staging and production environments (ex. localhost:3000, staging.domain.com, domain.com)." + submit: "Finish install" + final: + description: "Thanks for installing Talk! We sent an email to verify your email address. While you finish setting up the account, you can start engaging with your readers now." + launch: "Launch Talk" + close: "Close this Installer" + admin_sidebar: + view_options: "View Options" + sort_comments: "Sort Comments" From e775a9f09249cef575c257b077b235f4737d5c4c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 12:00:01 -0500 Subject: [PATCH 003/116] Add Hebrew template to all translation files --- locales/he.yml | 8 +-- .../talk-plugin-auth/client/translations.yml | 43 +++++++++++++++ .../client/translations.yml | 2 + .../client/translations.yml | 15 ++++++ .../client/translations.yml | 3 ++ .../client/translations.yml | 15 +++++- .../talk-plugin-like/client/translations.yml | 12 +++-- .../talk-plugin-love/client/translations.yml | 4 ++ .../client/translations.yml | 3 ++ .../client/translations.yml | 12 +++++ .../client/translations.json | 12 +++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 12 +++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 3 ++ .../client/translations.yml | 3 ++ .../client/translations.yml | 9 ++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 54 ++++++++++++------- .../client/translations.yml | 15 ++++-- 22 files changed, 212 insertions(+), 58 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index 8f7a3853b..b07e82806 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -2,7 +2,7 @@ en: your_account_has_been_suspended: Your account has been temporarily suspended. your_account_has_been_banned: Your account has been banned. your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username. - embed_comments_tab: Comments + embed_comments_tab: תגובות bandialog: are_you_sure: "Are you sure you would like to ban {0}?" ban_user: "Ban User?" @@ -43,7 +43,7 @@ en: cancel: "Cancel" reply: "Reply" comment: "Post a comment" - name: "Name" + name: "שם" comment_post_notif: "Your comment has been posted." comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." @@ -445,9 +445,9 @@ en: add_organization: description: "Please tell us the name of your organization. This will appear in emails when inviting new team members." label: "Organization Name" - save: "Save" + save: "שמור" create: - email: "Email address" + email: 'כתובת דוא"ל' username: "Username" password: "Password" confirm_password: "Confirm Password" diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 9731da90a..7d1bed07b 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -220,6 +220,49 @@ fr: username: "Nom d'utilisateur" write_your_username: "Modifier votre nom d'utilisateur" your_username: "Votre nom d'utilisateur apparaît sur chaque commentaire que vous publiez." +he: + talk-plugin-auth: + login: + email_verify_cta: "Please verify your email address." + request_new_verify_email: "Request another email" + verify_email: "Thank you for creating an account! We sent an email to the address you provided to verify your account." + verify_email2: "You must verify your account before engaging with the community." + not_you: "Not you?" + logged_in_as: "Signed in as" + logout: "Sign out" + sign_in: "Sign in" + sign_in_to_join: "Sign in to join the conversation" + or: "Or" + email: "E-mail Address" + password: "Password" + forgot_your_pass: "Forgot your password?" + need_an_account: "Need an account?" + register: "Register" + sign_up: "Sign Up" + confirm_password: "Confirm Password" + username: "Username" + already_have_an_account: "Already have an account?" + recover_password: "Recover password" + email_in_use: "Email address already in use" + email_or_username_in_use: "Email address or Username already in use" + required_field: "This field is required" + passwords_dont_match: "Passwords don't match." + special_characters: "Usernames can contain letters, numbers and _ only" + sign_in_to_comment: "Sign in to comment" + check_the_form: "Invalid Form. Please, check the fields" + set_username_dialog: + check_the_form: "Invalid Form. Please check the fields" + continue: "Continue with the same Facebook username" + error_create: "Error when changing username" + fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." + fake_comment_date: "1 minute ago" + if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." + required_field: "Required field" + save: Save + special_characters: "Usernames can contain letters numbers and _ only" + username: Username + write_your_username: "Edit your username" + your_username: "Your username appears on every comment you post." nl_NL: sign_in: email_verify_cta: "Controleer je e-mailadres." diff --git a/plugins/talk-plugin-author-menu/client/translations.yml b/plugins/talk-plugin-author-menu/client/translations.yml index 34f270d50..38dcee29b 100644 --- a/plugins/talk-plugin-author-menu/client/translations.yml +++ b/plugins/talk-plugin-author-menu/client/translations.yml @@ -8,6 +8,8 @@ es: talk-plugin-author-menu: fr: talk-plugin-author-menu: +he: + talk-plugin-author-menu: nl_NL: talk-plugin-author-menu: pt_BR: diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index 003372403..6c8e79e78 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -70,6 +70,21 @@ fr: are_you_sure: Are you sure you would like to feature this comment? cancel: Cancel yes_feature_comment: Yes, feature comment +he: + talk-plugin-featured-comments: + un_feature: Un-Feature + feature: Feature + featured: Featured + featured_comments: Featured Comments + go_to_conversation: Go to conversation + tooltip_description: Comments selected by our team as worth reading + notify_self_featured: 'The comment from {0} is now featured and approved' + notify_featured: '{0} featured and approved comment "{1}"' + notify_unfeatured: '{0} unfeatured comment "{1}"' + feature_comment: Feature comment? + are_you_sure: Are you sure you would like to feature this comment? + cancel: בטל + yes_feature_comment: Yes, feature comment nl_NL: talk-plugin-featured-comments: un_feature: Uitlichting opheffen. diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index b0fe6ccae..b4d74a08a 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-flag-details: flags: Reports +he: + talk-plugin-flag-details: + flags: Reports nl_NL: talk-plugin-flag-details: flags: Meldingen diff --git a/plugins/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-ignore-user/client/translations.yml index 4f32c535d..d1a7a64ac 100644 --- a/plugins/talk-plugin-ignore-user/client/translations.yml +++ b/plugins/talk-plugin-ignore-user/client/translations.yml @@ -60,6 +60,19 @@ fr: notify_success: | You are now ignoring {0}. You can undo this action from My Profile. confirmation_title: Ignore {0}? +he: + talk-plugin-ignore-user: + section_title: Ignored users + section_info: Because you ignored the following commenters, their comments are hidden. + stop_ignoring: Stop ignoring + ignore_user: Ignore User + cancel: בטל + confirmation: | + When you ignore a user, all comments they wrote on the site will be hidden from you. You can + undo this later from My Profile. + notify_success: | + You are now ignoring {0}. You can undo this action from My Profile. + confirmation_title: Ignore {0}? nl_NL: talk-plugin-ignore-user: section_title: Genegeerde gebruikers @@ -68,7 +81,7 @@ nl_NL: ignore_user: Gebruiker negeren cancel: Annuleren confirmation: | - Wanneer je een gebruiker negeert, zullen al zijn/haar reacties voor jou worden verborgen. Je kunt + Wanneer je een gebruiker negeert, zullen al zijn/haar reacties voor jou worden verborgen. Je kunt dit later ongedaan maken vanuit Mijn profiel. notify_success: | Je negeert nu {0}. Je kunt dit ongedaan maken vanuit Mijn profiel. diff --git a/plugins/talk-plugin-like/client/translations.yml b/plugins/talk-plugin-like/client/translations.yml index 5f44db4c7..477b6cd67 100644 --- a/plugins/talk-plugin-like/client/translations.yml +++ b/plugins/talk-plugin-like/client/translations.yml @@ -2,14 +2,14 @@ da: talk-plugin-like: like: Like liked: Liked -en: - talk-plugin-like: - like: Like - liked: Liked de: talk-plugin-like: like: Gefällt mir liked: Gefällt mir +en: + talk-plugin-like: + like: Like + liked: Liked es: talk-plugin-like: like: Me Gusta @@ -18,6 +18,10 @@ fr: talk-plugin-like: like: Like liked: Liked +he: + talk-plugin-like: + like: Like + liked: Liked nl_NL: talk-plugin-like: like: Like diff --git a/plugins/talk-plugin-love/client/translations.yml b/plugins/talk-plugin-love/client/translations.yml index 24744c2f9..9851a93e4 100644 --- a/plugins/talk-plugin-love/client/translations.yml +++ b/plugins/talk-plugin-love/client/translations.yml @@ -18,6 +18,10 @@ fr: talk-plugin-love: love: Love loved: Loved +he: + talk-plugin-love: + love: אוהב + loved: אהבתי nl_NL: talk-plugin-love: love: Ik hou er van diff --git a/plugins/talk-plugin-member-since/client/translations.yml b/plugins/talk-plugin-member-since/client/translations.yml index f63f5a1fd..cd6b542c5 100644 --- a/plugins/talk-plugin-member-since/client/translations.yml +++ b/plugins/talk-plugin-member-since/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-member-since: member_since: "Member Since" +he: + talk-plugin-member-since: + member_since: "Member Since" nl_NL: talk-plugin-member-since: member_since: "Gebruiker sinds" diff --git a/plugins/talk-plugin-moderation-actions/client/translations.yml b/plugins/talk-plugin-moderation-actions/client/translations.yml index 9052d03f5..f967add7f 100644 --- a/plugins/talk-plugin-moderation-actions/client/translations.yml +++ b/plugins/talk-plugin-moderation-actions/client/translations.yml @@ -58,6 +58,18 @@ fr: ban_user_dialog_cancel: "Cancel" ban_user_dialog_yes: "Yes. Ban user" ban_user_dialog_headline: "Ban User?" +he: + talk-plugin-moderation-actions: + reject_comment: "Reject" + approve_comment: "Approve" + approved_comment: "Approved" + moderation_actions: "Moderation Actions" + ban_user: "Ban User" + ban_user_dialog_sub: "Are you sure you would like to ban this user?" + ban_user_dialog_copy: "Note: Banning this user will also place this comment in the Rejected queue." + ban_user_dialog_cancel: "בטל" + ban_user_dialog_yes: "Yes. Ban user" + ban_user_dialog_headline: "Ban User?" nl_NL: talk-plugin-moderation-actions: reject_comment: "Afkeuren" diff --git a/plugins/talk-plugin-offtopic/client/translations.json b/plugins/talk-plugin-offtopic/client/translations.json index 826b3e15b..29e496db0 100644 --- a/plugins/talk-plugin-offtopic/client/translations.json +++ b/plugins/talk-plugin-offtopic/client/translations.json @@ -3,14 +3,14 @@ "off_topic": "Off Topic", "hide_off_topic": "Hide Off-Topic Comments" }, - "en": { - "off_topic": "Off Topic", - "hide_off_topic": "Hide Off-Topic Comments" - }, "de": { "off_topic": "Off-Topic", "hide_off_topic": "Off-Topic-Kommentare verbergen" }, + "en": { + "off_topic": "Off Topic", + "hide_off_topic": "Hide Off-Topic Comments" + }, "es": { "off_topic": "Fuera de Tópico", "hide_off_topic": "Hide Off-Topic Comments" @@ -19,6 +19,10 @@ "off_topic": "Off Topic", "hide_off_topic": "Hide Off-Topic Comments" }, + "he": { + "off_topic": "Off Topic", + "hide_off_topic": "Hide Off-Topic Comments" + }, "nl_NL": { "off_topic": "Off topic", "hide_off_topic": "Off-topic reacties verbergen" diff --git a/plugins/talk-plugin-profile-settings/client/translations.yml b/plugins/talk-plugin-profile-settings/client/translations.yml index cd8edb415..f95bce5c7 100644 --- a/plugins/talk-plugin-profile-settings/client/translations.yml +++ b/plugins/talk-plugin-profile-settings/client/translations.yml @@ -1,15 +1,18 @@ -en: - talk-plugin-profile-settings: - tab: Settings de: talk-plugin-profile-settings: tab: Einstellungen +en: + talk-plugin-profile-settings: + tab: Settings es: talk-plugin-profile-settings: tab: Configuración fr: talk-plugin-profile-settings: tab: Paramètres +he: + talk-plugin-profile-settings: + tab: Settings nl_NL: talk-plugin-profile-settings: tab: Instellingen diff --git a/plugins/talk-plugin-respect/client/translations.yml b/plugins/talk-plugin-respect/client/translations.yml index 22497ea52..7958e6147 100644 --- a/plugins/talk-plugin-respect/client/translations.yml +++ b/plugins/talk-plugin-respect/client/translations.yml @@ -2,14 +2,14 @@ da: talk-plugin-respect: respect: Respect respected: Respected -en: - talk-plugin-respect: - respect: Respect - respected: Respected de: talk-plugin-respect: respect: Respekt respected: Respektiert +en: + talk-plugin-respect: + respect: Respect + respected: Respected es: talk-plugin-respect: respect: Respetar @@ -18,6 +18,10 @@ fr: talk-plugin-respect: respect: Respect respected: Respected +he: + talk-plugin-respect: + respect: Respect + respected: Respected nl_NL: talk-plugin-respect: respect: Respect diff --git a/plugins/talk-plugin-sort-most-liked/client/translations.yml b/plugins/talk-plugin-sort-most-liked/client/translations.yml index f9e48d261..b317c1b2a 100644 --- a/plugins/talk-plugin-sort-most-liked/client/translations.yml +++ b/plugins/talk-plugin-sort-most-liked/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-most-liked: label: Most liked first -en: - talk-plugin-sort-most-liked: - label: Most liked first de: talk-plugin-sort-most-liked: label: Beliebteste zuerst +en: + talk-plugin-sort-most-liked: + label: Most liked first es: talk-plugin-sort-most-liked: label: Most liked first fr: talk-plugin-sort-most-liked: label: Most liked first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-liked: label: Meest geliked eerst diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index c290e4a53..98a4ef12d 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-sort-most-loved: label: Most loved first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-loved: label: Meest geliefd eerst diff --git a/plugins/talk-plugin-sort-most-replied/client/translations.yml b/plugins/talk-plugin-sort-most-replied/client/translations.yml index dacdb93fb..04109a168 100644 --- a/plugins/talk-plugin-sort-most-replied/client/translations.yml +++ b/plugins/talk-plugin-sort-most-replied/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-sort-most-replied: label: Most replied first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-replied: label: Meest beantwoord eerst diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index 736cc63c1..9cb9c50bd 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-most-respected: label: Most respected first -en: - talk-plugin-sort-most-respected: - label: Most respected first de: talk-plugin-sort-most-respected: label: Häufigste "Respektiert" zuerst +en: + talk-plugin-sort-most-liked: + label: Most liked first es: talk-plugin-sort-most-respected: label: Most respected first fr: talk-plugin-sort-most-respected: label: Most respected first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-respected: label: Meest gerespecteerd eerst diff --git a/plugins/talk-plugin-sort-newest/client/translations.yml b/plugins/talk-plugin-sort-newest/client/translations.yml index e85eec18e..b6d4afd47 100644 --- a/plugins/talk-plugin-sort-newest/client/translations.yml +++ b/plugins/talk-plugin-sort-newest/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-newest: label: Newest first -en: - talk-plugin-sort-newest: - label: Newest first de: talk-plugin-sort-newest: label: Neueste zuerst +en: + talk-plugin-sort-newest: + label: Newest first es: talk-plugin-sort-newest: label: Newest first fr: talk-plugin-sort-newest: label: Newest first +he: + talk-plugin-sort-newest: + label: מהראשונה לאחרונה nl_NL: talk-plugin-sort-newest: label: Nieuwste eerst diff --git a/plugins/talk-plugin-sort-oldest/client/translations.yml b/plugins/talk-plugin-sort-oldest/client/translations.yml index f12fe8e43..61f7c8638 100644 --- a/plugins/talk-plugin-sort-oldest/client/translations.yml +++ b/plugins/talk-plugin-sort-oldest/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-oldest: label: Oldest first -en: - talk-plugin-sort-oldest: - label: Oldest first de: talk-plugin-sort-oldest: label: Älteste zuerst +en: + talk-plugin-sort-oldest: + label: Oldest first es: talk-plugin-sort-oldest: label: Oldest first fr: talk-plugin-sort-oldest: label: Oldest first +he: + talk-plugin-sort-oldest: + label: מהאחרונה לראשונה nl_NL: talk-plugin-sort-oldest: label: Oudste eerst diff --git a/plugins/talk-plugin-subscriber/client/translations.yml b/plugins/talk-plugin-subscriber/client/translations.yml index 65b438779..bac95b345 100644 --- a/plugins/talk-plugin-subscriber/client/translations.yml +++ b/plugins/talk-plugin-subscriber/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-subscriber: subscriber: "Subscriber" -en: - talk-plugin-subscriber: - subscriber: "Subscriber" de: talk-plugin-subscriber: subscriber: "Abonnent" +en: + talk-plugin-subscriber: + subscriber: "Subscriber" es: talk-plugin-subscriber: subscriber: "Subscriptor" fr: talk-plugin-subscriber: subscriber: "Subscriber" +he: + talk-plugin-subscriber: + subscriber: "Subscriber" nl_NL: talk-plugin-subscriber: subscriber: "Abonnee" diff --git a/plugins/talk-plugin-toxic-comments/client/translations.yml b/plugins/talk-plugin-toxic-comments/client/translations.yml index 10fe80ec3..321624279 100644 --- a/plugins/talk-plugin-toxic-comments/client/translations.yml +++ b/plugins/talk-plugin-toxic-comments/client/translations.yml @@ -16,24 +16,6 @@ da: reasons: comment: toxic_comment: "Highly likely to be Toxic" -en: - error: - COMMENT_IS_TOXIC: | - Are you sure? The language in this comment might violate our community guidelines. - You can edit the comment or submit it for moderator review. - talk-plugin-toxic-comments: - unlikely: "Unlikely" - highly_likely: "Highly Likely" - possibly: "Possibly" - likely: "Likely" - toxic_comment: "Toxic Comment" - still_toxic: | - This edited comment might still violate our community guidelines. - Our moderation team will review your comment shortly. - flags: - reasons: - comment: - toxic_comment: "Highly likely to be Toxic" de: error: COMMENT_IS_TOXIC: | @@ -52,6 +34,24 @@ de: reasons: comment: toxic_comment: "Höchstwahrscheinlich bösartig" +en: + error: + COMMENT_IS_TOXIC: | + Are you sure? The language in this comment might violate our community guidelines. + You can edit the comment or submit it for moderator review. + talk-plugin-toxic-comments: + unlikely: "Unlikely" + highly_likely: "Highly Likely" + possibly: "Possibly" + likely: "Likely" + toxic_comment: "Toxic Comment" + still_toxic: | + This edited comment might still violate our community guidelines. + Our moderation team will review your comment shortly. + flags: + reasons: + comment: + toxic_comment: "Highly likely to be Toxic" es: error: COMMENT_IS_TOXIC: | @@ -88,6 +88,24 @@ fr: reasons: comment: toxic_comment: "Highly likely to be Toxic" +he: + error: + COMMENT_IS_TOXIC: | + Are you sure? The language in this comment might violate our community guidelines. + You can edit the comment or submit it for moderator review. + talk-plugin-toxic-comments: + unlikely: "Unlikely" + highly_likely: "Highly Likely" + possibly: "Possibly" + likely: "Likely" + toxic_comment: "Toxic Comment" + still_toxic: | + This edited comment might still violate our community guidelines. + Our moderation team will review your comment shortly. + flags: + reasons: + comment: + toxic_comment: "Highly likely to be Toxic" nl_NL: error: COMMENT_IS_TOXIC: | diff --git a/plugins/talk-plugin-viewing-options/client/translations.yml b/plugins/talk-plugin-viewing-options/client/translations.yml index 1e4eada60..ae7f3a5d7 100644 --- a/plugins/talk-plugin-viewing-options/client/translations.yml +++ b/plugins/talk-plugin-viewing-options/client/translations.yml @@ -3,16 +3,16 @@ da: viewing_options: "Viewing Options" sort: Sorting filter: Filtering -en: - talk-plugin-viewing-options: - viewing_options: "Viewing Options" - sort: Sorting - filter: Filtering de: talk-plugin-viewing-options: viewing_options: "Ansichtsoptionen" sort: Sortieren filter: Filtern +en: + talk-plugin-viewing-options: + viewing_options: "Viewing Options" + sort: Sorting + filter: Filtering es: talk-plugin-viewing-options: viewing_options: "Opciones de visualización" @@ -23,6 +23,11 @@ fr: viewing_options: "Viewing Options" sort: Sorting filter: Filtering +he: + talk-plugin-viewing-options: + viewing_options: "Viewing Options" + sort: Sorting + filter: Filtering nl_NL: talk-plugin-viewing-options: viewing_options: "Weergave opties" From cccac6a8bc49f963a721f0fde64a574f4e3fee86 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 12:17:13 -0500 Subject: [PATCH 004/116] Add more translations --- .../talk-plugin-auth/client/translations.yml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 7d1bed07b..1b30efd15 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -232,21 +232,21 @@ he: logout: "Sign out" sign_in: "Sign in" sign_in_to_join: "Sign in to join the conversation" - or: "Or" - email: "E-mail Address" - password: "Password" - forgot_your_pass: "Forgot your password?" - need_an_account: "Need an account?" + or: "או" + email: "כתובת אימייל" + password: "סיסמה" + forgot_your_pass: "שכחת את הסיסמה?" + need_an_account: "צריך חשבון?" register: "Register" sign_up: "Sign Up" - confirm_password: "Confirm Password" - username: "Username" + confirm_password: "אשר את הסיסמה שלך" + username: "שם משתמש" already_have_an_account: "Already have an account?" recover_password: "Recover password" - email_in_use: "Email address already in use" - email_or_username_in_use: "Email address or Username already in use" - required_field: "This field is required" - passwords_dont_match: "Passwords don't match." + email_in_use: "אימייל כבר תפוס" + email_or_username_in_use: "אימייל או שם משתמש כבר תפוס" + required_field: "חובה למלא את הערך הזה" + passwords_dont_match: "הסיסמאות אינן תואמות." special_characters: "Usernames can contain letters, numbers and _ only" sign_in_to_comment: "Sign in to comment" check_the_form: "Invalid Form. Please, check the fields" @@ -257,7 +257,7 @@ he: fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." fake_comment_date: "1 minute ago" if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." - required_field: "Required field" + required_field: "חובה למלא את הערך הזה" save: Save special_characters: "Usernames can contain letters numbers and _ only" username: Username From f55f1341e1c03333a494e1364133b36cba563079 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:19:20 -0500 Subject: [PATCH 005/116] Auth Hebrew translations --- .../talk-plugin-auth/client/translations.yml | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 1b30efd15..f9fd0808f 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -223,46 +223,46 @@ fr: he: talk-plugin-auth: login: - email_verify_cta: "Please verify your email address." - request_new_verify_email: "Request another email" - verify_email: "Thank you for creating an account! We sent an email to the address you provided to verify your account." - verify_email2: "You must verify your account before engaging with the community." - not_you: "Not you?" - logged_in_as: "Signed in as" - logout: "Sign out" - sign_in: "Sign in" - sign_in_to_join: "Sign in to join the conversation" + email_verify_cta: "אנא אמת את כתובת האימייל שלך." + request_new_verify_email: "בקש דוא"ל נוסף" + verify_email: "תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך." + verify_email2: "עליך לאמת את חשבונך לפני שתעסוק בקהילה." + not_you: "לא אתה?" + logged_in_as: "נכנס בתור" + logout: "התנתק" + sign_in: "היכנס" + sign_in_to_join: "היכנס כדי להצטרף לשיחה" or: "או" email: "כתובת אימייל" password: "סיסמה" forgot_your_pass: "שכחת את הסיסמה?" need_an_account: "צריך חשבון?" - register: "Register" - sign_up: "Sign Up" + register: "הירשם" + sign_up: "הירשם" confirm_password: "אשר את הסיסמה שלך" username: "שם משתמש" - already_have_an_account: "Already have an account?" - recover_password: "Recover password" + already_have_an_account: "כבר יש לך חשבון?" + recover_password: "שחזור סיסמה" email_in_use: "אימייל כבר תפוס" email_or_username_in_use: "אימייל או שם משתמש כבר תפוס" required_field: "חובה למלא את הערך הזה" passwords_dont_match: "הסיסמאות אינן תואמות." - special_characters: "Usernames can contain letters, numbers and _ only" - sign_in_to_comment: "Sign in to comment" - check_the_form: "Invalid Form. Please, check the fields" + special_characters: "שמות משתמש יכולים להכיל אותיות, מספרים ו- _ בלבד" + sign_in_to_comment: "היכנס כדי להגיב" + check_the_form: "טופס לא חוקי. אנא, בדוק את השדות" set_username_dialog: - check_the_form: "Invalid Form. Please check the fields" - continue: "Continue with the same Facebook username" - error_create: "Error when changing username" - fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." - fake_comment_date: "1 minute ago" - if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." + check_the_form: "טופס לא חוקי. אנא, בדוק את השדות" + continue: "המשך עם אותו שם משתמש בפייסבוק" + error_create: "שגיאה בעת שינוי שם המשתמש" + fake_comment_body: "זוהי תגובה לדוגמה. הקוראים יכולים לשתף את המחשבות שלהם ואת דעות עם חדר החדשות בסעיף התגובות" + fake_comment_date: "לפני דקה אחת" + if_you_dont_change_your_name: "אם לא תשנה את שם המשתמש שלך בשלב זה שם התצוגה שלך בפייסבוק יופיע לצד כל תגובות שלך." required_field: "חובה למלא את הערך הזה" - save: Save - special_characters: "Usernames can contain letters numbers and _ only" - username: Username - write_your_username: "Edit your username" - your_username: "Your username appears on every comment you post." + save: "שמור" + special_characters: "שמות משתמש יכולים להכיל אותיות, מספרים ו- _ בלבד" + username: "שם משתמש" + write_your_username: "ערוך את שם המשתמש שלך" + your_username: "שם המשתמש שלך מופיע בכל תגובה שתפרסם." nl_NL: sign_in: email_verify_cta: "Controleer je e-mailadres." From 84a121a1d97ed2902c2c1db63657efe2e2034d81 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:22:12 -0500 Subject: [PATCH 006/116] Respect hebrew translations --- plugins/talk-plugin-respect/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-respect/client/translations.yml b/plugins/talk-plugin-respect/client/translations.yml index 7958e6147..af3287b81 100644 --- a/plugins/talk-plugin-respect/client/translations.yml +++ b/plugins/talk-plugin-respect/client/translations.yml @@ -20,8 +20,8 @@ fr: respected: Respected he: talk-plugin-respect: - respect: Respect - respected: Respected + respect: כבד + respected: נכבד nl_NL: talk-plugin-respect: respect: Respect From c3f92e8c8da0dd31db4ff165b9a40c1cea6c215d Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:27:52 -0500 Subject: [PATCH 007/116] Akismet Hebrew translations --- .../talk-plugin-akismet/client/translations.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/talk-plugin-akismet/client/translations.yml b/plugins/talk-plugin-akismet/client/translations.yml index 6cc19a492..b5bfad713 100644 --- a/plugins/talk-plugin-akismet/client/translations.yml +++ b/plugins/talk-plugin-akismet/client/translations.yml @@ -58,10 +58,25 @@ fr: reasons: comment: spam_comment: "Detected Spam" +he: + error: + COMMENT_IS_SPAM: | + תגובה זו נראית כמו ספאם. + תוכל לערוך את התגובה או לשלוח אותה בכל מקרה לביקורת של מפקח. + talk-plugin-akismet: + spam: "ספאם" + spam_comment: "ספאם" + detected: "זוהה על ידי אקיזמט" + still_spam: | + תודה. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב. + flags: + reasons: + comment: + spam_comment: "זוהה ספאם" nl_NL: error: COMMENT_IS_SPAM: | - Deze reactie ziet er uit als spam. Je kan je reactie + Deze reactie ziet er uit als spam. Je kan je reactie wijzigen, of indienen zodat ons moderatieteam het kan beoordelen. talk-plugin-akismet: spam: "Spam" From f6e94b0cc229ab4bb8fae66b8f6d0606e5b23ee4 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:30:34 -0500 Subject: [PATCH 008/116] Subscriber hebrew translation --- plugins/talk-plugin-subscriber/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-subscriber/client/translations.yml b/plugins/talk-plugin-subscriber/client/translations.yml index bac95b345..f80a837a7 100644 --- a/plugins/talk-plugin-subscriber/client/translations.yml +++ b/plugins/talk-plugin-subscriber/client/translations.yml @@ -15,7 +15,7 @@ fr: subscriber: "Subscriber" he: talk-plugin-subscriber: - subscriber: "Subscriber" + subscriber: "מנוי" nl_NL: talk-plugin-subscriber: subscriber: "Abonnee" From 3c3603ee08e1212494fd5e6264902b553416b3b8 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:34:22 -0500 Subject: [PATCH 009/116] Like hebrew translation --- plugins/talk-plugin-like/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-like/client/translations.yml b/plugins/talk-plugin-like/client/translations.yml index 477b6cd67..3a95f77b1 100644 --- a/plugins/talk-plugin-like/client/translations.yml +++ b/plugins/talk-plugin-like/client/translations.yml @@ -20,8 +20,8 @@ fr: liked: Liked he: talk-plugin-like: - like: Like - liked: Liked + like: לייק + liked: לייקד nl_NL: talk-plugin-like: like: Like From ffe83452cde019b2d509fa9adbaa8e2cb592c035 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:41:22 -0500 Subject: [PATCH 010/116] Ignore user hebrew translation --- .../client/translations.yml | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/plugins/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-ignore-user/client/translations.yml index d1a7a64ac..2d4ee7f20 100644 --- a/plugins/talk-plugin-ignore-user/client/translations.yml +++ b/plugins/talk-plugin-ignore-user/client/translations.yml @@ -11,19 +11,6 @@ da: notify_success: | You are now ignoring {0}. You can undo this action from My Profile. confirmation_title: Ignore {0}? -en: - talk-plugin-ignore-user: - section_title: Ignored users - section_info: Because you ignored the following commenters, their comments are hidden. - stop_ignoring: Stop ignoring - ignore_user: Ignore User - cancel: Cancel - confirmation: | - When you ignore a user, all comments they wrote on the site will be hidden from you. You can - undo this later from My Profile. - notify_success: | - You are now ignoring {0}. You can undo this action from My Profile. - confirmation_title: Ignore {0}? de: talk-plugin-ignore-user: section_title: Ignorierte Nutzer @@ -34,6 +21,19 @@ de: confirmation: Wenn Sie Nutzer ignorieren, werden deren Kommentare auf der Seite für Sie unsichtbar. Diese Einstellung können Sie unter Mein Profil ändern. notify_success: Sie ignorieren jetzt {0}. Sie können diese Einstellung unter Mein Profil wieder aufheben. confirmation_title: "{0} ignorieren?" +en: + talk-plugin-ignore-user: + section_title: Ignored users + section_info: Because you ignored the following commenters, their comments are hidden. + stop_ignoring: Stop ignoring + ignore_user: Ignore User + cancel: Cancel + confirmation: | + When you ignore a user, all comments they wrote on the site will be hidden from you. You can + undo this later from My Profile. + notify_success: | + You are now ignoring {0}. You can undo this action from My Profile. + confirmation_title: Ignore {0}? es: talk-plugin-ignore-user: section_title: "Usuarios ignorados" @@ -62,17 +62,16 @@ fr: confirmation_title: Ignore {0}? he: talk-plugin-ignore-user: - section_title: Ignored users - section_info: Because you ignored the following commenters, their comments are hidden. - stop_ignoring: Stop ignoring - ignore_user: Ignore User + section_title: משתמשים שהתעלמו מהם + section_info: מכיוון שהתעלמת מהמגיבים הבאים, ההערות שלהם מוסתרות. + stop_ignoring: הפסק להתעלם + ignore_user: התעלם מהמשתמש cancel: בטל confirmation: | - When you ignore a user, all comments they wrote on the site will be hidden from you. You can - undo this later from My Profile. + כאשר תתעלם ממשתמש, כל התגובות שכתבו באתר יוסתרו ממך. תוכל לבטל זאת מאוחר יותר מהפרופיל שלי. notify_success: | - You are now ignoring {0}. You can undo this action from My Profile. - confirmation_title: Ignore {0}? + כעת אתה מתעלם {0}. תוכל לבטל את הפעולה הזו מהפרופיל שלי. + confirmation_title: "התעלם {0}?" nl_NL: talk-plugin-ignore-user: section_title: Genegeerde gebruikers From 1dc8df418970ba350c03aa320c798924c79a6c7d Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:43:18 -0500 Subject: [PATCH 011/116] Facebook Auth translation --- plugins/talk-plugin-facebook-auth/client/translations.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/talk-plugin-facebook-auth/client/translations.yml b/plugins/talk-plugin-facebook-auth/client/translations.yml index ab72134f4..26836ffd5 100644 --- a/plugins/talk-plugin-facebook-auth/client/translations.yml +++ b/plugins/talk-plugin-facebook-auth/client/translations.yml @@ -10,6 +10,10 @@ fr: talk-plugin-facebook-auth: sign_in: "Connectez-vous avec Facebook" sign_up: "Inscrivez-vous avec Facebook" +he: + talk-plugin-facebook-auth: + sign_in: "התחבר עם פייסבוק" + sign_up: "הרשם עם פייסבוק" zh_CN: talk-plugin-facebook-auth: sign_in: "使用 Facebook 帐号" @@ -21,4 +25,4 @@ zh_TW: de: talk-plugin-facebook-auth: sign_in: "Mit Facebook anmelden" - sign_up: "Mit Facebook registrieren" \ No newline at end of file + sign_up: "Mit Facebook registrieren" From e15275666e5b90ef99a1eb1c1808c95bfd8f6d15 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:01:25 -0500 Subject: [PATCH 012/116] Featured comments Hebrew translation --- .../client/translations.yml | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index 6c8e79e78..e2811b965 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -13,21 +13,6 @@ da: are_you_sure: Are you sure you would like to feature this comment? cancel: Cancel yes_feature_comment: Yes, feature comment -en: - talk-plugin-featured-comments: - un_feature: Un-Feature - feature: Feature - featured: Featured - featured_comments: Featured Comments - go_to_conversation: Go to conversation - tooltip_description: Comments selected by our team as worth reading - notify_self_featured: 'The comment from {0} is now featured and approved' - notify_featured: '{0} featured and approved comment "{1}"' - notify_unfeatured: '{0} unfeatured comment "{1}"' - feature_comment: Feature comment? - are_you_sure: Are you sure you would like to feature this comment? - cancel: Cancel - yes_feature_comment: Yes, feature comment de: talk-plugin-featured-comments: un_feature: Empfehlung aufheben @@ -43,6 +28,21 @@ de: are_you_sure: Sind Sie sicher, dass Sie diesen Kommentar empfehlen möchten? cancel: Abbrechen yes_feature_comment: Ja, empfehlen +en: + talk-plugin-featured-comments: + un_feature: Un-Feature + feature: Feature + featured: Featured + featured_comments: Featured Comments + go_to_conversation: Go to conversation + tooltip_description: Comments selected by our team as worth reading + notify_self_featured: 'The comment from {0} is now featured and approved' + notify_featured: '{0} featured and approved comment "{1}"' + notify_unfeatured: '{0} unfeatured comment "{1}"' + feature_comment: Feature comment? + are_you_sure: Are you sure you would like to feature this comment? + cancel: Cancel + yes_feature_comment: Yes, feature comment es: talk-plugin-featured-comments: un_feature: Desmarcar @@ -72,19 +72,19 @@ fr: yes_feature_comment: Yes, feature comment he: talk-plugin-featured-comments: - un_feature: Un-Feature - feature: Feature - featured: Featured - featured_comments: Featured Comments - go_to_conversation: Go to conversation - tooltip_description: Comments selected by our team as worth reading - notify_self_featured: 'The comment from {0} is now featured and approved' - notify_featured: '{0} featured and approved comment "{1}"' - notify_unfeatured: '{0} unfeatured comment "{1}"' - feature_comment: Feature comment? - are_you_sure: Are you sure you would like to feature this comment? + un_feature: תסיר המלצה + feature: ממליץ + featured: מומלצים + featured_comments: תגובות מומלצות + go_to_conversation: עבור אל השיחה + tooltip_description: תגובות שנבחרו על ידי הצוות שלנו כקריאה שווה + notify_self_featured: 'ההערה מ {0} מומלצת ומאושרת כעת' + notify_featured: '"{0} המליץ ואושר תגובה {1}"' + notify_unfeatured: '{0} הוסר את ההמלצה מתגובה "{1}"' + feature_comment: ממליץ תגובה? + are_you_sure: האם אתה בטוח שברצונך להמליץ את ה תגובה הזו? cancel: בטל - yes_feature_comment: Yes, feature comment + yes_feature_comment: כן, ממליץ תגובה nl_NL: talk-plugin-featured-comments: un_feature: Uitlichting opheffen. From 5165d06d64e55fe3ef5fbc24153767064cfca5ae Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:03:10 -0500 Subject: [PATCH 013/116] Flag Hebrew translation --- plugins/talk-plugin-flag-details/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index b4d74a08a..37478ae09 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -15,7 +15,7 @@ fr: flags: Reports he: talk-plugin-flag-details: - flags: Reports + flags: דיווחים nl_NL: talk-plugin-flag-details: flags: Meldingen From c7fad00b6619fe2103d0d93a274e1588214b940f Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:05:14 -0500 Subject: [PATCH 014/116] Google Hebrew translation --- plugins/talk-plugin-google-auth/client/translations.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/talk-plugin-google-auth/client/translations.yml b/plugins/talk-plugin-google-auth/client/translations.yml index fd926f3ee..84db70d9d 100644 --- a/plugins/talk-plugin-google-auth/client/translations.yml +++ b/plugins/talk-plugin-google-auth/client/translations.yml @@ -10,6 +10,10 @@ fr: talk-plugin-google-auth: google_sign_in: "Connectez-vous avec Google" google_sign_up: "Inscrivez-vous avec Google" +en: + talk-plugin-google-auth: + sign_in: "התחבר עם גוגל" + sign_up: "הרשם עם גוגל" zh_CN: talk-plugin-google-auth: google_sign_in: "使用 Google 帐号" From fe5c95c27a44c6c35aeaa6ef115354ea7809406e Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:06:24 -0500 Subject: [PATCH 015/116] Member since Hebrew Translation --- plugins/talk-plugin-member-since/client/translations.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/talk-plugin-member-since/client/translations.yml b/plugins/talk-plugin-member-since/client/translations.yml index cd6b542c5..ea03b747e 100644 --- a/plugins/talk-plugin-member-since/client/translations.yml +++ b/plugins/talk-plugin-member-since/client/translations.yml @@ -1,12 +1,12 @@ da: talk-plugin-member-since: member_since: "Member Since" -en: - talk-plugin-member-since: - member_since: "Member Since" de: talk-plugin-member-since: member_since: "Mitglied seit" +en: + talk-plugin-member-since: + member_since: "Member Since" es: talk-plugin-member-since: member_since: "Miembro desde" @@ -15,7 +15,7 @@ fr: member_since: "Member Since" he: talk-plugin-member-since: - member_since: "Member Since" + member_since: "חבר מאז" nl_NL: talk-plugin-member-since: member_since: "Gebruiker sinds" From 828f200eb6ace6301176d460553f23fa0277ee6c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:10:23 -0500 Subject: [PATCH 016/116] Moderation actions Hebrew translation --- .../client/translations.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/talk-plugin-moderation-actions/client/translations.yml b/plugins/talk-plugin-moderation-actions/client/translations.yml index f967add7f..93111385b 100644 --- a/plugins/talk-plugin-moderation-actions/client/translations.yml +++ b/plugins/talk-plugin-moderation-actions/client/translations.yml @@ -60,16 +60,16 @@ fr: ban_user_dialog_headline: "Ban User?" he: talk-plugin-moderation-actions: - reject_comment: "Reject" - approve_comment: "Approve" - approved_comment: "Approved" - moderation_actions: "Moderation Actions" - ban_user: "Ban User" - ban_user_dialog_sub: "Are you sure you would like to ban this user?" - ban_user_dialog_copy: "Note: Banning this user will also place this comment in the Rejected queue." + reject_comment: "דחה" + approve_comment: "אשר" + approved_comment: "מאושרת" + moderation_actions: "פעולות מתווך" + ban_user: "חסום משתמש" + ban_user_dialog_sub: "האם אתה בטוח שאתה רוצה לאסור את המשתמש הזה?" + ban_user_dialog_copy: "הערה: חסימת משתמש זה תציב גם תגובה זו בתור נדחה." ban_user_dialog_cancel: "בטל" - ban_user_dialog_yes: "Yes. Ban user" - ban_user_dialog_headline: "Ban User?" + ban_user_dialog_yes: "כן. חסום משתמש" + ban_user_dialog_headline: "חסום משתמש?" nl_NL: talk-plugin-moderation-actions: reject_comment: "Afkeuren" From 65deb1cfbe99d84e2ab87f12395af95f3418c92c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:12:04 -0500 Subject: [PATCH 017/116] Off-top Hebrew translation --- plugins/talk-plugin-offtopic/client/translations.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-offtopic/client/translations.json b/plugins/talk-plugin-offtopic/client/translations.json index 29e496db0..e642ef03c 100644 --- a/plugins/talk-plugin-offtopic/client/translations.json +++ b/plugins/talk-plugin-offtopic/client/translations.json @@ -20,8 +20,8 @@ "hide_off_topic": "Hide Off-Topic Comments" }, "he": { - "off_topic": "Off Topic", - "hide_off_topic": "Hide Off-Topic Comments" + "off_topic": "מחוץ לנושא", + "hide_off_topic": "הסתר תגובות מחוץ לנושא" }, "nl_NL": { "off_topic": "Off topic", From dac823f9c43975838f9da799454d1496b84d4378 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:14:00 -0500 Subject: [PATCH 018/116] Settings Hebrew translation --- plugins/talk-plugin-profile-settings/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-profile-settings/client/translations.yml b/plugins/talk-plugin-profile-settings/client/translations.yml index f95bce5c7..a1b1aec5d 100644 --- a/plugins/talk-plugin-profile-settings/client/translations.yml +++ b/plugins/talk-plugin-profile-settings/client/translations.yml @@ -12,7 +12,7 @@ fr: tab: Paramètres he: talk-plugin-profile-settings: - tab: Settings + tab: הגדרות nl_NL: talk-plugin-profile-settings: tab: Instellingen From c4b46c28fee2396fc7e5d68526578e76f10eeddc Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:15:51 -0500 Subject: [PATCH 019/116] Most liked Hebrew translation --- plugins/talk-plugin-sort-most-liked/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-sort-most-liked/client/translations.yml b/plugins/talk-plugin-sort-most-liked/client/translations.yml index b317c1b2a..c928bf1ad 100644 --- a/plugins/talk-plugin-sort-most-liked/client/translations.yml +++ b/plugins/talk-plugin-sort-most-liked/client/translations.yml @@ -15,7 +15,7 @@ fr: label: Most liked first he: talk-plugin-sort-most-liked: - label: Most liked first + label: הכי לייקד קודם nl_NL: talk-plugin-sort-most-liked: label: Meest geliked eerst From e69afc4e760b1e3c5fe97508055a753eb56ecec2 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:17:02 -0500 Subject: [PATCH 020/116] Most loved Hebrew translation --- .../talk-plugin-sort-most-loved/client/translations.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index 98a4ef12d..6dde31601 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -1,12 +1,12 @@ da: talk-plugin-sort-most-loved: label: Most loved first -en: - talk-plugin-sort-most-loved: - label: Most loved first de: talk-plugin-sort-most-loved: label: Häufigste "Ich liebe es" zuerst +en: + talk-plugin-sort-most-loved: + label: Most loved first es: talk-plugin-sort-most-loved: label: Most loved first @@ -15,7 +15,7 @@ fr: label: Most loved first he: talk-plugin-sort-most-liked: - label: Most liked first + label: הכי אהבתי קודם nl_NL: talk-plugin-sort-most-loved: label: Meest geliefd eerst From 4f276ed9446f8fa1e1f4fa7846b3b1942bd04bdb Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:19:43 -0500 Subject: [PATCH 021/116] More Hebrew translations --- .../client/translations.yml | 2 +- .../client/translations.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index 6dde31601..ef7c8c252 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -14,7 +14,7 @@ fr: talk-plugin-sort-most-loved: label: Most loved first he: - talk-plugin-sort-most-liked: + talk-plugin-sort-most-loved: label: הכי אהבתי קודם nl_NL: talk-plugin-sort-most-loved: diff --git a/plugins/talk-plugin-sort-most-replied/client/translations.yml b/plugins/talk-plugin-sort-most-replied/client/translations.yml index 04109a168..3c7b78788 100644 --- a/plugins/talk-plugin-sort-most-replied/client/translations.yml +++ b/plugins/talk-plugin-sort-most-replied/client/translations.yml @@ -1,12 +1,12 @@ da: talk-plugin-sort-most-replied: label: Most replied first -en: - talk-plugin-sort-most-replied: - label: Most replied first de: talk-plugin-sort-most-replied: label: Häufigste Antworten zuerst +en: + talk-plugin-sort-most-replied: + label: Most replied first es: talk-plugin-sort-most-replied: label: Most replied first @@ -14,8 +14,8 @@ fr: talk-plugin-sort-most-replied: label: Most replied first he: - talk-plugin-sort-most-liked: - label: Most liked first + talk-plugin-sort-most-replied: + label: הכי השיב קודם nl_NL: talk-plugin-sort-most-replied: label: Meest beantwoord eerst From 3cbf5fef07fc1498b09ed6e4b08d6bdea780ef07 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:21:02 -0500 Subject: [PATCH 022/116] Most respected Hebrew translation --- .../talk-plugin-sort-most-respected/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index 9cb9c50bd..01c34708c 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -14,8 +14,8 @@ fr: talk-plugin-sort-most-respected: label: Most respected first he: - talk-plugin-sort-most-liked: - label: Most liked first + talk-plugin-sort-most-respected: + label: הכי מכובד קודם nl_NL: talk-plugin-sort-most-respected: label: Meest gerespecteerd eerst From 1e5f5848b24b20cf417ffb6d8fe955c14f702775 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:25:58 -0500 Subject: [PATCH 023/116] Toxic comments Hebrew translation --- .../client/translations.yml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/talk-plugin-toxic-comments/client/translations.yml b/plugins/talk-plugin-toxic-comments/client/translations.yml index 321624279..8443d250b 100644 --- a/plugins/talk-plugin-toxic-comments/client/translations.yml +++ b/plugins/talk-plugin-toxic-comments/client/translations.yml @@ -91,21 +91,21 @@ fr: he: error: COMMENT_IS_TOXIC: | - Are you sure? The language in this comment might violate our community guidelines. - You can edit the comment or submit it for moderator review. + האם אתה בטוח? השפה שבתגובה זו עלולה להפר את הנחיות הקהילה שלנו. + תוכל לערוך את ההערה או לשלוח אותה לביקורת של המתווך. talk-plugin-toxic-comments: - unlikely: "Unlikely" - highly_likely: "Highly Likely" - possibly: "Possibly" - likely: "Likely" - toxic_comment: "Toxic Comment" + unlikely: "לא סביר" + highly_likely: "סביר מאוד" + possibly: "יתכן" + likely: "סביר" + toxic_comment: "תגובה רעילה" still_toxic: | - This edited comment might still violate our community guidelines. - Our moderation team will review your comment shortly. + תגובה זו עדיין עשויה להפר את הנחיות הקהילה שלנו. +       צוות הפיקוח שלנו יבחן את ההערה שלך בקרוב. flags: reasons: comment: - toxic_comment: "Highly likely to be Toxic" + toxic_comment: "סביר מאוד להיות רעיל" nl_NL: error: COMMENT_IS_TOXIC: | From 1946d023cdcd99b9e66a1735f2eab6ffe0a1fb4a Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:27:31 -0500 Subject: [PATCH 024/116] Viewing options Hebrew translation --- plugins/talk-plugin-viewing-options/client/translations.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/talk-plugin-viewing-options/client/translations.yml b/plugins/talk-plugin-viewing-options/client/translations.yml index ae7f3a5d7..a50f8e8bb 100644 --- a/plugins/talk-plugin-viewing-options/client/translations.yml +++ b/plugins/talk-plugin-viewing-options/client/translations.yml @@ -25,9 +25,9 @@ fr: filter: Filtering he: talk-plugin-viewing-options: - viewing_options: "Viewing Options" - sort: Sorting - filter: Filtering + viewing_options: "אפשרויות צפייה" + sort: מיון + filter: סינון nl_NL: talk-plugin-viewing-options: viewing_options: "Weergave opties" From 8f7edde93f0c850ad416227316ca793181ca3616 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:38:07 -0500 Subject: [PATCH 025/116] Remove extra space --- plugins/talk-plugin-featured-comments/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index e2811b965..2b71509ff 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -82,7 +82,7 @@ he: notify_featured: '"{0} המליץ ואושר תגובה {1}"' notify_unfeatured: '{0} הוסר את ההמלצה מתגובה "{1}"' feature_comment: ממליץ תגובה? - are_you_sure: האם אתה בטוח שברצונך להמליץ את ה תגובה הזו? + are_you_sure: האם אתה בטוח שברצונך להמליץ את התגובה הזו? cancel: בטל yes_feature_comment: כן, ממליץ תגובה nl_NL: From 0f983109e110203b4fc316b5a0ba492a6487d7ab Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 26 Feb 2018 16:14:16 -0500 Subject: [PATCH 026/116] Trigger build --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index e962e41ff..690fdba63 100644 --- a/app.js +++ b/app.js @@ -10,7 +10,7 @@ const { MOUNT_PATH } = require('./url'); const routes = require('./routes'); const debug = require('debug')('talk:app'); const { ENABLE_TRACING, APOLLO_ENGINE_KEY, PORT } = require('./config'); - + const app = express(); // Request Identity Middleware From cf23bdba1232f4c6a59cb0abbd7194687c85ced2 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 26 Feb 2018 16:37:40 -0500 Subject: [PATCH 027/116] Add More hebrew translations --- app.js | 2 +- locales/he.yml | 82 +++++++++++++++++++++++++------------------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/app.js b/app.js index 690fdba63..e962e41ff 100644 --- a/app.js +++ b/app.js @@ -10,7 +10,7 @@ const { MOUNT_PATH } = require('./url'); const routes = require('./routes'); const debug = require('debug')('talk:app'); const { ENABLE_TRACING, APOLLO_ENGINE_KEY, PORT } = require('./config'); - + const app = express(); // Request Identity Middleware diff --git a/locales/he.yml b/locales/he.yml index b07e82806..a4f43db30 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -1,46 +1,46 @@ en: - your_account_has_been_suspended: Your account has been temporarily suspended. - your_account_has_been_banned: Your account has been banned. - your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username. + your_account_has_been_suspended: החשבון שלך הושעה באופן זמני. + your_account_has_been_banned: החשבון שלך הורחק. + your_username_has_been_rejected: החשבון שלך הושעה מפני ששם המשתמש שלך נחשב לא הולם. כדי לשחזר את החשבון שלך, הזן שם משתמש חדש. embed_comments_tab: תגובות bandialog: are_you_sure: "Are you sure you would like to ban {0}?" - ban_user: "Ban User?" - banned_user: "Banned User" - cancel: "Cancel" + ban_user: "חסום משתמש?" + banned_user: "משתמש מורשה" + cancel: "בטל" note: "Note: {0}" note_reject_comment: "Banning this user will also place this comment in the Rejected queue." note_ban_user: "Banning this user will not let them comment, react to, or report comments." - yes_ban_user: "Yes, Ban User" + yes_ban_user: "כן. חסום משתמש" write_a_message: "Write a message" - send: "Send" + send: "שלח" notify_ban_headline: "Notify the user of ban" notify_ban_description: "This will notify the user by email that they have been banned from the community" email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." - bio_offensive: "This bio is offensive" - cancel: "Cancel" + bio_offensive: "ביו זה פוגע" + cancel: "בטל" confirm_email: - click_to_confirm: "Click below to confirm your email address" + click_to_confirm: 'לחץ למטה כדי לאשר את כתובת הדוא"ל שלך' confirm: "Confirm" password_reset: - mail_sent: 'If you have a registered account, a password reset link was sent to that email' - set_new_password: "Change Your Password" - new_password: "New Password" - new_password_help: "Password must be at least 8 characters" - confirm_new_password: "Confirm New Password" - change_password: "Change Password" - characters_remaining: "characters remaining" + mail_sent: 'אם יש לך חשבון רשום, נשלח קישור לאיפוס סיסמה לאותו דוא"ל' + set_new_password: "שנה את סיסמתך" + new_password: "סיסמה חדשה" + new_password_help: "הסיסמה חייבת להיות לפחות 8 תווים" + confirm_new_password: "תאשר סיסמא חדשה" + change_password: "שנה סיסמא" + characters_remaining: "תווים נותרים" comment: anon: "Anonymous" undo_reject: "Undo" - ban_user: "Ban User" - comment: "Post a comment" + ban_user: "חסום משתמש" + comment: "פרסם תגובה" edited: Edited - flagged: "flagged" - view_context: "View context" + flagged: "מסומנת" + view_context: "הצג הקשר" comment_box: post: "Post" - cancel: "Cancel" + cancel: "בטל" reply: "Reply" comment: "Post a comment" name: "שם" @@ -56,7 +56,7 @@ en: comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." common: copy: 'Copy' - error: 'An error has occurred.' + error: 'אירעה שגיאה.' reply: 'reply' replies: 'replies' reaction: 'reaction' @@ -76,7 +76,7 @@ en: ban_user: "Ban User?" banned: Banned banned_user: "Banned User" - cancel: Cancel + cancel: בטל dont_like_username: "Dislike username" flaggedaccounts: "Reported Usernames" flags: Flags @@ -95,7 +95,7 @@ en: staff: "Staff" status: Status username_and_email: "Username and Email" - yes_ban_user: "Yes Ban User" + yes_ban_user: "כן. חסום משתמש" commenter: "Commenter" configure: apply: Apply @@ -171,7 +171,7 @@ en: required_field: "Required field" save: Save special_characters: "Usernames can contain letters numbers and _ only" - username: Username + username: שם משתמש write_your_username: "Edit your username" your_username: "Your username appears on every comment you post." done: Done @@ -381,8 +381,8 @@ en: closed: Closed empty_result: "No assets match this search. Maybe try widening your search?" filter_streams: "Filter Streams" - newest: Newest - oldest: Oldest + newest: החדש ביותר + oldest: הוותיק ביותר open: Open pubdate: "Publication Date" search: Search @@ -396,17 +396,17 @@ en: one_hour: "1 hour" hours: "{0} hours" days: "{0} days" - cancel: "Cancel" + cancel: "בטל" suspend_user: "Suspend User" email_message_suspend: "Dear {0},\n\nIn accordance with {1}’s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}." title_notify: "Notify the user of their temporary suspension" notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." description_notify: "Suspending this user will temporarily disable their account." write_message: "Write a message" - send: Send + send: שלח reject_username: - username: username - no_cancel: "No cancel" + username: שם משתמש + no_cancel: "אין ביטול" description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}." title_notify: "Notify the user of their temporary suspension" description_notify: "Suspending this user will temporarily disable their account." @@ -415,7 +415,7 @@ en: yes_suspend: "Yes suspend" email_message_reject: "Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please e-mail us if you have any questions or concerns." write_message: "Write a message" - send: Send + send: שלח thank_you: "We value your safety and feedback. A moderator will review your report." user: bio_flags: "flags for this bio" @@ -448,10 +448,10 @@ en: save: "שמור" create: email: 'כתובת דוא"ל' - username: "Username" - password: "Password" - confirm_password: "Confirm Password" - save: "Save" + username: "שם משתמש" + password: "סיסמה" + confirm_password: "אשר סיסמה" + save: "שמור" permitted_domains: title: "Permitted domains" description: "Enter the domains you would like to permit for Talk, e.g. your local, staging and production environments (ex. localhost:3000, staging.domain.com, domain.com)." @@ -459,7 +459,7 @@ en: final: description: "Thanks for installing Talk! We sent an email to verify your email address. While you finish setting up the account, you can start engaging with your readers now." launch: "Launch Talk" - close: "Close this Installer" + close: "סגור את המתקין" admin_sidebar: - view_options: "View Options" - sort_comments: "Sort Comments" + view_options: "הצג אפשרויות" + sort_comments: "מיין תגובות" From 90424b47664c961b0dcf3ae230c6af45b5d28d0e Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 26 Feb 2018 16:39:28 -0500 Subject: [PATCH 028/116] Fix apostrophes --- plugins/talk-plugin-auth/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index f9fd0808f..049f3c3ad 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -224,8 +224,8 @@ he: talk-plugin-auth: login: email_verify_cta: "אנא אמת את כתובת האימייל שלך." - request_new_verify_email: "בקש דוא"ל נוסף" - verify_email: "תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך." + request_new_verify_email: 'בקש דוא"ל נוסף' + verify_email: 'תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך.' verify_email2: "עליך לאמת את חשבונך לפני שתעסוק בקהילה." not_you: "לא אתה?" logged_in_as: "נכנס בתור" From da56cd5b18bfb7bb0e9f1ae2dba1f4c729f41ff1 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 6 Mar 2018 13:02:03 -0500 Subject: [PATCH 029/116] Add more translations --- locales/he.yml | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index a4f43db30..8b7b6fe88 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -9,13 +9,13 @@ en: banned_user: "משתמש מורשה" cancel: "בטל" note: "Note: {0}" - note_reject_comment: "Banning this user will also place this comment in the Rejected queue." - note_ban_user: "Banning this user will not let them comment, react to, or report comments." + note_reject_comment: "חסימת משתמש זה תציב גם תגובה זו בתור נדחה." + note_ban_user: "חסימת משתמש זה לא תאפשר לו להגיב על תגובות או לדווח עליהן." yes_ban_user: "כן. חסום משתמש" - write_a_message: "Write a message" + write_a_message: "כתוב הודעה" send: "שלח" - notify_ban_headline: "Notify the user of ban" - notify_ban_description: "This will notify the user by email that they have been banned from the community" + notify_ban_headline: "הודע למשתמש על האיסור" + notify_ban_description: "פעולה זו תודיע למשתמש בדוא"ל שהם נאסרו מהקהילה" email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." bio_offensive: "ביו זה פוגע" cancel: "בטל" @@ -32,46 +32,46 @@ en: characters_remaining: "תווים נותרים" comment: anon: "Anonymous" - undo_reject: "Undo" + undo_reject: "בטל" ban_user: "חסום משתמש" comment: "פרסם תגובה" - edited: Edited + edited: ערוך flagged: "מסומנת" view_context: "הצג הקשר" comment_box: post: "Post" cancel: "בטל" reply: "Reply" - comment: "Post a comment" + comment: "פרסם תגובה" name: "שם" - comment_post_notif: "Your comment has been posted." - comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." - comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." - characters_remaining: "characters remaining" - comment_offensive: "This comment is offensive" - comment_singular: Comment - comment_plural: Comments - comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." - comment_post_notif: "Your comment has been posted." - comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." + comment_post_notif: "התגובה שלך פורסמה." + comment_post_notif_premod: "תודה על הפרסום. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב." + comment_post_banned_word: "התגובה שלך מכילה מילה אחת או יותר שאינן מותרות, לכן היא לא תפורסם. אם אתה סבור שהודעה זו שגויה, צור קשר עם צוות הניהול שלנו." + characters_remaining: "תווים נותרים" + comment_offensive: "תגובה זו פוגעת" + comment_singular: תגובה + comment_plural: תגובות + comment_post_banned_word: "התגובה שלך מכילה מילה אחת או יותר שאינן מותרות, לכן היא לא תפורסם. אם אתה סבור שהודעה זו שגויה, צור קשר עם צוות הניהול שלנו." + comment_post_notif: "התגובה שלך כבר פורסמה." + comment_post_notif_premod: "תודה על הפרסום. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב." common: - copy: 'Copy' + copy: 'עותק' error: 'אירעה שגיאה.' reply: 'reply' replies: 'replies' reaction: 'reaction' reactions: 'reactions' - story: 'Story' + story: 'כתבה' flagged_usernames: notify_approved: '{0} approved username {1}' notify_rejected: '{0} rejected username {1}' notify_flagged: '{0} reported username {1}' notify_changed: 'user {0} changed their username to {1}' community: - account_creation_date: "Account Creation Date" - active: Active - admin: Administrator - ads_marketing: "This looks like an ad/marketing" + account_creation_date: "תאריך היצירה של החשבון" + active: פעיל + admin: מנהל + ads_marketing: "זה נראה כמו מודעה / שיווק" are_you_sure: "Are you sure you would like to ban {0}?" ban_user: "Ban User?" banned: Banned @@ -81,7 +81,7 @@ en: flaggedaccounts: "Reported Usernames" flags: Flags impersonating: "Impersonation" - loading: "Loading results" + loading: "טוען תוצאות" moderator: Moderator newsroom_role: "Newsroom Role" no_flagged_accounts: "The Reported Usernames queue is currently empty." @@ -119,7 +119,7 @@ en: configure: Configure copy_and_paste: "Copy and paste code below into your CMS to embed your comment box in your articles" custom_css_url: "Custom CSS URL" - custom_css_url_desc: "URL of a CSS stylesheet that will override default Embed Stream styles. Can be internal or external." + custom_css_url_desc: "כתובת אתר של גיליון סגנונות CSS שתבטל את ברירת המחדל של סגנונות 'הזרמת זרם'. יכול להיות פנימי או חיצוני." days: Days description: "As an admin, you can customize the settings for the comment stream for this story:" domain_list_text: "Enter the domains you would like to permit for Talk e.g. your local staging and production environments (ex. localhost:3000 staging.domain.com domain.com)." @@ -202,7 +202,7 @@ en: if_you_did: "If you did," please_click: "please click here to reset password" embedlink: - copy: "Copy to Clipboard" + copy: "העתק ללוח" error: COMMENT_PARENT_NOT_VISIBLE: "The comment that you're replying to has been removed or doesn't exist." EMAIL_VERIFICATION_TOKEN_INVALID: "Email verification token is invalid." From 2a8975711ad06ed933e6b77b076aac246d2e3803 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 11:29:28 -0500 Subject: [PATCH 030/116] Begin adding Hebrew translation --- client/coral-framework/services/i18n.js | 5 + locales/he.yml | 465 ++++++++++++++++++++++++ 2 files changed, 470 insertions(+) create mode 100644 locales/he.yml diff --git a/client/coral-framework/services/i18n.js b/client/coral-framework/services/i18n.js index f467f7f53..0a4040007 100644 --- a/client/coral-framework/services/i18n.js +++ b/client/coral-framework/services/i18n.js @@ -8,6 +8,7 @@ import 'moment/locale/da'; import 'moment/locale/de'; import 'moment/locale/es'; import 'moment/locale/fr'; +import 'moment/locale/he'; import 'moment/locale/pt-br'; import { createStorage } from 'coral-framework/services/storage'; @@ -16,6 +17,7 @@ import daTA from 'timeago.js/locales/da'; import deTA from 'timeago.js/locales/de'; import esTA from 'timeago.js/locales/es'; import frTA from 'timeago.js/locales/fr'; +import heTA from 'timeago.js/locales/he'; import pt_BRTA from 'timeago.js/locales/pt_BR'; import zh_CNTA from 'timeago.js/locales/zh_CN'; import zh_TWTA from 'timeago.js/locales/zh_TW'; @@ -26,6 +28,7 @@ import da from '../../../locales/da.yml'; import de from '../../../locales/de.yml'; import es from '../../../locales/es.yml'; import fr from '../../../locales/fr.yml'; +import he from '../../../locales/he.yml'; import pt_BR from '../../../locales/pt_BR.yml'; import zh_CN from '../../../locales/zh_CN.yml'; import zh_TW from '../../../locales/zh_TW.yml'; @@ -38,6 +41,7 @@ const translations = { ...de, ...es, ...fr, + ...he, ...nl_NL, ...pt_BR, ...zh_CN, @@ -92,6 +96,7 @@ export function setupTranslations() { ta.register('da', daTA); ta.register('de', deTA); ta.register('fr', frTA); + ta.register('he', heTA); ta.register('pt_BR', pt_BRTA); ta.register('zh_CN', zh_CNTA); ta.register('zh_TW', zh_TWTA); diff --git a/locales/he.yml b/locales/he.yml new file mode 100644 index 000000000..8f7a3853b --- /dev/null +++ b/locales/he.yml @@ -0,0 +1,465 @@ +en: + your_account_has_been_suspended: Your account has been temporarily suspended. + your_account_has_been_banned: Your account has been banned. + your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username. + embed_comments_tab: Comments + bandialog: + are_you_sure: "Are you sure you would like to ban {0}?" + ban_user: "Ban User?" + banned_user: "Banned User" + cancel: "Cancel" + note: "Note: {0}" + note_reject_comment: "Banning this user will also place this comment in the Rejected queue." + note_ban_user: "Banning this user will not let them comment, react to, or report comments." + yes_ban_user: "Yes, Ban User" + write_a_message: "Write a message" + send: "Send" + notify_ban_headline: "Notify the user of ban" + notify_ban_description: "This will notify the user by email that they have been banned from the community" + email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." + bio_offensive: "This bio is offensive" + cancel: "Cancel" + confirm_email: + click_to_confirm: "Click below to confirm your email address" + confirm: "Confirm" + password_reset: + mail_sent: 'If you have a registered account, a password reset link was sent to that email' + set_new_password: "Change Your Password" + new_password: "New Password" + new_password_help: "Password must be at least 8 characters" + confirm_new_password: "Confirm New Password" + change_password: "Change Password" + characters_remaining: "characters remaining" + comment: + anon: "Anonymous" + undo_reject: "Undo" + ban_user: "Ban User" + comment: "Post a comment" + edited: Edited + flagged: "flagged" + view_context: "View context" + comment_box: + post: "Post" + cancel: "Cancel" + reply: "Reply" + comment: "Post a comment" + name: "Name" + comment_post_notif: "Your comment has been posted." + comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." + comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." + characters_remaining: "characters remaining" + comment_offensive: "This comment is offensive" + comment_singular: Comment + comment_plural: Comments + comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." + comment_post_notif: "Your comment has been posted." + comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." + common: + copy: 'Copy' + error: 'An error has occurred.' + reply: 'reply' + replies: 'replies' + reaction: 'reaction' + reactions: 'reactions' + story: 'Story' + flagged_usernames: + notify_approved: '{0} approved username {1}' + notify_rejected: '{0} rejected username {1}' + notify_flagged: '{0} reported username {1}' + notify_changed: 'user {0} changed their username to {1}' + community: + account_creation_date: "Account Creation Date" + active: Active + admin: Administrator + ads_marketing: "This looks like an ad/marketing" + are_you_sure: "Are you sure you would like to ban {0}?" + ban_user: "Ban User?" + banned: Banned + banned_user: "Banned User" + cancel: Cancel + dont_like_username: "Dislike username" + flaggedaccounts: "Reported Usernames" + flags: Flags + impersonating: "Impersonation" + loading: "Loading results" + moderator: Moderator + newsroom_role: "Newsroom Role" + no_flagged_accounts: "The Reported Usernames queue is currently empty." + no_results: "No users found with that user name or email address. They're hiding!" + offensive: "Offensive" + other: Other + people: People + role: "Select role..." + select_status: "Select status..." + spam_ads: "Spam/Ads" + staff: "Staff" + status: Status + username_and_email: "Username and Email" + yes_ban_user: "Yes Ban User" + commenter: "Commenter" + configure: + apply: Apply + banned_word_text: "Comments which contain these words or phrases (not case-sensitive) will be automatically removed from the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." + banned_words_title: "Banned words list" + close: "Close" + close_after: "Close comments after" + close_stream: "Close Stream" + close_stream_configuration: "This comment stream is currently closed. By opening this comment stream new comments may be submitted and displayed" + closed_comments_desc: "Write a message to be displayed when when your comment stream is closed and no longer accepting comments." + closed_comments_label: "Write a message..." + closed_stream_settings: "Closed Stream Message" + comment_count_error: "Please enter a valid number." + comment_count_header: "Limit Comment Length" + comment_count_text_post: characters + comment_count_text_pre: "Comments will be limited to" + comment_settings: Settings + comment_stream: "Comment Stream" + comment_stream_will_close: "The comment stream will close" + community: Community + configure: Configure + copy_and_paste: "Copy and paste code below into your CMS to embed your comment box in your articles" + custom_css_url: "Custom CSS URL" + custom_css_url_desc: "URL of a CSS stylesheet that will override default Embed Stream styles. Can be internal or external." + days: Days + description: "As an admin, you can customize the settings for the comment stream for this story:" + domain_list_text: "Enter the domains you would like to permit for Talk e.g. your local staging and production environments (ex. localhost:3000 staging.domain.com domain.com)." + domain_list_title: "Permitted Domains" + edit_comment_timeframe_heading: "Edit Comment Timeframe" + edit_comment_timeframe_text_pre: "Commenters will have" + edit_comment_timeframe_text_post: "seconds to edit their comments." + embed_comment_stream: "Embed Stream" + enable_premod_links_text: "Moderators must approve any comment containing a link before it is published." + enable_pre_moderation: "Enable pre-moderation" + enable_pre_moderation_text: "Moderators must approve any comment before it is published." + enable_premod_links: "Pre-Moderate Comments Containing Links" + enable_premod: "Enable Premoderation" + enable_premod_description: "Moderators must approve any comment before it is published." + enable_premod_links_description: "Moderators must approve any comment containing a link before it is published." + enable_questionbox: "Ask Readers a Question" + enable_questionbox_description: "This question will appear at the top of this comment stream. Ask readers about a certain issue in the article or pose discussion questions etc." + hours: Hours + include_comment_stream: "Include Comment Stream Description for Readers" + include_comment_stream_desc: "Write a message to be added to the top of your comment stream. Pose a topic include community guidelines etc." + include_text: "Include your text here." + include_question_here: "Write your question here:" + moderate: Moderate + moderation_settings: "Moderation Settings" + open: "Open" + open_stream: "Open Stream" + open_stream_configuration: "This comment stream is currently open. By closing this comment stream no new comments may be submitted and all previous comments will still be displayed." + require_email_verification: "Require Email Verification" + require_email_verification_text: "New Users must verify their email before commenting" + save_changes: "Save Changes" + shortcuts: Shortcuts + sign_out: "Sign Out" + stories: Stories + stream_settings: "Stream Settings" + suspect_word_title: "Suspect words list" + suspect_word_text: "Comments which contain these words or phrases (not case-sensitive) will be highlighted in the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." + tech_settings: "Tech Settings" + title: "Configure Comment Stream" + weeks: Weeks + wordlist: "Banned Words" + continue: "Continue" + createdisplay: + check_the_form: "Invalid Form. Please check the fields" + continue: "Continue with the same Facebook username" + error_create: "Error when changing username" + fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." + fake_comment_date: "1 minute ago" + if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." + required_field: "Required field" + save: Save + special_characters: "Usernames can contain letters numbers and _ only" + username: Username + write_your_username: "Edit your username" + your_username: "Your username appears on every comment you post." + done: Done + edit_comment: + body_input_label: "Edit this comment" + save_button: "Save changes" + edit_window_expired: "You can no longer edit this comment. The time window to do so has expired. Why not post another one?" + edit_window_expired_close: "Close" + edit_window_timer_prefix: "Edit Window: " + second: "second" + seconds_plural: "seconds" + minute: "minute" + minutes_plural: "minutes" + email: + suspended: + subject: "Your account has been suspended" + banned: + subject: "Your account has been banned" + body: "In accordance with The Coral Project’s community guidelines, your account has been banned. You are now longer allowed to comment, flag or engage with our community." + confirm: + has_been_requested: "A email confirmation has been requested for the following account:" + to_confirm: "To confirm the account, please visit the following link:" + confirm_email: "Confirm Email" + if_you_did_not: "If you did not request this, you can safely ignore this email." + subject: "Email Confirmation" + password_reset: + we_received_a_request: "We received a request to reset your password. If you did not request this change, you can ignore this email." + if_you_did: "If you did," + please_click: "please click here to reset password" + embedlink: + copy: "Copy to Clipboard" + error: + COMMENT_PARENT_NOT_VISIBLE: "The comment that you're replying to has been removed or doesn't exist." + EMAIL_VERIFICATION_TOKEN_INVALID: "Email verification token is invalid." + PASSWORD_RESET_TOKEN_INVALID: "Your password reset link is invalid." + COMMENT_TOO_SHORT: "Comments should be more than one character, please revise your comment and try again." + NOT_AUTHORIZED: "You are not authorized to perform this action." + NO_SPECIAL_CHARACTERS: "Usernames can contain letters numbers and _ only" + PASSWORD_LENGTH: "Password is too short" + PROFANITY_ERROR: "Usernames must not contain profanity. Please contact the administrator if you believe this to be in error." + RATE_LIMIT_EXCEEDED: "Rate limit exceeded" + USERNAME_IN_USE: "Username already in use" + USERNAME_REQUIRED: "Must input a username" + EMAIL_NOT_VERIFIED: "E-mail address not verified" + EDIT_WINDOW_ENDED: "You can no longer edit this comment. The time window to do so has expired." + EDIT_USERNAME_NOT_AUTHORIZED: "You do not have permission to update your username." + SAME_USERNAME_PROVIDED: "You must submit a different username." + EMAIL_IN_USE: "Email address already in use" + EMAIL_REQUIRED: "An email address is required" + LOGIN_MAXIMUM_EXCEEDED: "You have made too many unsuccessful password attempts. Please wait." + PASSWORD_REQUIRED: "Must input a password" + COMMENTING_CLOSED: "Commenting is already closed" + NOT_FOUND: "Resource not found" + ALREADY_EXISTS: "Resource already exists" + INVALID_ASSET_URL: "Assert URL is invalid" + CANNOT_IGNORE_STAFF: "Cannot ignore Staff members." + email: "Not a valid E-Mail" + confirm_password: "Passwords don't match. Please check again" + network_error: "Failed to connect to server. Check your internet connection and try again." + email_not_verified: "E-mail address {0} not verified." + email_password: "E-mail and/or password combination incorrect." + organization_name: "Organization name must only contain letters or numbers." + password: "Password must be at least 8 characters" + username: "Usernames can contain letters numbers and _ only" + unexpected: "Unexpected error occurred. Sorry!" + required_field: "This field is required" + temporarily_suspended: "Your account is currently suspended. It will be reactivated {0}. Please contact us if you have any questions." + flag_comment: "Report comment" + flag_reason: "Reason for reporting (Optional)" + flag_username: "Report username" + framework: + banned_account_header: "Your account is currently banned." + banned_account_body: "This means that you cannot Like, Report, or write comments." + comment: comment + comment_is_ignored: "This comment is hidden because you ignored this user." + comment_is_rejected: "You have rejected this comment." + comment_is_hidden: "This comment is not available." + comments: comments + configure_stream: "Configure" + content_not_available: "This content is not available" + edit_name: + button: Submit + error: "Usernames can contain letters numbers and _ only" + label: "New Username" + msg: "Your account is currently suspended because your username has been deemed inappropriate. To restore your account please enter a new username. Please contact us if you have any questions." + changed_name: + msg: "Your username change is under review by our moderation team." + my_comments: "My Comments" + my_profile: "My profile" + new_count: "View {0} more {1}" + profile: Profile + show_all_comments: "Show all comments" + success_bio_update: "Your biography has been updated" + success_name_update: "Your username has been updated" + success_update_settings: "The changes you have made have been applied to the comment stream on this article" + show_all_replies: Show all replies + show_more_replies: Show more replies + view_more_comments: "view more comments" + view_reply: "view reply" + from_settings_page: "From the Profile Page you can see your comment history." + like: Like + loading_results: "Loading Results" + marketing: "This looks like an ad/marketing" + moderate_this_stream: "Moderate this stream" + flags: + reasons: + user: + username_offensive: "Offensive" + username_nolike: "Dislike" + username_impersonating: "Impersonation" + username_spam: "Spam" + username_other: "Other" + comment: + comment_offensive: "Offensive" + comment_spam: "Spam" + comment_noagree: "Disagree" + comment_other: "Other" + suspect_word: "Suspect Word" + banned_word: "Banned Word" + body_count: "Body exceeds max length" + trust: "Trust" + links: "Link" + modqueue: + account: "account flags" + actions: Actions + all: all + all_streams: "All Streams" + notify_edited: '{0} edited comment "{1}"' + notify_accepted: '{0} accepted comment "{1}"' + notify_rejected: '{0} rejected comment "{1}"' + notify_flagged: '{0} flagged comment "{1}"' + notify_reset: '{0} reset status of comment "{1}"' + approve: "Approve" + approved: "Approved" + ban_user: "Ban" + billion: B + close: Close + empty_queue: "No more comments to moderate! You're all caught up. Go have some ☕️" + flagged: flagged + reported: reported + less_detail: "Less detail" + likes: likes + million: M + mod_faster: "Moderate faster with keyboard shortcuts" + moderate: "Moderate →" + more_detail: "More detail" + new: New + newest_first: "Newest First" + navigation: Navigation + next_comment: "Go to the next comment" + toggle_search: "Open search" + next_queue: "Switch queues" + oldest_first: "Oldest First" + premod: pre-mod + prev_comment: "Go to the previous comment" + reject: "Reject" + rejected: "Rejected" + reply: "Reply" + select_stream: "Select Stream" + shift_key: "⇧" + shortcuts: "Shortcuts" + sort: "Sort" + show_shortcuts: "Show Shortcuts" + singleview: "Zen mode" + thismenu: "Open this menu" + jump_to_queue: "Jump to specific queue" + thousand: k + try_these: "Try these" + view_more_shortcuts: "View more shortcuts" + my_comment_history: "My comment History" + name: Name + no_agree_comment: "I don't agree with this comment" + no_like_bio: "I don't like this bio" + no_like_username: "I don't like this username" + already_flagged_username: "You have already flagged this username." + other: Other + permalink: Share + personal_info: "This comment reveals personally identifiable information" + post: Post + profile: Profile + profile_settings: "Profile Settings" + reply: Reply + report: Report + report_notif: "Thank you for reporting this comment. Our moderation team has been notified and will review it shortly." + report_notif_remove: "Your report has been removed." + reported: Reported + settings: + from_settings_page: "From the Profile Page you can see your comment history." + my_comment_history: "My comment History" + profile: Profile + profile_settings: "Profile Settings" + sign_in: "Sign in" + to_access: "to access Profile" + user_no_comment: "You've never left a comment. Join the conversation!" + stream: + all_comments: "All Comments" + temporarily_suspended: "In accordance with {0}'s community guidelines, your account has been temporarily suspended. Please rejoin the conversation {1}." + comment_not_found: "This comment has been removed or does not exist." + no_comments: "There are no comments yet, why don’t you write one?" + no_comments_and_closed: "There were no comments on this article." + step_1_header: "Report an issue" + step_2_header: "Help us understand" + step_3_header: "Thank you for your input" + streams: + all: All + article: Story + closed: Closed + empty_result: "No assets match this search. Maybe try widening your search?" + filter_streams: "Filter Streams" + newest: Newest + oldest: Oldest + open: Open + pubdate: "Publication Date" + search: Search + sort_by: "Sort By" + status: "Stream Status" + stream_status: "Stream Status" + suspenduser: + title_suspend: "Suspend User" + description_suspend: "You are suspending {0}. This comment will go to the Rejected queue, and {0} will not be allowed to like, report, reply or post until the suspension time is complete." + select_duration: "Select suspension duration" + one_hour: "1 hour" + hours: "{0} hours" + days: "{0} days" + cancel: "Cancel" + suspend_user: "Suspend User" + email_message_suspend: "Dear {0},\n\nIn accordance with {1}’s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}." + title_notify: "Notify the user of their temporary suspension" + notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." + description_notify: "Suspending this user will temporarily disable their account." + write_message: "Write a message" + send: Send + reject_username: + username: username + no_cancel: "No cancel" + description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}." + title_notify: "Notify the user of their temporary suspension" + description_notify: "Suspending this user will temporarily disable their account." + title_reject: "We noticed you rejected a username" + suspend_user: "Suspend User" + yes_suspend: "Yes suspend" + email_message_reject: "Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please e-mail us if you have any questions or concerns." + write_message: "Write a message" + send: Send + thank_you: "We value your safety and feedback. A moderator will review your report." + user: + bio_flags: "flags for this bio" + user_bio: "User Bio" + username_flags: "flags for this username" + user_detail: + remove_suspension: "Remove Suspension" + suspend: "Suspend User" + remove_ban: "Remove Ban" + ban: "Ban User" + member_since: "Member Since" + email: "Email" + total_comments: "Total Comments" + reject_rate: "Reject Rate" + reports: "Reports" + all: "All" + rejected: "Rejected" + account_history: "Account History" + user_impersonating: "This user is impersonating" + user_no_comment: "You've never left a comment. Join the conversation!" + username_offensive: "This username is offensive" + view_conversation: "View Conversation" + install: + initial: + description: "Let's set up your Talk community in just a few short steps." + submit: "Get Started" + add_organization: + description: "Please tell us the name of your organization. This will appear in emails when inviting new team members." + label: "Organization Name" + save: "Save" + create: + email: "Email address" + username: "Username" + password: "Password" + confirm_password: "Confirm Password" + save: "Save" + permitted_domains: + title: "Permitted domains" + description: "Enter the domains you would like to permit for Talk, e.g. your local, staging and production environments (ex. localhost:3000, staging.domain.com, domain.com)." + submit: "Finish install" + final: + description: "Thanks for installing Talk! We sent an email to verify your email address. While you finish setting up the account, you can start engaging with your readers now." + launch: "Launch Talk" + close: "Close this Installer" + admin_sidebar: + view_options: "View Options" + sort_comments: "Sort Comments" From 5fde3235ad16879ffd205c165853960d848fc9c0 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 12:00:01 -0500 Subject: [PATCH 031/116] Add Hebrew template to all translation files --- locales/he.yml | 8 +-- .../talk-plugin-auth/client/translations.yml | 43 +++++++++++++++ .../client/translations.yml | 2 + .../client/translations.yml | 15 ++++++ .../client/translations.yml | 3 ++ .../client/translations.yml | 15 +++++- .../talk-plugin-like/client/translations.yml | 12 +++-- .../talk-plugin-love/client/translations.yml | 4 ++ .../client/translations.yml | 3 ++ .../client/translations.yml | 12 +++++ .../client/translations.json | 12 +++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 12 +++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 3 ++ .../client/translations.yml | 3 ++ .../client/translations.yml | 9 ++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 9 ++-- .../client/translations.yml | 54 ++++++++++++------- .../client/translations.yml | 15 ++++-- 22 files changed, 212 insertions(+), 58 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index 8f7a3853b..b07e82806 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -2,7 +2,7 @@ en: your_account_has_been_suspended: Your account has been temporarily suspended. your_account_has_been_banned: Your account has been banned. your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username. - embed_comments_tab: Comments + embed_comments_tab: תגובות bandialog: are_you_sure: "Are you sure you would like to ban {0}?" ban_user: "Ban User?" @@ -43,7 +43,7 @@ en: cancel: "Cancel" reply: "Reply" comment: "Post a comment" - name: "Name" + name: "שם" comment_post_notif: "Your comment has been posted." comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." @@ -445,9 +445,9 @@ en: add_organization: description: "Please tell us the name of your organization. This will appear in emails when inviting new team members." label: "Organization Name" - save: "Save" + save: "שמור" create: - email: "Email address" + email: 'כתובת דוא"ל' username: "Username" password: "Password" confirm_password: "Confirm Password" diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 9731da90a..7d1bed07b 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -220,6 +220,49 @@ fr: username: "Nom d'utilisateur" write_your_username: "Modifier votre nom d'utilisateur" your_username: "Votre nom d'utilisateur apparaît sur chaque commentaire que vous publiez." +he: + talk-plugin-auth: + login: + email_verify_cta: "Please verify your email address." + request_new_verify_email: "Request another email" + verify_email: "Thank you for creating an account! We sent an email to the address you provided to verify your account." + verify_email2: "You must verify your account before engaging with the community." + not_you: "Not you?" + logged_in_as: "Signed in as" + logout: "Sign out" + sign_in: "Sign in" + sign_in_to_join: "Sign in to join the conversation" + or: "Or" + email: "E-mail Address" + password: "Password" + forgot_your_pass: "Forgot your password?" + need_an_account: "Need an account?" + register: "Register" + sign_up: "Sign Up" + confirm_password: "Confirm Password" + username: "Username" + already_have_an_account: "Already have an account?" + recover_password: "Recover password" + email_in_use: "Email address already in use" + email_or_username_in_use: "Email address or Username already in use" + required_field: "This field is required" + passwords_dont_match: "Passwords don't match." + special_characters: "Usernames can contain letters, numbers and _ only" + sign_in_to_comment: "Sign in to comment" + check_the_form: "Invalid Form. Please, check the fields" + set_username_dialog: + check_the_form: "Invalid Form. Please check the fields" + continue: "Continue with the same Facebook username" + error_create: "Error when changing username" + fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." + fake_comment_date: "1 minute ago" + if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." + required_field: "Required field" + save: Save + special_characters: "Usernames can contain letters numbers and _ only" + username: Username + write_your_username: "Edit your username" + your_username: "Your username appears on every comment you post." nl_NL: sign_in: email_verify_cta: "Controleer je e-mailadres." diff --git a/plugins/talk-plugin-author-menu/client/translations.yml b/plugins/talk-plugin-author-menu/client/translations.yml index 34f270d50..38dcee29b 100644 --- a/plugins/talk-plugin-author-menu/client/translations.yml +++ b/plugins/talk-plugin-author-menu/client/translations.yml @@ -8,6 +8,8 @@ es: talk-plugin-author-menu: fr: talk-plugin-author-menu: +he: + talk-plugin-author-menu: nl_NL: talk-plugin-author-menu: pt_BR: diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index 003372403..6c8e79e78 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -70,6 +70,21 @@ fr: are_you_sure: Are you sure you would like to feature this comment? cancel: Cancel yes_feature_comment: Yes, feature comment +he: + talk-plugin-featured-comments: + un_feature: Un-Feature + feature: Feature + featured: Featured + featured_comments: Featured Comments + go_to_conversation: Go to conversation + tooltip_description: Comments selected by our team as worth reading + notify_self_featured: 'The comment from {0} is now featured and approved' + notify_featured: '{0} featured and approved comment "{1}"' + notify_unfeatured: '{0} unfeatured comment "{1}"' + feature_comment: Feature comment? + are_you_sure: Are you sure you would like to feature this comment? + cancel: בטל + yes_feature_comment: Yes, feature comment nl_NL: talk-plugin-featured-comments: un_feature: Uitlichting opheffen. diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index b0fe6ccae..b4d74a08a 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-flag-details: flags: Reports +he: + talk-plugin-flag-details: + flags: Reports nl_NL: talk-plugin-flag-details: flags: Meldingen diff --git a/plugins/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-ignore-user/client/translations.yml index 4f32c535d..d1a7a64ac 100644 --- a/plugins/talk-plugin-ignore-user/client/translations.yml +++ b/plugins/talk-plugin-ignore-user/client/translations.yml @@ -60,6 +60,19 @@ fr: notify_success: | You are now ignoring {0}. You can undo this action from My Profile. confirmation_title: Ignore {0}? +he: + talk-plugin-ignore-user: + section_title: Ignored users + section_info: Because you ignored the following commenters, their comments are hidden. + stop_ignoring: Stop ignoring + ignore_user: Ignore User + cancel: בטל + confirmation: | + When you ignore a user, all comments they wrote on the site will be hidden from you. You can + undo this later from My Profile. + notify_success: | + You are now ignoring {0}. You can undo this action from My Profile. + confirmation_title: Ignore {0}? nl_NL: talk-plugin-ignore-user: section_title: Genegeerde gebruikers @@ -68,7 +81,7 @@ nl_NL: ignore_user: Gebruiker negeren cancel: Annuleren confirmation: | - Wanneer je een gebruiker negeert, zullen al zijn/haar reacties voor jou worden verborgen. Je kunt + Wanneer je een gebruiker negeert, zullen al zijn/haar reacties voor jou worden verborgen. Je kunt dit later ongedaan maken vanuit Mijn profiel. notify_success: | Je negeert nu {0}. Je kunt dit ongedaan maken vanuit Mijn profiel. diff --git a/plugins/talk-plugin-like/client/translations.yml b/plugins/talk-plugin-like/client/translations.yml index 5f44db4c7..477b6cd67 100644 --- a/plugins/talk-plugin-like/client/translations.yml +++ b/plugins/talk-plugin-like/client/translations.yml @@ -2,14 +2,14 @@ da: talk-plugin-like: like: Like liked: Liked -en: - talk-plugin-like: - like: Like - liked: Liked de: talk-plugin-like: like: Gefällt mir liked: Gefällt mir +en: + talk-plugin-like: + like: Like + liked: Liked es: talk-plugin-like: like: Me Gusta @@ -18,6 +18,10 @@ fr: talk-plugin-like: like: Like liked: Liked +he: + talk-plugin-like: + like: Like + liked: Liked nl_NL: talk-plugin-like: like: Like diff --git a/plugins/talk-plugin-love/client/translations.yml b/plugins/talk-plugin-love/client/translations.yml index 24744c2f9..9851a93e4 100644 --- a/plugins/talk-plugin-love/client/translations.yml +++ b/plugins/talk-plugin-love/client/translations.yml @@ -18,6 +18,10 @@ fr: talk-plugin-love: love: Love loved: Loved +he: + talk-plugin-love: + love: אוהב + loved: אהבתי nl_NL: talk-plugin-love: love: Ik hou er van diff --git a/plugins/talk-plugin-member-since/client/translations.yml b/plugins/talk-plugin-member-since/client/translations.yml index f63f5a1fd..cd6b542c5 100644 --- a/plugins/talk-plugin-member-since/client/translations.yml +++ b/plugins/talk-plugin-member-since/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-member-since: member_since: "Member Since" +he: + talk-plugin-member-since: + member_since: "Member Since" nl_NL: talk-plugin-member-since: member_since: "Gebruiker sinds" diff --git a/plugins/talk-plugin-moderation-actions/client/translations.yml b/plugins/talk-plugin-moderation-actions/client/translations.yml index 9052d03f5..f967add7f 100644 --- a/plugins/talk-plugin-moderation-actions/client/translations.yml +++ b/plugins/talk-plugin-moderation-actions/client/translations.yml @@ -58,6 +58,18 @@ fr: ban_user_dialog_cancel: "Cancel" ban_user_dialog_yes: "Yes. Ban user" ban_user_dialog_headline: "Ban User?" +he: + talk-plugin-moderation-actions: + reject_comment: "Reject" + approve_comment: "Approve" + approved_comment: "Approved" + moderation_actions: "Moderation Actions" + ban_user: "Ban User" + ban_user_dialog_sub: "Are you sure you would like to ban this user?" + ban_user_dialog_copy: "Note: Banning this user will also place this comment in the Rejected queue." + ban_user_dialog_cancel: "בטל" + ban_user_dialog_yes: "Yes. Ban user" + ban_user_dialog_headline: "Ban User?" nl_NL: talk-plugin-moderation-actions: reject_comment: "Afkeuren" diff --git a/plugins/talk-plugin-offtopic/client/translations.json b/plugins/talk-plugin-offtopic/client/translations.json index 826b3e15b..29e496db0 100644 --- a/plugins/talk-plugin-offtopic/client/translations.json +++ b/plugins/talk-plugin-offtopic/client/translations.json @@ -3,14 +3,14 @@ "off_topic": "Off Topic", "hide_off_topic": "Hide Off-Topic Comments" }, - "en": { - "off_topic": "Off Topic", - "hide_off_topic": "Hide Off-Topic Comments" - }, "de": { "off_topic": "Off-Topic", "hide_off_topic": "Off-Topic-Kommentare verbergen" }, + "en": { + "off_topic": "Off Topic", + "hide_off_topic": "Hide Off-Topic Comments" + }, "es": { "off_topic": "Fuera de Tópico", "hide_off_topic": "Hide Off-Topic Comments" @@ -19,6 +19,10 @@ "off_topic": "Off Topic", "hide_off_topic": "Hide Off-Topic Comments" }, + "he": { + "off_topic": "Off Topic", + "hide_off_topic": "Hide Off-Topic Comments" + }, "nl_NL": { "off_topic": "Off topic", "hide_off_topic": "Off-topic reacties verbergen" diff --git a/plugins/talk-plugin-profile-settings/client/translations.yml b/plugins/talk-plugin-profile-settings/client/translations.yml index cd8edb415..f95bce5c7 100644 --- a/plugins/talk-plugin-profile-settings/client/translations.yml +++ b/plugins/talk-plugin-profile-settings/client/translations.yml @@ -1,15 +1,18 @@ -en: - talk-plugin-profile-settings: - tab: Settings de: talk-plugin-profile-settings: tab: Einstellungen +en: + talk-plugin-profile-settings: + tab: Settings es: talk-plugin-profile-settings: tab: Configuración fr: talk-plugin-profile-settings: tab: Paramètres +he: + talk-plugin-profile-settings: + tab: Settings nl_NL: talk-plugin-profile-settings: tab: Instellingen diff --git a/plugins/talk-plugin-respect/client/translations.yml b/plugins/talk-plugin-respect/client/translations.yml index 22497ea52..7958e6147 100644 --- a/plugins/talk-plugin-respect/client/translations.yml +++ b/plugins/talk-plugin-respect/client/translations.yml @@ -2,14 +2,14 @@ da: talk-plugin-respect: respect: Respect respected: Respected -en: - talk-plugin-respect: - respect: Respect - respected: Respected de: talk-plugin-respect: respect: Respekt respected: Respektiert +en: + talk-plugin-respect: + respect: Respect + respected: Respected es: talk-plugin-respect: respect: Respetar @@ -18,6 +18,10 @@ fr: talk-plugin-respect: respect: Respect respected: Respected +he: + talk-plugin-respect: + respect: Respect + respected: Respected nl_NL: talk-plugin-respect: respect: Respect diff --git a/plugins/talk-plugin-sort-most-liked/client/translations.yml b/plugins/talk-plugin-sort-most-liked/client/translations.yml index f9e48d261..b317c1b2a 100644 --- a/plugins/talk-plugin-sort-most-liked/client/translations.yml +++ b/plugins/talk-plugin-sort-most-liked/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-most-liked: label: Most liked first -en: - talk-plugin-sort-most-liked: - label: Most liked first de: talk-plugin-sort-most-liked: label: Beliebteste zuerst +en: + talk-plugin-sort-most-liked: + label: Most liked first es: talk-plugin-sort-most-liked: label: Most liked first fr: talk-plugin-sort-most-liked: label: Most liked first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-liked: label: Meest geliked eerst diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index c290e4a53..98a4ef12d 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-sort-most-loved: label: Most loved first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-loved: label: Meest geliefd eerst diff --git a/plugins/talk-plugin-sort-most-replied/client/translations.yml b/plugins/talk-plugin-sort-most-replied/client/translations.yml index dacdb93fb..04109a168 100644 --- a/plugins/talk-plugin-sort-most-replied/client/translations.yml +++ b/plugins/talk-plugin-sort-most-replied/client/translations.yml @@ -13,6 +13,9 @@ es: fr: talk-plugin-sort-most-replied: label: Most replied first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-replied: label: Meest beantwoord eerst diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index 736cc63c1..9cb9c50bd 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-most-respected: label: Most respected first -en: - talk-plugin-sort-most-respected: - label: Most respected first de: talk-plugin-sort-most-respected: label: Häufigste "Respektiert" zuerst +en: + talk-plugin-sort-most-liked: + label: Most liked first es: talk-plugin-sort-most-respected: label: Most respected first fr: talk-plugin-sort-most-respected: label: Most respected first +he: + talk-plugin-sort-most-liked: + label: Most liked first nl_NL: talk-plugin-sort-most-respected: label: Meest gerespecteerd eerst diff --git a/plugins/talk-plugin-sort-newest/client/translations.yml b/plugins/talk-plugin-sort-newest/client/translations.yml index e85eec18e..b6d4afd47 100644 --- a/plugins/talk-plugin-sort-newest/client/translations.yml +++ b/plugins/talk-plugin-sort-newest/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-newest: label: Newest first -en: - talk-plugin-sort-newest: - label: Newest first de: talk-plugin-sort-newest: label: Neueste zuerst +en: + talk-plugin-sort-newest: + label: Newest first es: talk-plugin-sort-newest: label: Newest first fr: talk-plugin-sort-newest: label: Newest first +he: + talk-plugin-sort-newest: + label: מהראשונה לאחרונה nl_NL: talk-plugin-sort-newest: label: Nieuwste eerst diff --git a/plugins/talk-plugin-sort-oldest/client/translations.yml b/plugins/talk-plugin-sort-oldest/client/translations.yml index f12fe8e43..61f7c8638 100644 --- a/plugins/talk-plugin-sort-oldest/client/translations.yml +++ b/plugins/talk-plugin-sort-oldest/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-sort-oldest: label: Oldest first -en: - talk-plugin-sort-oldest: - label: Oldest first de: talk-plugin-sort-oldest: label: Älteste zuerst +en: + talk-plugin-sort-oldest: + label: Oldest first es: talk-plugin-sort-oldest: label: Oldest first fr: talk-plugin-sort-oldest: label: Oldest first +he: + talk-plugin-sort-oldest: + label: מהאחרונה לראשונה nl_NL: talk-plugin-sort-oldest: label: Oudste eerst diff --git a/plugins/talk-plugin-subscriber/client/translations.yml b/plugins/talk-plugin-subscriber/client/translations.yml index 65b438779..bac95b345 100644 --- a/plugins/talk-plugin-subscriber/client/translations.yml +++ b/plugins/talk-plugin-subscriber/client/translations.yml @@ -1,18 +1,21 @@ da: talk-plugin-subscriber: subscriber: "Subscriber" -en: - talk-plugin-subscriber: - subscriber: "Subscriber" de: talk-plugin-subscriber: subscriber: "Abonnent" +en: + talk-plugin-subscriber: + subscriber: "Subscriber" es: talk-plugin-subscriber: subscriber: "Subscriptor" fr: talk-plugin-subscriber: subscriber: "Subscriber" +he: + talk-plugin-subscriber: + subscriber: "Subscriber" nl_NL: talk-plugin-subscriber: subscriber: "Abonnee" diff --git a/plugins/talk-plugin-toxic-comments/client/translations.yml b/plugins/talk-plugin-toxic-comments/client/translations.yml index 10fe80ec3..321624279 100644 --- a/plugins/talk-plugin-toxic-comments/client/translations.yml +++ b/plugins/talk-plugin-toxic-comments/client/translations.yml @@ -16,24 +16,6 @@ da: reasons: comment: toxic_comment: "Highly likely to be Toxic" -en: - error: - COMMENT_IS_TOXIC: | - Are you sure? The language in this comment might violate our community guidelines. - You can edit the comment or submit it for moderator review. - talk-plugin-toxic-comments: - unlikely: "Unlikely" - highly_likely: "Highly Likely" - possibly: "Possibly" - likely: "Likely" - toxic_comment: "Toxic Comment" - still_toxic: | - This edited comment might still violate our community guidelines. - Our moderation team will review your comment shortly. - flags: - reasons: - comment: - toxic_comment: "Highly likely to be Toxic" de: error: COMMENT_IS_TOXIC: | @@ -52,6 +34,24 @@ de: reasons: comment: toxic_comment: "Höchstwahrscheinlich bösartig" +en: + error: + COMMENT_IS_TOXIC: | + Are you sure? The language in this comment might violate our community guidelines. + You can edit the comment or submit it for moderator review. + talk-plugin-toxic-comments: + unlikely: "Unlikely" + highly_likely: "Highly Likely" + possibly: "Possibly" + likely: "Likely" + toxic_comment: "Toxic Comment" + still_toxic: | + This edited comment might still violate our community guidelines. + Our moderation team will review your comment shortly. + flags: + reasons: + comment: + toxic_comment: "Highly likely to be Toxic" es: error: COMMENT_IS_TOXIC: | @@ -88,6 +88,24 @@ fr: reasons: comment: toxic_comment: "Highly likely to be Toxic" +he: + error: + COMMENT_IS_TOXIC: | + Are you sure? The language in this comment might violate our community guidelines. + You can edit the comment or submit it for moderator review. + talk-plugin-toxic-comments: + unlikely: "Unlikely" + highly_likely: "Highly Likely" + possibly: "Possibly" + likely: "Likely" + toxic_comment: "Toxic Comment" + still_toxic: | + This edited comment might still violate our community guidelines. + Our moderation team will review your comment shortly. + flags: + reasons: + comment: + toxic_comment: "Highly likely to be Toxic" nl_NL: error: COMMENT_IS_TOXIC: | diff --git a/plugins/talk-plugin-viewing-options/client/translations.yml b/plugins/talk-plugin-viewing-options/client/translations.yml index 1e4eada60..ae7f3a5d7 100644 --- a/plugins/talk-plugin-viewing-options/client/translations.yml +++ b/plugins/talk-plugin-viewing-options/client/translations.yml @@ -3,16 +3,16 @@ da: viewing_options: "Viewing Options" sort: Sorting filter: Filtering -en: - talk-plugin-viewing-options: - viewing_options: "Viewing Options" - sort: Sorting - filter: Filtering de: talk-plugin-viewing-options: viewing_options: "Ansichtsoptionen" sort: Sortieren filter: Filtern +en: + talk-plugin-viewing-options: + viewing_options: "Viewing Options" + sort: Sorting + filter: Filtering es: talk-plugin-viewing-options: viewing_options: "Opciones de visualización" @@ -23,6 +23,11 @@ fr: viewing_options: "Viewing Options" sort: Sorting filter: Filtering +he: + talk-plugin-viewing-options: + viewing_options: "Viewing Options" + sort: Sorting + filter: Filtering nl_NL: talk-plugin-viewing-options: viewing_options: "Weergave opties" From 769437c8fb549faa6b53da058ba2266ec3293610 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 23 Feb 2018 12:17:13 -0500 Subject: [PATCH 032/116] Add more translations --- .../talk-plugin-auth/client/translations.yml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 7d1bed07b..1b30efd15 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -232,21 +232,21 @@ he: logout: "Sign out" sign_in: "Sign in" sign_in_to_join: "Sign in to join the conversation" - or: "Or" - email: "E-mail Address" - password: "Password" - forgot_your_pass: "Forgot your password?" - need_an_account: "Need an account?" + or: "או" + email: "כתובת אימייל" + password: "סיסמה" + forgot_your_pass: "שכחת את הסיסמה?" + need_an_account: "צריך חשבון?" register: "Register" sign_up: "Sign Up" - confirm_password: "Confirm Password" - username: "Username" + confirm_password: "אשר את הסיסמה שלך" + username: "שם משתמש" already_have_an_account: "Already have an account?" recover_password: "Recover password" - email_in_use: "Email address already in use" - email_or_username_in_use: "Email address or Username already in use" - required_field: "This field is required" - passwords_dont_match: "Passwords don't match." + email_in_use: "אימייל כבר תפוס" + email_or_username_in_use: "אימייל או שם משתמש כבר תפוס" + required_field: "חובה למלא את הערך הזה" + passwords_dont_match: "הסיסמאות אינן תואמות." special_characters: "Usernames can contain letters, numbers and _ only" sign_in_to_comment: "Sign in to comment" check_the_form: "Invalid Form. Please, check the fields" @@ -257,7 +257,7 @@ he: fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." fake_comment_date: "1 minute ago" if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." - required_field: "Required field" + required_field: "חובה למלא את הערך הזה" save: Save special_characters: "Usernames can contain letters numbers and _ only" username: Username From 4478ced2057a5bc84a35155d381829f8076f1331 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:19:20 -0500 Subject: [PATCH 033/116] Auth Hebrew translations --- .../talk-plugin-auth/client/translations.yml | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 1b30efd15..f9fd0808f 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -223,46 +223,46 @@ fr: he: talk-plugin-auth: login: - email_verify_cta: "Please verify your email address." - request_new_verify_email: "Request another email" - verify_email: "Thank you for creating an account! We sent an email to the address you provided to verify your account." - verify_email2: "You must verify your account before engaging with the community." - not_you: "Not you?" - logged_in_as: "Signed in as" - logout: "Sign out" - sign_in: "Sign in" - sign_in_to_join: "Sign in to join the conversation" + email_verify_cta: "אנא אמת את כתובת האימייל שלך." + request_new_verify_email: "בקש דוא"ל נוסף" + verify_email: "תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך." + verify_email2: "עליך לאמת את חשבונך לפני שתעסוק בקהילה." + not_you: "לא אתה?" + logged_in_as: "נכנס בתור" + logout: "התנתק" + sign_in: "היכנס" + sign_in_to_join: "היכנס כדי להצטרף לשיחה" or: "או" email: "כתובת אימייל" password: "סיסמה" forgot_your_pass: "שכחת את הסיסמה?" need_an_account: "צריך חשבון?" - register: "Register" - sign_up: "Sign Up" + register: "הירשם" + sign_up: "הירשם" confirm_password: "אשר את הסיסמה שלך" username: "שם משתמש" - already_have_an_account: "Already have an account?" - recover_password: "Recover password" + already_have_an_account: "כבר יש לך חשבון?" + recover_password: "שחזור סיסמה" email_in_use: "אימייל כבר תפוס" email_or_username_in_use: "אימייל או שם משתמש כבר תפוס" required_field: "חובה למלא את הערך הזה" passwords_dont_match: "הסיסמאות אינן תואמות." - special_characters: "Usernames can contain letters, numbers and _ only" - sign_in_to_comment: "Sign in to comment" - check_the_form: "Invalid Form. Please, check the fields" + special_characters: "שמות משתמש יכולים להכיל אותיות, מספרים ו- _ בלבד" + sign_in_to_comment: "היכנס כדי להגיב" + check_the_form: "טופס לא חוקי. אנא, בדוק את השדות" set_username_dialog: - check_the_form: "Invalid Form. Please check the fields" - continue: "Continue with the same Facebook username" - error_create: "Error when changing username" - fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." - fake_comment_date: "1 minute ago" - if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." + check_the_form: "טופס לא חוקי. אנא, בדוק את השדות" + continue: "המשך עם אותו שם משתמש בפייסבוק" + error_create: "שגיאה בעת שינוי שם המשתמש" + fake_comment_body: "זוהי תגובה לדוגמה. הקוראים יכולים לשתף את המחשבות שלהם ואת דעות עם חדר החדשות בסעיף התגובות" + fake_comment_date: "לפני דקה אחת" + if_you_dont_change_your_name: "אם לא תשנה את שם המשתמש שלך בשלב זה שם התצוגה שלך בפייסבוק יופיע לצד כל תגובות שלך." required_field: "חובה למלא את הערך הזה" - save: Save - special_characters: "Usernames can contain letters numbers and _ only" - username: Username - write_your_username: "Edit your username" - your_username: "Your username appears on every comment you post." + save: "שמור" + special_characters: "שמות משתמש יכולים להכיל אותיות, מספרים ו- _ בלבד" + username: "שם משתמש" + write_your_username: "ערוך את שם המשתמש שלך" + your_username: "שם המשתמש שלך מופיע בכל תגובה שתפרסם." nl_NL: sign_in: email_verify_cta: "Controleer je e-mailadres." From be15734c77c4469faf4fba0e58acce68306ac68f Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:22:12 -0500 Subject: [PATCH 034/116] Respect hebrew translations --- plugins/talk-plugin-respect/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-respect/client/translations.yml b/plugins/talk-plugin-respect/client/translations.yml index 7958e6147..af3287b81 100644 --- a/plugins/talk-plugin-respect/client/translations.yml +++ b/plugins/talk-plugin-respect/client/translations.yml @@ -20,8 +20,8 @@ fr: respected: Respected he: talk-plugin-respect: - respect: Respect - respected: Respected + respect: כבד + respected: נכבד nl_NL: talk-plugin-respect: respect: Respect From b0c230a1dfe5d2e2bcfe05828898252d94940f31 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:27:52 -0500 Subject: [PATCH 035/116] Akismet Hebrew translations --- .../talk-plugin-akismet/client/translations.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/talk-plugin-akismet/client/translations.yml b/plugins/talk-plugin-akismet/client/translations.yml index 6cc19a492..b5bfad713 100644 --- a/plugins/talk-plugin-akismet/client/translations.yml +++ b/plugins/talk-plugin-akismet/client/translations.yml @@ -58,10 +58,25 @@ fr: reasons: comment: spam_comment: "Detected Spam" +he: + error: + COMMENT_IS_SPAM: | + תגובה זו נראית כמו ספאם. + תוכל לערוך את התגובה או לשלוח אותה בכל מקרה לביקורת של מפקח. + talk-plugin-akismet: + spam: "ספאם" + spam_comment: "ספאם" + detected: "זוהה על ידי אקיזמט" + still_spam: | + תודה. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב. + flags: + reasons: + comment: + spam_comment: "זוהה ספאם" nl_NL: error: COMMENT_IS_SPAM: | - Deze reactie ziet er uit als spam. Je kan je reactie + Deze reactie ziet er uit als spam. Je kan je reactie wijzigen, of indienen zodat ons moderatieteam het kan beoordelen. talk-plugin-akismet: spam: "Spam" From 8ebb90c16079059e2149484eb393a7ea48dea758 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:30:34 -0500 Subject: [PATCH 036/116] Subscriber hebrew translation --- plugins/talk-plugin-subscriber/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-subscriber/client/translations.yml b/plugins/talk-plugin-subscriber/client/translations.yml index bac95b345..f80a837a7 100644 --- a/plugins/talk-plugin-subscriber/client/translations.yml +++ b/plugins/talk-plugin-subscriber/client/translations.yml @@ -15,7 +15,7 @@ fr: subscriber: "Subscriber" he: talk-plugin-subscriber: - subscriber: "Subscriber" + subscriber: "מנוי" nl_NL: talk-plugin-subscriber: subscriber: "Abonnee" From fc8b9c35475cd320108110717fc66cd869017c9c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:34:22 -0500 Subject: [PATCH 037/116] Like hebrew translation --- plugins/talk-plugin-like/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-like/client/translations.yml b/plugins/talk-plugin-like/client/translations.yml index 477b6cd67..3a95f77b1 100644 --- a/plugins/talk-plugin-like/client/translations.yml +++ b/plugins/talk-plugin-like/client/translations.yml @@ -20,8 +20,8 @@ fr: liked: Liked he: talk-plugin-like: - like: Like - liked: Liked + like: לייק + liked: לייקד nl_NL: talk-plugin-like: like: Like From 1f17d71a7666cb29d1d08bdb1953ba2e4d1b7362 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:41:22 -0500 Subject: [PATCH 038/116] Ignore user hebrew translation --- .../client/translations.yml | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/plugins/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-ignore-user/client/translations.yml index d1a7a64ac..2d4ee7f20 100644 --- a/plugins/talk-plugin-ignore-user/client/translations.yml +++ b/plugins/talk-plugin-ignore-user/client/translations.yml @@ -11,19 +11,6 @@ da: notify_success: | You are now ignoring {0}. You can undo this action from My Profile. confirmation_title: Ignore {0}? -en: - talk-plugin-ignore-user: - section_title: Ignored users - section_info: Because you ignored the following commenters, their comments are hidden. - stop_ignoring: Stop ignoring - ignore_user: Ignore User - cancel: Cancel - confirmation: | - When you ignore a user, all comments they wrote on the site will be hidden from you. You can - undo this later from My Profile. - notify_success: | - You are now ignoring {0}. You can undo this action from My Profile. - confirmation_title: Ignore {0}? de: talk-plugin-ignore-user: section_title: Ignorierte Nutzer @@ -34,6 +21,19 @@ de: confirmation: Wenn Sie Nutzer ignorieren, werden deren Kommentare auf der Seite für Sie unsichtbar. Diese Einstellung können Sie unter Mein Profil ändern. notify_success: Sie ignorieren jetzt {0}. Sie können diese Einstellung unter Mein Profil wieder aufheben. confirmation_title: "{0} ignorieren?" +en: + talk-plugin-ignore-user: + section_title: Ignored users + section_info: Because you ignored the following commenters, their comments are hidden. + stop_ignoring: Stop ignoring + ignore_user: Ignore User + cancel: Cancel + confirmation: | + When you ignore a user, all comments they wrote on the site will be hidden from you. You can + undo this later from My Profile. + notify_success: | + You are now ignoring {0}. You can undo this action from My Profile. + confirmation_title: Ignore {0}? es: talk-plugin-ignore-user: section_title: "Usuarios ignorados" @@ -62,17 +62,16 @@ fr: confirmation_title: Ignore {0}? he: talk-plugin-ignore-user: - section_title: Ignored users - section_info: Because you ignored the following commenters, their comments are hidden. - stop_ignoring: Stop ignoring - ignore_user: Ignore User + section_title: משתמשים שהתעלמו מהם + section_info: מכיוון שהתעלמת מהמגיבים הבאים, ההערות שלהם מוסתרות. + stop_ignoring: הפסק להתעלם + ignore_user: התעלם מהמשתמש cancel: בטל confirmation: | - When you ignore a user, all comments they wrote on the site will be hidden from you. You can - undo this later from My Profile. + כאשר תתעלם ממשתמש, כל התגובות שכתבו באתר יוסתרו ממך. תוכל לבטל זאת מאוחר יותר מהפרופיל שלי. notify_success: | - You are now ignoring {0}. You can undo this action from My Profile. - confirmation_title: Ignore {0}? + כעת אתה מתעלם {0}. תוכל לבטל את הפעולה הזו מהפרופיל שלי. + confirmation_title: "התעלם {0}?" nl_NL: talk-plugin-ignore-user: section_title: Genegeerde gebruikers From a1890a0bfe9f176c0d77b28e5ed328c1cdeb026e Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 20:43:18 -0500 Subject: [PATCH 039/116] Facebook Auth translation --- plugins/talk-plugin-facebook-auth/client/translations.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/talk-plugin-facebook-auth/client/translations.yml b/plugins/talk-plugin-facebook-auth/client/translations.yml index ab72134f4..26836ffd5 100644 --- a/plugins/talk-plugin-facebook-auth/client/translations.yml +++ b/plugins/talk-plugin-facebook-auth/client/translations.yml @@ -10,6 +10,10 @@ fr: talk-plugin-facebook-auth: sign_in: "Connectez-vous avec Facebook" sign_up: "Inscrivez-vous avec Facebook" +he: + talk-plugin-facebook-auth: + sign_in: "התחבר עם פייסבוק" + sign_up: "הרשם עם פייסבוק" zh_CN: talk-plugin-facebook-auth: sign_in: "使用 Facebook 帐号" @@ -21,4 +25,4 @@ zh_TW: de: talk-plugin-facebook-auth: sign_in: "Mit Facebook anmelden" - sign_up: "Mit Facebook registrieren" \ No newline at end of file + sign_up: "Mit Facebook registrieren" From 71288f543e0134167af0b277956141fd17a2fd0c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:01:25 -0500 Subject: [PATCH 040/116] Featured comments Hebrew translation --- .../client/translations.yml | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index 6c8e79e78..e2811b965 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -13,21 +13,6 @@ da: are_you_sure: Are you sure you would like to feature this comment? cancel: Cancel yes_feature_comment: Yes, feature comment -en: - talk-plugin-featured-comments: - un_feature: Un-Feature - feature: Feature - featured: Featured - featured_comments: Featured Comments - go_to_conversation: Go to conversation - tooltip_description: Comments selected by our team as worth reading - notify_self_featured: 'The comment from {0} is now featured and approved' - notify_featured: '{0} featured and approved comment "{1}"' - notify_unfeatured: '{0} unfeatured comment "{1}"' - feature_comment: Feature comment? - are_you_sure: Are you sure you would like to feature this comment? - cancel: Cancel - yes_feature_comment: Yes, feature comment de: talk-plugin-featured-comments: un_feature: Empfehlung aufheben @@ -43,6 +28,21 @@ de: are_you_sure: Sind Sie sicher, dass Sie diesen Kommentar empfehlen möchten? cancel: Abbrechen yes_feature_comment: Ja, empfehlen +en: + talk-plugin-featured-comments: + un_feature: Un-Feature + feature: Feature + featured: Featured + featured_comments: Featured Comments + go_to_conversation: Go to conversation + tooltip_description: Comments selected by our team as worth reading + notify_self_featured: 'The comment from {0} is now featured and approved' + notify_featured: '{0} featured and approved comment "{1}"' + notify_unfeatured: '{0} unfeatured comment "{1}"' + feature_comment: Feature comment? + are_you_sure: Are you sure you would like to feature this comment? + cancel: Cancel + yes_feature_comment: Yes, feature comment es: talk-plugin-featured-comments: un_feature: Desmarcar @@ -72,19 +72,19 @@ fr: yes_feature_comment: Yes, feature comment he: talk-plugin-featured-comments: - un_feature: Un-Feature - feature: Feature - featured: Featured - featured_comments: Featured Comments - go_to_conversation: Go to conversation - tooltip_description: Comments selected by our team as worth reading - notify_self_featured: 'The comment from {0} is now featured and approved' - notify_featured: '{0} featured and approved comment "{1}"' - notify_unfeatured: '{0} unfeatured comment "{1}"' - feature_comment: Feature comment? - are_you_sure: Are you sure you would like to feature this comment? + un_feature: תסיר המלצה + feature: ממליץ + featured: מומלצים + featured_comments: תגובות מומלצות + go_to_conversation: עבור אל השיחה + tooltip_description: תגובות שנבחרו על ידי הצוות שלנו כקריאה שווה + notify_self_featured: 'ההערה מ {0} מומלצת ומאושרת כעת' + notify_featured: '"{0} המליץ ואושר תגובה {1}"' + notify_unfeatured: '{0} הוסר את ההמלצה מתגובה "{1}"' + feature_comment: ממליץ תגובה? + are_you_sure: האם אתה בטוח שברצונך להמליץ את ה תגובה הזו? cancel: בטל - yes_feature_comment: Yes, feature comment + yes_feature_comment: כן, ממליץ תגובה nl_NL: talk-plugin-featured-comments: un_feature: Uitlichting opheffen. From 5d3e8f3fb6be3dd0106879a3e37e7983c35ccc8c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:03:10 -0500 Subject: [PATCH 041/116] Flag Hebrew translation --- plugins/talk-plugin-flag-details/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index b4d74a08a..37478ae09 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -15,7 +15,7 @@ fr: flags: Reports he: talk-plugin-flag-details: - flags: Reports + flags: דיווחים nl_NL: talk-plugin-flag-details: flags: Meldingen From 8e1822af21b01938069d39e0d4a2d6edd142c13c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:05:14 -0500 Subject: [PATCH 042/116] Google Hebrew translation --- plugins/talk-plugin-google-auth/client/translations.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/talk-plugin-google-auth/client/translations.yml b/plugins/talk-plugin-google-auth/client/translations.yml index fd926f3ee..84db70d9d 100644 --- a/plugins/talk-plugin-google-auth/client/translations.yml +++ b/plugins/talk-plugin-google-auth/client/translations.yml @@ -10,6 +10,10 @@ fr: talk-plugin-google-auth: google_sign_in: "Connectez-vous avec Google" google_sign_up: "Inscrivez-vous avec Google" +en: + talk-plugin-google-auth: + sign_in: "התחבר עם גוגל" + sign_up: "הרשם עם גוגל" zh_CN: talk-plugin-google-auth: google_sign_in: "使用 Google 帐号" From f18c51dc68fe499bb37e5a945cd6659000c6e5f2 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:06:24 -0500 Subject: [PATCH 043/116] Member since Hebrew Translation --- plugins/talk-plugin-member-since/client/translations.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/talk-plugin-member-since/client/translations.yml b/plugins/talk-plugin-member-since/client/translations.yml index cd6b542c5..ea03b747e 100644 --- a/plugins/talk-plugin-member-since/client/translations.yml +++ b/plugins/talk-plugin-member-since/client/translations.yml @@ -1,12 +1,12 @@ da: talk-plugin-member-since: member_since: "Member Since" -en: - talk-plugin-member-since: - member_since: "Member Since" de: talk-plugin-member-since: member_since: "Mitglied seit" +en: + talk-plugin-member-since: + member_since: "Member Since" es: talk-plugin-member-since: member_since: "Miembro desde" @@ -15,7 +15,7 @@ fr: member_since: "Member Since" he: talk-plugin-member-since: - member_since: "Member Since" + member_since: "חבר מאז" nl_NL: talk-plugin-member-since: member_since: "Gebruiker sinds" From ad6908688826ae16c40cc1f3d45b9b3ede9e5b4a Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:10:23 -0500 Subject: [PATCH 044/116] Moderation actions Hebrew translation --- .../client/translations.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/talk-plugin-moderation-actions/client/translations.yml b/plugins/talk-plugin-moderation-actions/client/translations.yml index f967add7f..93111385b 100644 --- a/plugins/talk-plugin-moderation-actions/client/translations.yml +++ b/plugins/talk-plugin-moderation-actions/client/translations.yml @@ -60,16 +60,16 @@ fr: ban_user_dialog_headline: "Ban User?" he: talk-plugin-moderation-actions: - reject_comment: "Reject" - approve_comment: "Approve" - approved_comment: "Approved" - moderation_actions: "Moderation Actions" - ban_user: "Ban User" - ban_user_dialog_sub: "Are you sure you would like to ban this user?" - ban_user_dialog_copy: "Note: Banning this user will also place this comment in the Rejected queue." + reject_comment: "דחה" + approve_comment: "אשר" + approved_comment: "מאושרת" + moderation_actions: "פעולות מתווך" + ban_user: "חסום משתמש" + ban_user_dialog_sub: "האם אתה בטוח שאתה רוצה לאסור את המשתמש הזה?" + ban_user_dialog_copy: "הערה: חסימת משתמש זה תציב גם תגובה זו בתור נדחה." ban_user_dialog_cancel: "בטל" - ban_user_dialog_yes: "Yes. Ban user" - ban_user_dialog_headline: "Ban User?" + ban_user_dialog_yes: "כן. חסום משתמש" + ban_user_dialog_headline: "חסום משתמש?" nl_NL: talk-plugin-moderation-actions: reject_comment: "Afkeuren" From 420fc6daa716abd6ca5c2a388bdc5322bf786b8b Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:12:04 -0500 Subject: [PATCH 045/116] Off-top Hebrew translation --- plugins/talk-plugin-offtopic/client/translations.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-offtopic/client/translations.json b/plugins/talk-plugin-offtopic/client/translations.json index 29e496db0..e642ef03c 100644 --- a/plugins/talk-plugin-offtopic/client/translations.json +++ b/plugins/talk-plugin-offtopic/client/translations.json @@ -20,8 +20,8 @@ "hide_off_topic": "Hide Off-Topic Comments" }, "he": { - "off_topic": "Off Topic", - "hide_off_topic": "Hide Off-Topic Comments" + "off_topic": "מחוץ לנושא", + "hide_off_topic": "הסתר תגובות מחוץ לנושא" }, "nl_NL": { "off_topic": "Off topic", From 8f413852d95d3958abc6f789a0e027c1901202a0 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:14:00 -0500 Subject: [PATCH 046/116] Settings Hebrew translation --- plugins/talk-plugin-profile-settings/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-profile-settings/client/translations.yml b/plugins/talk-plugin-profile-settings/client/translations.yml index f95bce5c7..a1b1aec5d 100644 --- a/plugins/talk-plugin-profile-settings/client/translations.yml +++ b/plugins/talk-plugin-profile-settings/client/translations.yml @@ -12,7 +12,7 @@ fr: tab: Paramètres he: talk-plugin-profile-settings: - tab: Settings + tab: הגדרות nl_NL: talk-plugin-profile-settings: tab: Instellingen From 741d5000dd663cc3d131defbf44fccc2ea46a71b Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:15:51 -0500 Subject: [PATCH 047/116] Most liked Hebrew translation --- plugins/talk-plugin-sort-most-liked/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-sort-most-liked/client/translations.yml b/plugins/talk-plugin-sort-most-liked/client/translations.yml index b317c1b2a..c928bf1ad 100644 --- a/plugins/talk-plugin-sort-most-liked/client/translations.yml +++ b/plugins/talk-plugin-sort-most-liked/client/translations.yml @@ -15,7 +15,7 @@ fr: label: Most liked first he: talk-plugin-sort-most-liked: - label: Most liked first + label: הכי לייקד קודם nl_NL: talk-plugin-sort-most-liked: label: Meest geliked eerst From fdcd1404ef378ce891eb0551cacebba70ba33056 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:17:02 -0500 Subject: [PATCH 048/116] Most loved Hebrew translation --- .../talk-plugin-sort-most-loved/client/translations.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index 98a4ef12d..6dde31601 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -1,12 +1,12 @@ da: talk-plugin-sort-most-loved: label: Most loved first -en: - talk-plugin-sort-most-loved: - label: Most loved first de: talk-plugin-sort-most-loved: label: Häufigste "Ich liebe es" zuerst +en: + talk-plugin-sort-most-loved: + label: Most loved first es: talk-plugin-sort-most-loved: label: Most loved first @@ -15,7 +15,7 @@ fr: label: Most loved first he: talk-plugin-sort-most-liked: - label: Most liked first + label: הכי אהבתי קודם nl_NL: talk-plugin-sort-most-loved: label: Meest geliefd eerst From 0cd18a458defda54a9c47fc1ca146d6a5f3b4318 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:19:43 -0500 Subject: [PATCH 049/116] More Hebrew translations --- .../client/translations.yml | 2 +- .../client/translations.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index 6dde31601..ef7c8c252 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -14,7 +14,7 @@ fr: talk-plugin-sort-most-loved: label: Most loved first he: - talk-plugin-sort-most-liked: + talk-plugin-sort-most-loved: label: הכי אהבתי קודם nl_NL: talk-plugin-sort-most-loved: diff --git a/plugins/talk-plugin-sort-most-replied/client/translations.yml b/plugins/talk-plugin-sort-most-replied/client/translations.yml index 04109a168..3c7b78788 100644 --- a/plugins/talk-plugin-sort-most-replied/client/translations.yml +++ b/plugins/talk-plugin-sort-most-replied/client/translations.yml @@ -1,12 +1,12 @@ da: talk-plugin-sort-most-replied: label: Most replied first -en: - talk-plugin-sort-most-replied: - label: Most replied first de: talk-plugin-sort-most-replied: label: Häufigste Antworten zuerst +en: + talk-plugin-sort-most-replied: + label: Most replied first es: talk-plugin-sort-most-replied: label: Most replied first @@ -14,8 +14,8 @@ fr: talk-plugin-sort-most-replied: label: Most replied first he: - talk-plugin-sort-most-liked: - label: Most liked first + talk-plugin-sort-most-replied: + label: הכי השיב קודם nl_NL: talk-plugin-sort-most-replied: label: Meest beantwoord eerst From 9456c79badab1dd3dac6e20130a4c437d7710bda Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:21:02 -0500 Subject: [PATCH 050/116] Most respected Hebrew translation --- .../talk-plugin-sort-most-respected/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index 9cb9c50bd..01c34708c 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -14,8 +14,8 @@ fr: talk-plugin-sort-most-respected: label: Most respected first he: - talk-plugin-sort-most-liked: - label: Most liked first + talk-plugin-sort-most-respected: + label: הכי מכובד קודם nl_NL: talk-plugin-sort-most-respected: label: Meest gerespecteerd eerst From b43f657c8d63fa2fb6db32d80f183247e737451a Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:25:58 -0500 Subject: [PATCH 051/116] Toxic comments Hebrew translation --- .../client/translations.yml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/talk-plugin-toxic-comments/client/translations.yml b/plugins/talk-plugin-toxic-comments/client/translations.yml index 321624279..8443d250b 100644 --- a/plugins/talk-plugin-toxic-comments/client/translations.yml +++ b/plugins/talk-plugin-toxic-comments/client/translations.yml @@ -91,21 +91,21 @@ fr: he: error: COMMENT_IS_TOXIC: | - Are you sure? The language in this comment might violate our community guidelines. - You can edit the comment or submit it for moderator review. + האם אתה בטוח? השפה שבתגובה זו עלולה להפר את הנחיות הקהילה שלנו. + תוכל לערוך את ההערה או לשלוח אותה לביקורת של המתווך. talk-plugin-toxic-comments: - unlikely: "Unlikely" - highly_likely: "Highly Likely" - possibly: "Possibly" - likely: "Likely" - toxic_comment: "Toxic Comment" + unlikely: "לא סביר" + highly_likely: "סביר מאוד" + possibly: "יתכן" + likely: "סביר" + toxic_comment: "תגובה רעילה" still_toxic: | - This edited comment might still violate our community guidelines. - Our moderation team will review your comment shortly. + תגובה זו עדיין עשויה להפר את הנחיות הקהילה שלנו. +       צוות הפיקוח שלנו יבחן את ההערה שלך בקרוב. flags: reasons: comment: - toxic_comment: "Highly likely to be Toxic" + toxic_comment: "סביר מאוד להיות רעיל" nl_NL: error: COMMENT_IS_TOXIC: | From fd5bbe0234ff77fadf79b47dab4d78a81d5882b5 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:27:31 -0500 Subject: [PATCH 052/116] Viewing options Hebrew translation --- plugins/talk-plugin-viewing-options/client/translations.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/talk-plugin-viewing-options/client/translations.yml b/plugins/talk-plugin-viewing-options/client/translations.yml index ae7f3a5d7..a50f8e8bb 100644 --- a/plugins/talk-plugin-viewing-options/client/translations.yml +++ b/plugins/talk-plugin-viewing-options/client/translations.yml @@ -25,9 +25,9 @@ fr: filter: Filtering he: talk-plugin-viewing-options: - viewing_options: "Viewing Options" - sort: Sorting - filter: Filtering + viewing_options: "אפשרויות צפייה" + sort: מיון + filter: סינון nl_NL: talk-plugin-viewing-options: viewing_options: "Weergave opties" From 0ea08ccc9c6ad155731c05915ad4a1fe877f41d5 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 24 Feb 2018 21:38:07 -0500 Subject: [PATCH 053/116] Remove extra space --- plugins/talk-plugin-featured-comments/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index e2811b965..2b71509ff 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -82,7 +82,7 @@ he: notify_featured: '"{0} המליץ ואושר תגובה {1}"' notify_unfeatured: '{0} הוסר את ההמלצה מתגובה "{1}"' feature_comment: ממליץ תגובה? - are_you_sure: האם אתה בטוח שברצונך להמליץ את ה תגובה הזו? + are_you_sure: האם אתה בטוח שברצונך להמליץ את התגובה הזו? cancel: בטל yes_feature_comment: כן, ממליץ תגובה nl_NL: From fa4dbfe9d0945db0ad65ac6b340c9f8408ad7509 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 26 Feb 2018 16:14:16 -0500 Subject: [PATCH 054/116] Trigger build --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index c2bf9648d..3955eee4e 100644 --- a/app.js +++ b/app.js @@ -9,7 +9,7 @@ const { MOUNT_PATH } = require('./url'); const routes = require('./routes'); const debug = require('debug')('talk:app'); const { ENABLE_TRACING, APOLLO_ENGINE_KEY, PORT } = require('./config'); - + const app = express(); //============================================================================== From 35cf694b60458ce8187f18add4cbaf4bde63b4c4 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 26 Feb 2018 16:37:40 -0500 Subject: [PATCH 055/116] Add More hebrew translations --- app.js | 2 +- locales/he.yml | 82 +++++++++++++++++++++++++------------------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/app.js b/app.js index 3955eee4e..c2bf9648d 100644 --- a/app.js +++ b/app.js @@ -9,7 +9,7 @@ const { MOUNT_PATH } = require('./url'); const routes = require('./routes'); const debug = require('debug')('talk:app'); const { ENABLE_TRACING, APOLLO_ENGINE_KEY, PORT } = require('./config'); - + const app = express(); //============================================================================== diff --git a/locales/he.yml b/locales/he.yml index b07e82806..a4f43db30 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -1,46 +1,46 @@ en: - your_account_has_been_suspended: Your account has been temporarily suspended. - your_account_has_been_banned: Your account has been banned. - your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username. + your_account_has_been_suspended: החשבון שלך הושעה באופן זמני. + your_account_has_been_banned: החשבון שלך הורחק. + your_username_has_been_rejected: החשבון שלך הושעה מפני ששם המשתמש שלך נחשב לא הולם. כדי לשחזר את החשבון שלך, הזן שם משתמש חדש. embed_comments_tab: תגובות bandialog: are_you_sure: "Are you sure you would like to ban {0}?" - ban_user: "Ban User?" - banned_user: "Banned User" - cancel: "Cancel" + ban_user: "חסום משתמש?" + banned_user: "משתמש מורשה" + cancel: "בטל" note: "Note: {0}" note_reject_comment: "Banning this user will also place this comment in the Rejected queue." note_ban_user: "Banning this user will not let them comment, react to, or report comments." - yes_ban_user: "Yes, Ban User" + yes_ban_user: "כן. חסום משתמש" write_a_message: "Write a message" - send: "Send" + send: "שלח" notify_ban_headline: "Notify the user of ban" notify_ban_description: "This will notify the user by email that they have been banned from the community" email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." - bio_offensive: "This bio is offensive" - cancel: "Cancel" + bio_offensive: "ביו זה פוגע" + cancel: "בטל" confirm_email: - click_to_confirm: "Click below to confirm your email address" + click_to_confirm: 'לחץ למטה כדי לאשר את כתובת הדוא"ל שלך' confirm: "Confirm" password_reset: - mail_sent: 'If you have a registered account, a password reset link was sent to that email' - set_new_password: "Change Your Password" - new_password: "New Password" - new_password_help: "Password must be at least 8 characters" - confirm_new_password: "Confirm New Password" - change_password: "Change Password" - characters_remaining: "characters remaining" + mail_sent: 'אם יש לך חשבון רשום, נשלח קישור לאיפוס סיסמה לאותו דוא"ל' + set_new_password: "שנה את סיסמתך" + new_password: "סיסמה חדשה" + new_password_help: "הסיסמה חייבת להיות לפחות 8 תווים" + confirm_new_password: "תאשר סיסמא חדשה" + change_password: "שנה סיסמא" + characters_remaining: "תווים נותרים" comment: anon: "Anonymous" undo_reject: "Undo" - ban_user: "Ban User" - comment: "Post a comment" + ban_user: "חסום משתמש" + comment: "פרסם תגובה" edited: Edited - flagged: "flagged" - view_context: "View context" + flagged: "מסומנת" + view_context: "הצג הקשר" comment_box: post: "Post" - cancel: "Cancel" + cancel: "בטל" reply: "Reply" comment: "Post a comment" name: "שם" @@ -56,7 +56,7 @@ en: comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." common: copy: 'Copy' - error: 'An error has occurred.' + error: 'אירעה שגיאה.' reply: 'reply' replies: 'replies' reaction: 'reaction' @@ -76,7 +76,7 @@ en: ban_user: "Ban User?" banned: Banned banned_user: "Banned User" - cancel: Cancel + cancel: בטל dont_like_username: "Dislike username" flaggedaccounts: "Reported Usernames" flags: Flags @@ -95,7 +95,7 @@ en: staff: "Staff" status: Status username_and_email: "Username and Email" - yes_ban_user: "Yes Ban User" + yes_ban_user: "כן. חסום משתמש" commenter: "Commenter" configure: apply: Apply @@ -171,7 +171,7 @@ en: required_field: "Required field" save: Save special_characters: "Usernames can contain letters numbers and _ only" - username: Username + username: שם משתמש write_your_username: "Edit your username" your_username: "Your username appears on every comment you post." done: Done @@ -381,8 +381,8 @@ en: closed: Closed empty_result: "No assets match this search. Maybe try widening your search?" filter_streams: "Filter Streams" - newest: Newest - oldest: Oldest + newest: החדש ביותר + oldest: הוותיק ביותר open: Open pubdate: "Publication Date" search: Search @@ -396,17 +396,17 @@ en: one_hour: "1 hour" hours: "{0} hours" days: "{0} days" - cancel: "Cancel" + cancel: "בטל" suspend_user: "Suspend User" email_message_suspend: "Dear {0},\n\nIn accordance with {1}’s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}." title_notify: "Notify the user of their temporary suspension" notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." description_notify: "Suspending this user will temporarily disable their account." write_message: "Write a message" - send: Send + send: שלח reject_username: - username: username - no_cancel: "No cancel" + username: שם משתמש + no_cancel: "אין ביטול" description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}." title_notify: "Notify the user of their temporary suspension" description_notify: "Suspending this user will temporarily disable their account." @@ -415,7 +415,7 @@ en: yes_suspend: "Yes suspend" email_message_reject: "Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please e-mail us if you have any questions or concerns." write_message: "Write a message" - send: Send + send: שלח thank_you: "We value your safety and feedback. A moderator will review your report." user: bio_flags: "flags for this bio" @@ -448,10 +448,10 @@ en: save: "שמור" create: email: 'כתובת דוא"ל' - username: "Username" - password: "Password" - confirm_password: "Confirm Password" - save: "Save" + username: "שם משתמש" + password: "סיסמה" + confirm_password: "אשר סיסמה" + save: "שמור" permitted_domains: title: "Permitted domains" description: "Enter the domains you would like to permit for Talk, e.g. your local, staging and production environments (ex. localhost:3000, staging.domain.com, domain.com)." @@ -459,7 +459,7 @@ en: final: description: "Thanks for installing Talk! We sent an email to verify your email address. While you finish setting up the account, you can start engaging with your readers now." launch: "Launch Talk" - close: "Close this Installer" + close: "סגור את המתקין" admin_sidebar: - view_options: "View Options" - sort_comments: "Sort Comments" + view_options: "הצג אפשרויות" + sort_comments: "מיין תגובות" From 8c8f5d8fee4a8f515519e1df1a4b39ea430d1ab7 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 26 Feb 2018 16:39:28 -0500 Subject: [PATCH 056/116] Fix apostrophes --- plugins/talk-plugin-auth/client/translations.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index f9fd0808f..049f3c3ad 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -224,8 +224,8 @@ he: talk-plugin-auth: login: email_verify_cta: "אנא אמת את כתובת האימייל שלך." - request_new_verify_email: "בקש דוא"ל נוסף" - verify_email: "תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך." + request_new_verify_email: 'בקש דוא"ל נוסף' + verify_email: 'תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך.' verify_email2: "עליך לאמת את חשבונך לפני שתעסוק בקהילה." not_you: "לא אתה?" logged_in_as: "נכנס בתור" From 13e1b288b3345d98c1fcfb42655665e1d5aaed66 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 6 Mar 2018 13:02:03 -0500 Subject: [PATCH 057/116] Add more translations --- locales/he.yml | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index a4f43db30..8b7b6fe88 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -9,13 +9,13 @@ en: banned_user: "משתמש מורשה" cancel: "בטל" note: "Note: {0}" - note_reject_comment: "Banning this user will also place this comment in the Rejected queue." - note_ban_user: "Banning this user will not let them comment, react to, or report comments." + note_reject_comment: "חסימת משתמש זה תציב גם תגובה זו בתור נדחה." + note_ban_user: "חסימת משתמש זה לא תאפשר לו להגיב על תגובות או לדווח עליהן." yes_ban_user: "כן. חסום משתמש" - write_a_message: "Write a message" + write_a_message: "כתוב הודעה" send: "שלח" - notify_ban_headline: "Notify the user of ban" - notify_ban_description: "This will notify the user by email that they have been banned from the community" + notify_ban_headline: "הודע למשתמש על האיסור" + notify_ban_description: "פעולה זו תודיע למשתמש בדוא"ל שהם נאסרו מהקהילה" email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." bio_offensive: "ביו זה פוגע" cancel: "בטל" @@ -32,46 +32,46 @@ en: characters_remaining: "תווים נותרים" comment: anon: "Anonymous" - undo_reject: "Undo" + undo_reject: "בטל" ban_user: "חסום משתמש" comment: "פרסם תגובה" - edited: Edited + edited: ערוך flagged: "מסומנת" view_context: "הצג הקשר" comment_box: post: "Post" cancel: "בטל" reply: "Reply" - comment: "Post a comment" + comment: "פרסם תגובה" name: "שם" - comment_post_notif: "Your comment has been posted." - comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." - comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." - characters_remaining: "characters remaining" - comment_offensive: "This comment is offensive" - comment_singular: Comment - comment_plural: Comments - comment_post_banned_word: "Your comment contains one or more words that are not permitted, so it will not be published. If you think this message is incorrect, please contact our moderation team." - comment_post_notif: "Your comment has been posted." - comment_post_notif_premod: "Thank you for posting. Our moderation team will review your comment shortly." + comment_post_notif: "התגובה שלך פורסמה." + comment_post_notif_premod: "תודה על הפרסום. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב." + comment_post_banned_word: "התגובה שלך מכילה מילה אחת או יותר שאינן מותרות, לכן היא לא תפורסם. אם אתה סבור שהודעה זו שגויה, צור קשר עם צוות הניהול שלנו." + characters_remaining: "תווים נותרים" + comment_offensive: "תגובה זו פוגעת" + comment_singular: תגובה + comment_plural: תגובות + comment_post_banned_word: "התגובה שלך מכילה מילה אחת או יותר שאינן מותרות, לכן היא לא תפורסם. אם אתה סבור שהודעה זו שגויה, צור קשר עם צוות הניהול שלנו." + comment_post_notif: "התגובה שלך כבר פורסמה." + comment_post_notif_premod: "תודה על הפרסום. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב." common: - copy: 'Copy' + copy: 'עותק' error: 'אירעה שגיאה.' reply: 'reply' replies: 'replies' reaction: 'reaction' reactions: 'reactions' - story: 'Story' + story: 'כתבה' flagged_usernames: notify_approved: '{0} approved username {1}' notify_rejected: '{0} rejected username {1}' notify_flagged: '{0} reported username {1}' notify_changed: 'user {0} changed their username to {1}' community: - account_creation_date: "Account Creation Date" - active: Active - admin: Administrator - ads_marketing: "This looks like an ad/marketing" + account_creation_date: "תאריך היצירה של החשבון" + active: פעיל + admin: מנהל + ads_marketing: "זה נראה כמו מודעה / שיווק" are_you_sure: "Are you sure you would like to ban {0}?" ban_user: "Ban User?" banned: Banned @@ -81,7 +81,7 @@ en: flaggedaccounts: "Reported Usernames" flags: Flags impersonating: "Impersonation" - loading: "Loading results" + loading: "טוען תוצאות" moderator: Moderator newsroom_role: "Newsroom Role" no_flagged_accounts: "The Reported Usernames queue is currently empty." @@ -119,7 +119,7 @@ en: configure: Configure copy_and_paste: "Copy and paste code below into your CMS to embed your comment box in your articles" custom_css_url: "Custom CSS URL" - custom_css_url_desc: "URL of a CSS stylesheet that will override default Embed Stream styles. Can be internal or external." + custom_css_url_desc: "כתובת אתר של גיליון סגנונות CSS שתבטל את ברירת המחדל של סגנונות 'הזרמת זרם'. יכול להיות פנימי או חיצוני." days: Days description: "As an admin, you can customize the settings for the comment stream for this story:" domain_list_text: "Enter the domains you would like to permit for Talk e.g. your local staging and production environments (ex. localhost:3000 staging.domain.com domain.com)." @@ -202,7 +202,7 @@ en: if_you_did: "If you did," please_click: "please click here to reset password" embedlink: - copy: "Copy to Clipboard" + copy: "העתק ללוח" error: COMMENT_PARENT_NOT_VISIBLE: "The comment that you're replying to has been removed or doesn't exist." EMAIL_VERIFICATION_TOKEN_INVALID: "Email verification token is invalid." From 282db6847a0101dbe9754a10f4161b7ed3bd9e1e Mon Sep 17 00:00:00 2001 From: Ljuba Rankovic Date: Sat, 15 Dec 2018 09:40:53 +0100 Subject: [PATCH 058/116] locale sr added --- locales/sr.yml | 576 ++++++++++++++++++ .../client/translations.yml | 15 + .../talk-plugin-auth/client/translations.yml | 53 ++ .../client/translations.yml | 2 + .../client/translations.yml | 15 + .../client/translations.yml | 3 + .../client/translations.yml | 14 + .../talk-plugin-like/client/translations.yml | 4 + .../talk-plugin-local-auth/translations.yml | 76 +++ .../talk-plugin-love/client/translations.yml | 4 + .../client/translations.yml | 3 + .../translations.yml | 6 + .../translations.yml | 6 + .../translations.yml | 6 + .../client/translations.yml | 4 + .../client/translations.yml | 4 + .../client/translations.yml | 18 + .../client/translations.json | 4 + .../talk-plugin-profile-data/translations.yml | 37 ++ .../client/translations.yml | 4 + .../client/translations.yml | 3 + .../client/translations.yml | 3 + .../client/translations.yml | 3 + .../client/translations.yml | 3 + .../client/translations.yml | 3 + .../client/translations.yml | 3 + .../client/translations.yml | 18 + .../client/translations.yml | 5 + 28 files changed, 895 insertions(+) create mode 100644 locales/sr.yml diff --git a/locales/sr.yml b/locales/sr.yml new file mode 100644 index 000000000..c04b60413 --- /dev/null +++ b/locales/sr.yml @@ -0,0 +1,576 @@ +sr: + admin_sidebar: + sort_comments: 'Sortiranje komentara' + view_options: 'Opcije pregleda' + already_flagged_username: 'Već ste obilježili ovog korisnika' + bandialog: + are_you_sure: 'Jeste li sigurni da želite da banujete {0}?' + ban_user: 'Banuj korisnika' + banned_user: 'Banovan korisnik' + cancel: 'Otkaži' + email_message_ban: 'Poštovani {0},\n\nneko sa pristupom vašem nalogu je prekršio pravila komentarisanja. Zbog toga smo bili primorani da banujemo vaš nalog i više nećete moći da komentarišete, reagujete i prijavljujete komentare. Ukoliko smatrate da je došlo do greške, molim vas da kontaktirate naš tim' + note: 'Napomena: {0}' + note_ban_user: 'Banovanje ovog korisnika će onemogućiti komentarisanje, prijavljivanje i reagovanje na komentare.' + note_reject_comment: 'Banovanje ovog korisnika će staviti ovaj komentar na listu odbijeno' + notify_ban_description: 'Ovo će obavijestit korisnika putem e-maila da je njegov/njen nalog banovan' + notify_ban_headline: 'Obavijesti korisnika o banovanju' + send: 'Pošalji' + write_a_message: 'Napiši poruku' + yes_ban_user: 'Banuj koriniska' + bio_offensive: 'Ova biografija je neprimjerenog sadržaja.' + cancel: 'Otkaži' + characters_remaining: 'Preostali znakovi' + comment: + anon: 'Anoniman' + ban_user: 'Banuj korisnika' + comment: 'Postavi komentar' + edited: 'Izmijenjeno' + flagged: 'Obilježeno' + undo_reject: 'Prethodni korak' + view_context: 'Vidi kontekst' + comment_box: + cancel: 'Otkaži' + characters_remaining: 'Preostali znakovi' + comment: 'Postavi komentar' + comment_post_banned_word: 'Vaš komentar sadrži jednu ili više riječi koje nisu dozvoljene i neće biti objavljen. Ukoliko smatrate nije tako, molim vas kontaktirajte naš tim moderatora.' + comment_post_notif: 'Vaš komentar je postavljen' + comment_post_notif_premod: 'Hvala na objavi. Naš tim moderatora će ubrzo pregledati vaš komentar' + name: 'Ime' + post: 'Objava' + reply: 'Odgovori' + comment_history_blank: + info: 'Istorija vaših komentara će se prikazati ovdje' + title: 'Niste postavili nijedan komentar' + comment_offensive: 'Neprimjereno' + comment_plural: 'Komentari' + comment_post_banned_word: 'Vaš komentar sadrži jednu ili više riječi koje nisu dozvoljene i neće biti objavljen. Ukoliko smatrate nije tako, molim vas kontaktirajte naš tim moderatora.' + comment_post_notif: 'Vaš komentar je postavljen' + comment_post_notif_premod: 'Hvala na objavi. Naš tim moderatora će ubrzo pregledati vaš komentar' + comment_singular: 'Komentar' + common: + contains_link: 'Sadrži link' + copy: 'Kopiraj na tablu' + copied: 'Kopirano' + notsupported: 'Nije podržano' + error: 'Došlo je do greške' + reaction: 'Reakcija' + reactions: 'Reakcije' + reply: 'Odgovori' + replies: 'Odgovori' + story: 'Priča' + community: + account_creation_date: 'Datum kreiranja naloga' + active: 'Aktivan' + admin: 'Administrator' + ads_marketing: 'Ovo izgleda kao reklama' + all: 'Sve' + are_you_sure: 'Jeste li sigurni da želite da banujete {0}?' + ban_user: 'Banuj korisnika' + banned: 'Banovan' + banned_user: 'Banovan korisnik' + cancel: 'Otkaži' + commenter: 'Komentator' + dont_like_username: 'Ne sviđa mi se korisničko ime' + filter_users: 'Segmentiraj korisnike' + filter_role: 'Uloga' + flaggedaccounts: 'Prijavljena korisnička imena' + flags: 'Prijave' + impersonating: 'Korisnik se lažno predstavlja' + loading: 'Učitavanje rezultata' + moderator: 'Moderator' + newsroom_role: 'Uloga u redakciji' + no_flagged_accounts: 'Nema prijavljenih korisničkih naloga' + no_results: 'Nema rezultata' + offensive: 'Korisničko ime je neprimjereno' + other: 'Drugo' + people: 'Ljudi' + role: 'Izaberi ulogu' + select_status: 'Izaberi status' + spam_ads: 'Reklame' + staff: 'Član redakcije' + status: 'Status rasprave' + suspended: 'Suspendovan' + username_and_email: 'Korisničko ime i e-mail' + yes_ban_user: 'Banuj koriniska' + configure: + access_message: 'Morate biti administrator kako biste pristupili podešavanjima. Zamolite administratora da vam da tu ulogu' + apply: 'Primijeni' + banned_word_text: 'Komentari koji sadrže ove riječi ili fraze (a nijesu osjetljivi na veličinu slova) automatski će biti uklonjeni iz komentara. Unesite riječ i pritisnite Enter ili Tab da dodate. Opciono stavite listu sa odvojenu zarezima' + banned_words_title: 'Lista zabranjenih riječi' + close: 'Zatvori instalaciju' + close_after: 'Zatvori komentare poslije' + close_stream: 'Zatvori raspravu' + close_stream_configuration: 'Ova rasprava je trenutno zatvorena. Otvaranjem ove rasprave novi komentari mogu biti postavljani i prikazivani' + closed_comments_desc: 'Napišite poruku koja će se prikazati kada zatvorite vašu raspravu i kada ne prihvatate dalje komentare.' + closed_comments_label: 'Napiši poruku' + closed_stream_settings: 'Poruka za zatvaranje rasprave' + comment_count_error: 'Unesite validan broj' + comment_count_header: 'Ograniči dužinu komentara' + comment_count_text_post: 'Karakteri' + comment_count_text_pre: 'Komentari će biti ograničeni na' + comment_settings: 'Podešavanja' + comment_stream: 'Rasprava' + comment_stream_will_close: 'Rasprava će se zatvoriti' + community: 'Zajednica' + configure: 'Podesite' + copy_and_paste: 'Kopirajte i zalijepite ispod u CMS' + custom_css_url: 'Prilagođen CSS URL' + custom_css_url_desc: 'URL od CSS-a koji će da prepravi standardni stil ugrađivanja. Može biti interni ili eksterni?' + days: 'Dani' + description: 'Hvala što ste instalirali Talk! Poslali smo vam e-mail kako biste povrdili vašu e-mail adresu. Dok završavate podešavanje naloga, možete početi da komunicirate sa čitaocima.' + disable_commenting_desc: 'Napišite poruku koja će se prikazivati kada su komentari deaktivirani.' + disable_commenting_title: 'Deaktiviraj komentare na čitavom sajtu' + domain_list_text: 'Unesite domene koje biste želeli da dozvolite za Talk npr. vaše lokalno okruženje za postavljanje i proizvodnju (npr. localhost 3000 staging.domain.com domain.com)?' + domain_list_title: 'Dozvoljeni domeni' + edit_comment_timeframe_heading: 'Uredi vremenski okvir komentara' + edit_comment_timeframe_text_post: 'Sekunde za uređenje njihovih komentara' + edit_comment_timeframe_text_pre: 'Komentatori će imati' + edit_info: 'Uredi informacije' + embed_comment_stream: 'Ugradi raspravu' + enable_pre_moderation: 'Omogući moderiranje prije objave' + enable_pre_moderation_text: 'Moderatori moraju odobriti svaki komentar prije nego je objavljen' + enable_premod: 'Omogući moderiranje prije objave' + enable_premod_description: 'Moderatori moraju odobriti svaki komentar prije nego je objavljen' + enable_premod_links: 'Moderiraj komentare sa linkovima prije objave' + enable_premod_links_description: 'Moderatori moraju odobriti svaki komentar sa linkom prije nego je objavljen' + enable_premod_links_text: 'Moderatori moraju odobriti svaki komentar sa linkom prije nego je objavljen' + enable_questionbox: 'Pitaj čitaoce' + enable_questionbox_description: 'Ovo pitanje će se pojaviti na vrhu rasprave. Pitajte čitaoce o određenoj temi u članku ili postavite pitanja za diskusiju itd' + hours: 'Sati' + code_of_conduct_summary: 'Rezime Kodeksa Ponašanja' + code_of_conduct_summary_desc: 'Ova poruka će se pojaviti iznad svake rasprave na vašem sajtu. Kliknite ovdje da saznate više o pisanju dobrog koda.' + include_question_here: 'Napišite pitanje ovdje' + include_text: 'Ubacite tekst ovdje' + moderate: 'Moderiraj' + moderation_settings: 'Podešavanja moderacije' + open: 'Otvori' + open_stream: 'Otvori raspravu' + open_stream_configuration: 'Ovaj stream komentara trenutačno je otvoren. Zatvaranjem ovog komentarskog streama ne mogu se poslati novi komentari, a svi prethodni komentari i dalje će biti prikazani.' + organization_contact_email: 'Email organizacije nije validan' + organization_info_copy: 'Ove informacije se koriste u e-mailovima koje generiše Talk. Ovo povezuje poruke sa vašom organizacijom i pruža mogućnost korisnicima da vas kontaktiraju ako imaju problem sa svojim nalogom.' + organization_info_copy_2: 'Preporučujemo kreiranje generičkog email naloga (organizacija@organizacija.me) za ovu svrhu. Ovo znači da nalog može da traje a da ne izlaže konkretna imena ljudi koja bi bila podložna targetiranju korisnika ukoliko je njihov nalog blokian' + organization_information: 'Informacije o organizaciji' + organization_name: 'Ime organizacije može sadržati brojeve ili slova' + suspect_or_forbidden_words_placeholder: 'Riječ ili fraza' + product_guide_link: 'Priručnik' + report_bug_or_feedback: 'Prijavi grešku ili pošalji povratnu informaciju' + require_email_verification: 'Zahtijeva e-mail verifikaciju' + require_email_verification_text: 'Novi korisnici moraju verifikovati svoj e-mail prije mogućnosti postavljanja komentara' + save: 'Sačuvaj' + save_changes: 'Sačuvaj izmjene' + save_changes_dialog: + cancel: 'Otkaži' + copy: 'Kopiraj na tablu' + discard: 'Izbriši/Odbaci' + save_settings: 'Sačuvaj podešavanja' + unsaved_changes: 'Nesačuvane promjene' + shortcuts: 'Prečice' + sign_out: 'Odjavi se' + stories: 'Priče' + stream_settings: 'Podešavanje rasprave' + suspect_word_text: 'Komentari koji sadrže ove riječi ili fraze (a nijesu osjetljivi na veličinu slova) automatski će biti uklonjeni iz komentara. Unesite riječ i pritisnite Enter ili Tab da dodate. Opciono stavite listu sa odvojenu zarezima' + suspect_word_title: 'Lista sumnjivih riječi' + tech_settings: 'Tehnička podešavanja' + title: 'Niste postavili nijedan komentar' + view_last_version: 'Vidi poslednju verziju' + weeks: 'Nedelje' + wordlist: 'Banovane riječi' + confirm_email: + click_to_confirm: 'Kliknite ispod da potvrdite Vašu e-mail adresu' + confirm: 'Potvrdi' + email_confirmation: 'E-mail potvrda' + continue: 'Nastavi' + createdisplay: + check_the_form: 'Nevažeća forma. Molim vas provjerite polja' + continue: 'Nastavi' + error_create: 'Greška u promjeni korisničkog imena' + fake_comment_body: 'Ovo je primjer komentara. Čitaoci mogu da podijele stavove i komuniciraju sa redakcijom u sekciji komentara' + fake_comment_date: 'Prije minut' + if_you_dont_change_your_name: 'Ako ne promijenite svoje korisničko ime na ovom koraku, vaše ime na Facebook-u će se pojaviti zajedno sa svim Vašim komentarima' + required_field: 'Obavezno polje' + save: 'Sačuvaj' + special_characters: 'Korisničko ime može da sadrži slova, brojeve i' + username: 'Korisničko ime mora sadržati slova, brojeve I _ samo' + write_your_username: 'Izmijeni svoje korisničko ime' + your_username: 'Vaše korisničko ime se pojavljuje u svakom komentaru koji napišete' + done: 'Završeno' + edit_comment: + body_input_label: 'Izmijeni komentar' + edit_window_expired: 'Vrijeme je isteklo i ovaj komentar se više ne može izmijeniti. Zašto ne postavite novi komentar?' + edit_window_expired_close: 'Zatvori' + edit_window_timer_prefix: 'Uredi prozor' + minute: 'Minut' + minutes_plural: 'Minuti' + save_button: 'Sačuvaj izmjene' + second: 'Sekund' + seconds_plural: 'Sekunde' + email: + banned: + body: 'Svaš nalog je banovan. Više vam nije dozvoljeno da komentarišete, prijavljujete i budete dio zajednice' + subject: 'Potvrda e-maila' + confirm: + confirm_email: 'Email adrese se ne podudaraju, probajte ponovo' + has_been_requested: 'Potvrda e-mail adrese je neophodna za ovaj nalog' + if_you_did_not: 'Ukoliko niste ovo zahtijevali, ignorišite ovaj e mail.' + subject: 'Potvrda e-maila' + to_confirm: 'Da aktivirate nalog, posjetite sljedeći link:' + password_change: + body: 'Lozinka za vaš nalog je promjenjena.\n\nUkoliko niste vi zatražili ovu promjenu, molimo kontaktirajte nas {0}.' + subject: '{0} promena lozinke' + password_reset: + if_you_did: 'Ako jeste' + please_click: 'Kliknite ovdje da obnovite šifru' + subject: 'Potvrda e-maila' + we_received_a_request: 'Primili smo vaš zahtjev za obnovu šifre. Ukoliko niste tražili ovu promjenu, ignorišite ovaj mail.' + suspended: + subject: 'Potvrda e-maila' + embed_comments_tab: 'Komentari' + embedlink: + copy: 'Kopiraj na tablu' + copied: 'Kopirano' + error: + ALREADY_EXISTS: 'Resurs već postoji' + AUTHENTICATION: 'Došlo je do greške prilikom potvrde vašeg naloga.' + CANNOT_IGNORE_STAFF: 'Ne možete ignorisati članove redakcije.' + COMMENT_PARENT_NOT_VISIBLE: 'Komentar na koji odgovarate je uklonjen ili ne postoji' + COMMENT_TOO_SHORT: 'Komentar mora sadržati više od jednog znaka. Molimo vas izmijenite vaš komentar i pokušajte ponovo' + COMMENT_TOO_LONG: 'Komentar je predugačak' + COMMENTING_CLOSED: 'Komentarisanje je zatvoreno' + COMMENTING_DISABLED: 'Komentarisanje trenutno nije moguće na sajtu.' + confirm_password: 'Potvrdi šifru' + DELETION_NOT_SCHEDULED: 'Brisanje nije zakazano.' + EDIT_USERNAME_NOT_AUTHORIZED: 'Nemate dozvolu da izmijenite vaše korisiničko ime.' + EDIT_WINDOW_ENDED: 'Ne možete izmijeniti komentar, vrijeme je isteklo' + email: 'Molimo Vas unesite validan e-mail' + EMAIL_ALREADY_VERIFIED: 'E-mail adresa je već potvrđena.' + EMAIL_IN_USE: 'E-mail adresa je već u upotrebi' + email_not_verified: 'E-mail adresa nije potvrđena.' + EMAIL_NOT_VERIFIED: 'E-mail adresa nije potvrđena.' + email_password: 'E-mail i/ili šifra se ne podudaraju' + EMAIL_REQUIRED: 'Obavezna e-mail adresa' + EMAIL_VERIFICATION_TOKEN_INVALID: 'Šifra potvrde maila nije validna' + INCORRECT_PASSWORD: 'Pogrešna šifra' + INVALID_ASSET_URL: 'Istaknuti URL nije validan' + LOGIN_MAXIMUM_EXCEEDED: 'Ukucali ste pogrešnu šifru previše puta. Molimo sačekajte.' + network_error: 'Nemoguće povezivanje sa serverom. Provjerite konekciju i pokušajte ponovo' + NO_SPECIAL_CHARACTERS: 'Korisničko ime može samo sadržati slova, brojeve i _' + NOT_AUTHORIZED: 'Nemate dozvolu da sprovedete akciju' + NOT_FOUND: 'Podatak nije pronađen' + organization_contact_email: 'Email organizacije nije validan' + organization_name: 'Ime organizacije može sadržati brojeve ili slova' + password: 'Šifra mora sadržati minimum 8 karaktera' + PAGE_NOT_AVAILABLE_ROLE: 'Ovu stranicu mogu koristiti samo članovi redakcije. Molimo kontaktirajte administratora ukoliko želite da se priključite timu' + PASSWORD_INCORRECT: 'Pogrešno ste unijeli šifru' + PASSWORD_LENGTH: 'Šifra je prekratka' + PASSWORD_REQUIRED: 'Obavezno unijeti šifru' + PASSWORD_RESET_TOKEN_INVALID: 'Link za resetovanje šifre je nevažeći' + PROFANITY_ERROR: 'Korisničko ime ne može sadržati psovke. Kontaktirajte administratora ukoliko smatrate da je u pitanju greška' + RATE_LIMIT_EXCEEDED: 'Premašeno je ograničenje' + required_field: 'Obavezno polje' + SAME_USERNAME_PROVIDED: 'Morate izabrati drugo korisničko ime' + temporarily_suspended: 'U skladu sa pravilima naše zajednice, vaš nalog je privremeno suspendovan. Molimo vas da se ponovo uključite u razgovor.' + unexpected: 'Došlo je do greške. Izvinite.' + username: 'Korisničko ime mora sadržati isključivo slova, brojeve i _' + USERNAME_IN_USE: 'Korisničko ime je već u upotrebi' + USERNAME_REQUIRED: 'Morate unijeti korisničko ime' + flag_comment: 'Prijavi komentar' + flag_reason: 'Razlog prijave (opciono)' + flag_reasons: + username: + impersonating: 'Korisnik se lažno predstavlja' + nolike: 'Ne dopada mi se korisničko ime' + offensive: 'Korisničko ime je neprimjereno' + other: 'Drugo' + spam: 'Ovo izgleda kao reklama/marketing' + flag_username: 'Prijavi korisničko ime' + flagged_usernames: + notify_approved: '{0} je odobrio korisničko ime {1}' + notify_changed: 'Korisnik {0} je promijenio korisničko ime u {1}' + notify_flagged: '{0} je prijavio korisničko ime {1}' + notify_rejected: '{0} je odbio korisničko ime {1}' + flags: + reasons: + comment: + banned_word: 'Banovana riječ' + comment_noagree: 'Nisam saglasan' + comment_offensive: 'Neprimjereno' + comment_other: 'drugo' + comment_spam: 'spam' + links: 'link' + suspect_word: 'Neprimjerena riječ' + trust: 'karma' + user: + username_impersonating: 'Lažno predstavljanje' + username_nolike: 'ne dopada mi se' + username_offensive: 'Korisničko ime je neprimjereno.' + username_other: 'drugo' + username_spam: 'spam' + framework: + banned_account_body: 'To znači da ne možete reagovati, prijavljivati ili pisati komentare' + banned_account_header: 'Vaš nalog je trenutno banovan' + changed_name: + msg: 'Izmjena vašeg korisničkog imena prolazi provjeru našeg tima moderatora' + comment: 'Postavi komentar' + comment_is_deleted: 'Korisnik je izbrisao nalog' + comment_is_hidden: 'Komentar nije dostupan' + comment_is_ignored: 'Komentar je skriven, jer ste ignorisali korisnika' + comment_is_rejected: 'Odbili ste komentar' + comments: 'Komentari' + configure_stream: 'Podesi' + content_not_available: 'Sadržaj nije dostupan' + edit: 'Izmijeni' + edit_name: + button: 'Podnesi' + error: 'Došlo je do greške' + label: 'Novo korisničko ime' + msg: 'Izmjena vašeg korisničkog imena prolazi provjeru našeg tima moderatora' + my_comments: 'Moji komentari' + my_profile: 'Moj profil' + new_count: 'Vidi još {0} / {1}' + profile: 'Nalog' + show_all_comments: 'Prikaži sve komentare' + show_all_replies: 'Prikaži sve odgovore' + show_more_replies: 'Prikaži još odgovora' + success_bio_update: 'Vaša biografija je izmijenjena' + success_name_update: 'Vaše korisničko ime je izmijenjeno' + success_update_settings: 'Promjene koje ste unijeli su primijenjene na raspravu na ovom članku.' + view_more_comments: 'Vidi još komentara' + view_reply: 'vidi odgovor' + from_settings_page: 'Na profilu možete vidjeti istoriju komentara' + install: + add_organization: + description: 'Hvala što ste instalirali Talk! Poslali smo vam e-mail kako biste povrdili vašu e-mail adresu. Dok završavate podešavanje naloga, možete početi da komunicirate sa čitaocima.' + label: 'Novo korisničko ime' + save: 'Sačuvaj' + create: + confirm_password: 'Potvrdi šifru' + email: 'Molimo Vas unesite validan e-mail' + organization_contact_email: 'Email organizacije nije validan' + password: 'Šifra mora sadržati minimum 8 karaktera' + save: 'Sačuvaj' + username: 'Korisničko ime mora sadržati isključivo slova, brojeve i _' + final: + close: 'Zatvori instalaciju' + description: 'Hvala što ste instalirali Talk! Poslali smo vam e-mail kako biste povrdili vašu e-mail adresu. Dok završavate podešavanje naloga, možete početi da komunicirate sa čitaocima.' + launch: 'Pokreni Talk' + initial: + description: 'Hvala što ste instalirali Talk! Poslali smo vam e-mail kako biste povrdili vašu e-mail adresu. Dok završavate podešavanje naloga, možete početi da komunicirate sa čitaocima.' + submit: 'Počni' + permitted_domains: + description: 'Hvala što ste instalirali Talk! Poslali smo vam e-mail kako biste povrdili vašu e-mail adresu. Dok završavate podešavanje naloga, možete početi da komunicirate sa čitaocima.' + submit: 'Počni' + title: 'Niste postavili nijedan komentar' + like: 'Dopada mi se' + loading_results: 'rezultati se učitavaju' + login: + email_address: 'e-mail adresa' + forgot_password: 'Zaboravili ste šifru?' + go_back: 'Vrati se' + sign_in: 'Prijavi se' + sign_in_button: 'Dugme za prijavu' + sign_in_message: 'Prijavi se kako bi komunikacirao sa zajednicom' + password: 'Šifra mora sadržati minimum 8 karaktera' + reset_password_send_button: 'povrati šifru' + request_passowrd: 'Zahtijevaj novu šifru' + team_sign_in: 'Prijava tima' + marketing: 'Ovo izgleda kao reklama/marketing' + moderate_all_streams: 'Moderiraj komentare na svim pričama' + moderate_this_stream: 'Moderiraju ovu raspravu' + modqueue: + account: 'Prijave naloga' + actions: 'akcije' + all: 'Sve' + all_streams: 'Sve rasprave' + approve: 'Odobri' + approved: 'Odobreno' + ban_user: 'Banuj korisnika' + ban_user_actions: 'Banuj korisničke akcije' + billion: 'Milijardi' + close: 'Zatvori instalaciju' + empty_queue: 'Nema više komentara za moderiranje.' + flagged: 'Obilježeno' + jump_to_queue: 'Preskoči na red' + less_detail: 'Manje detalja' + likes: 'Sviđanja' + million: 'milion' + mod_faster: 'Moderiraj brže uz prečice na tastaturi' + moderate: 'Moderiraj' + more_detail: 'Više detalja' + navigation: 'navigacija' + new: 'novo' + newest_first: 'Prvo najnoviji' + next_comment: 'Idi na sljedeći komentar' + next_queue: 'Preskoči red' + notify_accepted: '{0} je prihvatio komentar "{1}"' + notify_edited: '{0} je izmjenio komentar "{1}"' + notify_flagged: '{0} je označio komentar "{1}"' + notify_rejected: '{0} je odbio komentar "{1}"' + notify_reset: '{0} je resetovao status komentara "{1}"' + oldest_first: 'Prvo najstariji' + premod: 'mod pre-moderacija' + prev_comment: 'idi na prethodni komentar' + reject: 'Odbij' + rejected: 'Odbijen' + reply: 'Odgovori' + reported: 'Prijavljen' + select_stream: 'Odaberi raspravu' + shift_key: '⇧' + shortcuts: 'Prečice' + show_shortcuts: 'Prikaži prečice' + singleview: 'Zen stanje' + sort: 'Sortiraj' + suspend: 'Suspenduj korisnika' + system_withheld: 'Zadržan u sistemu' + thismenu: 'Otvori meni' + thousand: 'hiljada' + toggle_search: 'Otvori pretragu' + try_these: 'Pokušaj ovo' + view_more_shortcuts: 'Vidi dodatne prečice' + my_comment_history: 'Istorija komentara' + name: 'Ime' + no_agree_comment: 'Nisam saglasan sa ovim komentarom' + no_like_bio: 'Ne dopada mi se ova biografija' + no_like_username: 'Ne dopada mi se ovo korisničko ime' + other: 'Drugo' + password_reset: + change_password: 'Promijeni šifru' + change_password_help: 'Unesite novu šifru za prijavu. Vodite računa da je šifra bezbjedna' + confirm_new_password: 'Potvrdite novu šifru' + mail_sent: 'Ukoliko imate registrovan nalog, link za resetovanje šifre je poslat na email' + new_password: 'Nova šifra' + new_password_help: 'Šifra mora sadržati minimum 8 znakova' + set_new_password: 'Promijeni šifru' + permalink: 'Podijeli' + personal_info: 'Ovaj komentar sadrži lične informacije' + post: 'Objava' + profile: 'Nalog' + profile_settings: 'Podešavanja naloga' + reject_username: + description_notify: 'Suspendovanje korisnika će im privremeno onemogućiti nalog' + description_reject: 'Da li želite da privremeno banujete ovog korisnika? Ukoliko to učinite, korisnik će biti suspendovan dok ne izmijeni' + email_message_reject: 'Član zajednice je zatražio provjeru vašeg korisničkog imena. Zbog tog sadržaja je vaše korisničko ime odbijeno. To znači da ne možete komentarisati, označavati i reagovati na komentare dok ne promijenite korisničko ime. Molimo da pošaljete e-mail ako imate komentare ili primjedbe.' + no_cancel: 'Ne poništavaj' + send: 'Pošalji' + suspend_user: 'Suspenduj korisnika' + title_notify: 'Obavijesti korisnika o privremenoj suspenziji' + title_reject: 'Primijetili smo da ste odbili korisničko ime' + username: 'Korisničko ime mora sadržati slova, brojeve I _ samo' + write_message: 'Napiši poruku' + yes_suspend: 'Potvrdi suspenziju' + reject_username_dialog: + cancel: 'Otkaži' + description: 'Hvala što ste instalirali Talk! Poslali smo vam e-mail kako biste povrdili vašu e-mail adresu. Dok završavate podešavanje naloga, možete početi da komunicirate sa čitaocima.' + message: 'Razlog prijave (opciono)' + reason: 'Razlog' + reject_username: 'Odbij korisničko ime' + title: 'Niste postavili nijedan komentar' + reply: 'Odgovori' + report: 'Prijavi' + report_notif: 'Hvala što ste prijavili komentar. Naš tim je obaviješten i provjera će biti izvršena brzo.' + report_notif_remove: 'Vaša prijava je uklonjena' + reported: 'Prijavljen' + settings: + from_settings_page: 'Na profilu možete vidjeti istoriju komentara' + my_comment_history: 'Istorija komentara' + profile: 'Nalog' + profile_settings: 'Podešavanja naloga' + sign_in: 'Prijavi se' + to_access: 'Pristupi nalogu' + user_no_comment: 'Nikada niste napisali komentar. Priključite se raspravi.' + step_1_header: 'Prijavi problem' + step_2_header: 'Pomozite nam da razumijemo' + step_3_header: 'Hvala na informaciji' + stream: + all_comments: 'Svi komentari' + comment_not_found: 'Komentar je uklonjen ili ne postoji' + no_comments: 'Još uvijek nema komentara. Zašto ne napišete nešto?' + no_comments_and_closed: 'Nema komenatara za ovaj članak' + temporarily_suspended: 'U skladu sa pravilima naše zajednice, vaš nalog je privremeno suspendovan. Molimo vas da se ponovo uključite u razgovor.' + streams: + all: 'Sve' + article: 'Priča' + closed: 'Zatvoreno' + empty_result: 'Nema rezultata pretrage. Pokušajte da proširite pretragu.' + filter_streams: 'Filteruj rasprave' + most_recent_stories: 'Najnovije priče' + newest: 'Najnovije' + no_results: 'Nema rezultata' + oldest: 'Najstarije' + open: 'Otvori' + pubdate: 'Datum objave' + search: 'Pretraga' + search_results: 'Rezultati pretrage' + sort_by: 'Sortiraj po' + status: 'Status rasprave' + stream_status: 'Status rasprave' + suspenduser: + cancel: 'Otkaži' + day: '{0} dana' + days: '{0} dana' + description_notify: 'Suspendovanje korisnika će im privremeno onemogućiti nalog' + description_suspend: 'Suspendujete {0}. Ovaj komentar će ići na spisak odbijenih komentare i neće moći da postavlja, odgovara i prijavljuje komentare dok ne istekne suspenzija.' + email_message_suspend: 'Poštovani {0},\n\nu skladu sa {1} pravilima komentarisanja, vaš nalog je trenutno suspendovan. Tokom suspenzije ne možete da komentarišete i imate interakciju sa ostalim komentatorima. Molimo da se vratite raspravi {2}.' + hour: '{0} sat' + hours: '{0} sati' + notify_suspend_until: 'Korisnik {0} je privremeno suspendovan. Suspenzija će se automatski okončati' + one_hour: 'Sat vremena' + select_duration: 'odaberi trajanje suspenzije' + send: 'Pošalji' + suspend_user: 'Suspenduj korisnika' + title_notify: 'Obavijesti korisnika o privremenoj suspenziji' + title_suspend: 'Suspenduj korisnika' + write_message: 'Napiši poruku' + thank_you: 'Cijenimo vašu povratnu reakciju i vašu bezbjedost. Moderator će ukoro pogledati vašu prijavu' + user: + bio_flags: 'Prijave za ovu biografiju.' + user_bio: 'Korisnička biografija' + username_flags: 'Prijave za ovo korisničko ime' + user_detail: + all: 'Sve' + ban: 'Banuj korisnika' + banned: 'Banovan' + email: 'Molimo Vas unesite validan e mail' + id: 'ID' + karma: 'karma' + karma_docs_link: 'https://docs.coralproject.net/talk/trust/#user-karma-score' + learn_more: 'Saznaj više' + member_since: 'Član od' + reject_rate: 'Odbijanja' + reject_username: 'Odbij korisničko ime' + rejected: 'Odbijen' + remove_ban: 'Ukloni ban' + remove_suspension: 'Ukloni suspenziju' + suspend: 'Suspenduj korisnika' + suspended: 'Suspendovan' + total_comments: 'Svi komentari' + unreliable: 'Nepouzdano' + user_history: 'Istorija korisnika' + user_karma_score: 'Karma poeni' + username: 'Korisničko ime mora sadržati isključivo slova, brojeve i _ ' + username_needs_approval: 'Potrebno odobrenje korisničkog imena' + username_rejected: 'Korisničko ime odbijeno' + user_history: + action: 'Akcija' + ban_removed: 'Zabrana uklonjena' + date: 'Datum' + suspended: 'Suspendovan, {0}' + suspension_removed: 'Suspenzija uklonjena' + system: 'Sistem' + taken_by: 'Preduzeo' + user_banned: 'Korisnik banovan' + username_status: 'Korisnik {0}' + user_impersonating: 'Korisnik se lažno predstavlja' + user_no_comment: 'Nikada niste napisali komentar. Priključite se raspravi.' + username_offensive: 'Korisničko ime je neprimjereno.' + validators: + confirm_email: 'Email adrese se ne podudaraju, probajte ponovo' + confirm_password: 'Potvrdi šifru' + required: 'polje je obavezno' + verify_email: 'Unesite validan e mail' + verify_organization_name: 'Ime organizacije mora sadržati samo slova ili brojeve' + verify_password: 'Šifra mora imati makar 8 znakova' + verify_username: 'Korisničko ime može sadržati isključivo slova, brojeve i _' + view_conversation: 'Vidi razgovor' + your_account_has_been_banned: 'Vaš nalog je banovan' + your_account_has_been_suspended: 'Vaš nalog je privremeno suspendovan' + your_username_has_been_rejected: 'Vaš nalog je suspendovan jer je korisničko ime označeno kao neprikladno. Da povratite nalog, unesite novo korisničko ime' diff --git a/plugins/talk-plugin-akismet/client/translations.yml b/plugins/talk-plugin-akismet/client/translations.yml index 3dd13731b..0e7f67267 100644 --- a/plugins/talk-plugin-akismet/client/translations.yml +++ b/plugins/talk-plugin-akismet/client/translations.yml @@ -42,6 +42,21 @@ en: reasons: comment: spam_comment: "Detected Spam" +sr: + error: + COMMENT_IS_SPAM: | + Sadržaj ovog komentara liči na spam. Možete + urediti komentar, ili ga svejedno poslati moderatoru na odobrenje. + talk-plugin-akismet: + spam: "Spam" + spam_comment: "Spam" + detected: "Detected by Akismet" + still_spam: | + Hvala Vam. Naš tim moderatora će uskoro prgeldati vš komentar. + flags: + reasons: + comment: + spam_comment: "Detected Spam" es: error: COMMENT_IS_SPAM: | diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index fe6324e21..5f65276c9 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -152,6 +152,59 @@ en: cancel: "Cancel" edit: "Edit" changed_password_msg: "Your password has been successfully changed" +sr: + talk-plugin-auth: + login: + email_verify_cta: "Molimo potvrdite vašu e-mail adresu." + request_new_verify_email: "Zatraži novu email poruku" + verify_email: "Hvala Vam što ste napravili nalog! Poslali smo e-mail poruku za potvrdu naloga na adresu koju ste uneli." + verify_email2: "Morate potvrditi svoj nalog pre nego što se uključite u raspravu." + not_you: "Niste Vi?" + logged_in_as: "Prijavljeni ste kao" + logout: "Odjava" + sign_in: "Prijava" + sign_in_to_join: "Prijavite se da biste se uključili u raspravu" + or: "Ili" + email: "E-mail adresa" + password: "Lozinka" + password_error: "Lozinka mora sadržati najmanje 8 karaktera." + forgot_your_pass: "Zaboravili ste lozinku?" + need_an_account: "Nemate nalog?" + register: "Registrujte se" + sign_up: "Prijavite se" + confirm_password: "Potvrdite lozinku" + username: "Korisničko ime" + already_have_an_account: "Već imate nalog?" + recover_password: "Oporavite lozinku" + email_in_use: "E-mail adresa je već u upotrebi" + email_or_username_in_use: "E-mail adresa ili korisničko ime su već u upotrebi" + required_field: "Ovo polje je obavezno" + passwords_dont_match: "Lozinke se ne poklapaju." + special_characters: "Korisničko ime može sadržati isključivo slova, brojeve ili _" + sign_in_to_comment: "Prijava za komentarisanje" + check_the_form: "Neispravan formular. Molimo, proverite polja" + set_username_dialog: + check_the_form: "Neispravan formular. Molimo, proverite polja" + continue: "Nastavite sa istim Facebook imenom" + error_create: "Greška pri promeni korisničkog imena" + fake_comment_body: "Ovo je jedan ogledni komentar. Čitaoci mogu da dele svoje stavove i mišljenja sa uredništvom u sekciji sa komentarima." + fake_comment_date: "Pre jedan minut" + if_you_dont_change_your_name: "Ukoliko ne promenite korisničko ime u ovom koraku vaše Facebook ime će se pojavljivati uz vaše komentare." + required_field: "Obavezno polje" + save: Snimi + special_characters: "Korisničko ime može sadržati isključivo slova, brojeve ili _" + username: Korisničko ime + write_your_username: "Uredi svoje korisničko ime" + your_username: "Vaše korisničko ime prikazuje se uz svaki komentar koji pošaljete." + change_password: + change_password: "Promeni lozinku" + passwords_dont_match: "Lozinke se ne poklapaju" + required_field: "Polje je obavezno" + forgot_password: "Zaboravili ste lozinku?" + save: "Snimi" + cancel: "Poništi" + edit: "Uredi" + changed_password_msg: "Vaša lozinka je uspešno promenjena" de: talk-plugin-auth: login: diff --git a/plugins/talk-plugin-author-menu/client/translations.yml b/plugins/talk-plugin-author-menu/client/translations.yml index 4335b17e1..88e30608e 100644 --- a/plugins/talk-plugin-author-menu/client/translations.yml +++ b/plugins/talk-plugin-author-menu/client/translations.yml @@ -4,6 +4,8 @@ da: talk-plugin-author-menu: en: talk-plugin-author-menu: +sr: + talk-plugin-author-menu: de: talk-plugin-author-menu: es: diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index e3d600526..1a47379b3 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -43,6 +43,21 @@ en: are_you_sure: Are you sure you would like to feature this comment? cancel: Cancel yes_feature_comment: Yes, feature comment +en: + talk-plugin-featured-comments: + un_feature: Skini sa izdvojenih + feature: Označi kao izdvojen + featured: Izdvojen + featured_comments: Izdvojeni komentari + go_to_conversation: Idi na raspravu + tooltip_description: Komentari izdvojeni od strane redakcije kao posebno vredni pažnje + notify_self_featured: 'Komentar od {0} je sada izdvojen i odobren' + notify_featured: '{0} je izdvojio i odobrio komentar "{1}"' + notify_unfeatured: '{0} je skinuo sa izdvojenih komentara "{1}"' + feature_comment: Izdvoj komentar? + are_you_sure: Sigurni ste da želite da izdvojite ovaj komentar? + cancel: Poništi + yes_feature_comment: Da, izdvoj komentar de: talk-plugin-featured-comments: un_feature: Empfehlung aufheben diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index 163cb8a5d..44464b824 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-flag-details: flags: Reports +en: + talk-plugin-flag-details: + flags: Reporteri de: talk-plugin-flag-details: flags: Markierungen diff --git a/plugins/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-ignore-user/client/translations.yml index 409cf2762..379aee494 100644 --- a/plugins/talk-plugin-ignore-user/client/translations.yml +++ b/plugins/talk-plugin-ignore-user/client/translations.yml @@ -38,6 +38,20 @@ en: notify_success: | You are now ignoring {0}. You can undo this action from My Profile. confirmation_title: Ignore {0}? +sr: + talk-plugin-ignore-user: + blank_info: Trenutno ne ignorišete ni jednog korisnika + section_title: Ignorisani korisnici + section_info: Pošto ste ignorisali sledeće komentatore, njihovi komentari su sakriveni. + stop_ignoring: Prestani sa ignorisanjem + ignore_user: Ignoriši korisnika + cancel: Poništi + confirmation: | + Kada ignorišete nekog korisnika, svi njegovi komentari na sajtu biće skriveni od vas. Ovo podešavanje možete + uvek isključiti u prikazu Moj profil. + notify_success: | + Sada ignorišete {0}. Možete poništiti ovu radnju iz prikaza Moj profil. + confirmation_title: Ignoriši {0}? de: talk-plugin-ignore-user: blank_info: Sie ignorieren derzeit keine Nutzer diff --git a/plugins/talk-plugin-like/client/translations.yml b/plugins/talk-plugin-like/client/translations.yml index f122aa024..5df0e6fc7 100644 --- a/plugins/talk-plugin-like/client/translations.yml +++ b/plugins/talk-plugin-like/client/translations.yml @@ -10,6 +10,10 @@ en: talk-plugin-like: like: Like liked: Liked +sr: + talk-plugin-like: + like: Sviđa mi se + liked: Sviđa vam se de: talk-plugin-like: like: Gefällt mir diff --git a/plugins/talk-plugin-local-auth/translations.yml b/plugins/talk-plugin-local-auth/translations.yml index a13b005b5..18b2a0b44 100644 --- a/plugins/talk-plugin-local-auth/translations.yml +++ b/plugins/talk-plugin-local-auth/translations.yml @@ -150,6 +150,82 @@ en: description_2: "You can change your account settings by visiting" path: "My Profile > Settings" alert: "Email Added!" +sr: + email: + email_change_original: + subject: Promena e-maila + body: Vaša e-mail adresa je promenjena iz {0} u {1}. Ukoliko niste zatražili ovu izmenu, molimo kontaktirajte {2}. + error: + NO_LOCAL_PROFILE: Nijedna postojeća e-mail adresa nije povezana sa ovim nalogom. + LOCAL_PROFILE: E-mail adresa je već povezana sa ovim nalogom. + INCORRECT_PASSWORD: Lozinka koju ste uneli je neispravna. + talk-plugin-local-auth: + change_password: + change_password: "Promenite lozinku" + passwords_dont_match: "Lozinke se ne poklapaju" + required_field: "Ovo polje je obavezno" + forgot_password: "Zaboravili ste lozinku?" + old_password: "Stara lozinka" + new_password: "Nova lozinka" + confirm_new_password: "Potvrdite novu lozinku" + save: "Snimi" + cancel: "Poništi" + edit: "Uredi" + changed_password_msg: "Promena lozinke - Vša lozinka je uspešno promenjena" + forgot_password_sent: "Zaboravljena lozinka - poslali smo Vam e-mail za povraćaj lozinke" + change_username: + change_username_note: "Korisničko ime može biti promenjeno jednom u 14 dana." + is_not_eligible: "Trenutno ne možete promeniti korisničko ime." + save: "Snimi" + edit_profile: "Uredi profil" + cancel: "Poništi" + confirm_username_change: "Potvrdi promenu korisničkog imena" + description: "Pokušavate da promenite svoje korisničko ime. Novo korisničko ime će se pojaviti na svim vašim prethodnim i novim komentarima." + old_username: "Staro korisničko ime" + new_username: "Novo korisničko ime" + re_enter: "Ponovo unesite korisničko ime" + bottom_note: "Napomena: Nećete moći ponovo da menjate svoje korisničko ime narednih 14 dana" + confirm_changes: "Potvrdi izmene" + username_does_not_match: "Korisničko ime ne postoji" + cant_be_equal: "Vaše novo {0} mora se razlikovati od prethodnog" + changed_username_success_msg: "Korisničko ime je promenjeno - Vaše korisničko ime je uspešno promenjeno. Nećete moći ponovo da ga menjate narednih 14 dana." + change_username_attempt: "Koriničko ime ne može biti promenjeno. Korisničko ime može biti promenjeno samo jednom u 14 dana." + change_email: + confirm_email_change: "Potvrdi promenu e-maila" + description: "Pokušavate da promenite e-mail adresu. Vaša nova e-mail adresa biće korišćena za prijavljivanje i primanje obaveštenja o nalogu." + old_email: "Stara e-mail adresa" + new_email: "Nova e-mail adresa" + enter_password: "Unesite lozinku" + incorrect_password: "Pogrešna lozinka" + confirm_change: "Potvrdi izmenu" + cancel: "Poništi" + change_email_msg: "E-mail adresa promenjena. Ova e-mail adresa biće korišćena za prijavljivanje i primanje obaveštenja." + add_email: + add_email_address: "Dodaj e-mail adresu" + enter_email_address: "Unesi e-mail adresu:" + invalid_email_address: "Pogrešna e-mail adresa" + confirm_email_address: "Potvrdi e-mail adresu:" + email_does_not_match: "Email adrese se ne poklapaju" + insert_password: "Unesi lozinku:" + confirm_password: "Potvrdi lozinku:" + required_field: "Ovo polje je obavezno" + done: "Gotovo" + content: + title: "Dodaj e-mail adresu" + description: "For your added security, we require users to add an email address to their accounts. Your email address will be used to:" + item_1: "Receive updates regarding any changes to your account (email address, username, password, etc.)" + item_2: "Omogućuje vam da preuzmete (download) svoje komentare." + item_3: "Send comment notifications that you have chosen to receive." + verify: + title: "Potvrdite e-mail adresu" + description: "Poslali smo e-mail na {0} da potvrdite ssvoj nalog. Morate potvrditi e-mail adresu da bi se mogla koristiti za potvrde promene naloga i obaveštenja." + added: + title: "Email adresa dodata" + description: "Vaša e-mail adresa je dodata u nalog." + subtitle: "Želite da promenite e-mail adresu?" + description_2: "Možete urediti svoj nalog ovde:" + path: "Moj profil > Podešavanja" + alert: "E-mail dodat" pt_BR: email: email_change_original: diff --git a/plugins/talk-plugin-love/client/translations.yml b/plugins/talk-plugin-love/client/translations.yml index c42216844..57d0000e4 100644 --- a/plugins/talk-plugin-love/client/translations.yml +++ b/plugins/talk-plugin-love/client/translations.yml @@ -10,6 +10,10 @@ en: talk-plugin-love: love: Love loved: Loved +sr: + talk-plugin-love: + love: Volim ovo + loved: Volite ovo de: talk-plugin-love: love: Ich liebe es diff --git a/plugins/talk-plugin-member-since/client/translations.yml b/plugins/talk-plugin-member-since/client/translations.yml index 5f5fb4004..fdb76345d 100644 --- a/plugins/talk-plugin-member-since/client/translations.yml +++ b/plugins/talk-plugin-member-since/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-member-since: member_since: "Member Since" +sr: + talk-plugin-member-since: + member_since: "Član od" de: talk-plugin-member-since: member_since: "Mitglied seit" diff --git a/plugins/talk-plugin-notifications-category-featured/translations.yml b/plugins/talk-plugin-notifications-category-featured/translations.yml index f7fa91b6a..db065415d 100644 --- a/plugins/talk-plugin-notifications-category-featured/translations.yml +++ b/plugins/talk-plugin-notifications-category-featured/translations.yml @@ -11,6 +11,12 @@ en: featured: subject: "One of your comments was featured on {0}" body: "{0}\nA member of our team has selected this comment to be featured for other readers: {1}" +sr: + talk-plugin-notifications: + categories: + featured: + subject: "Jedan Vaš komentar je izdvojen na {0}" + body: "{0}\nČlan našeg tima je izabrao ovaj komentar da bude izdvojen za druge čitaoce: {1}" es: talk-plugin-notifications: categories: diff --git a/plugins/talk-plugin-notifications-category-reply/translations.yml b/plugins/talk-plugin-notifications-category-reply/translations.yml index a084818c6..887964e5d 100644 --- a/plugins/talk-plugin-notifications-category-reply/translations.yml +++ b/plugins/talk-plugin-notifications-category-reply/translations.yml @@ -11,6 +11,12 @@ en: reply: subject: "Someone has replied to your comment on {0}" body: "{0}\n{1} replied to your comment: {2}" +sr: + talk-plugin-notifications: + categories: + reply: + subject: "Neko je odgovorio na Vaš komentar na {0}" + body: "{0}\n{1} je odgovorio na Vaš komentar: {2}" es: talk-plugin-notifications: categories: diff --git a/plugins/talk-plugin-notifications-category-staff/translations.yml b/plugins/talk-plugin-notifications-category-staff/translations.yml index 24fe7d9ea..21b68154b 100644 --- a/plugins/talk-plugin-notifications-category-staff/translations.yml +++ b/plugins/talk-plugin-notifications-category-staff/translations.yml @@ -11,6 +11,12 @@ en: staff: subject: "Someone at {0} has replied to your comment" body: "{0}\n{1} works for {2} and has replied to your comment: {3}" +sr: + talk-plugin-notifications: + categories: + staff: + subject: "Neko je na {0} odgovorio na Vaš komentar" + body: "{0}\n{1} radi za {2} i odogovorio je na Vaš komentar: {3}" es: talk-plugin-notifications: categories: diff --git a/plugins/talk-plugin-notifications-digest-daily/client/translations.yml b/plugins/talk-plugin-notifications-digest-daily/client/translations.yml index f71c3364b..a1da3df29 100644 --- a/plugins/talk-plugin-notifications-digest-daily/client/translations.yml +++ b/plugins/talk-plugin-notifications-digest-daily/client/translations.yml @@ -6,6 +6,10 @@ en: talk-plugin-notifications: digest_enum: DAILY: In a daily digest +sr: + talk-plugin-notifications: + digest_enum: + DAILY: U dnevnom izveštaju es: talk-plugin-notifications: digest_enum: diff --git a/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml b/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml index cb82b6253..d401ddb49 100644 --- a/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml +++ b/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml @@ -6,6 +6,10 @@ en: talk-plugin-notifications: digest_enum: HOURLY: In an hourly digest +sr: + talk-plugin-notifications: + digest_enum: + HOURLY: U izveštaju na svakih sat vremena es: talk-plugin-notifications: digest_enum: diff --git a/plugins/talk-plugin-notifications/client/translations.yml b/plugins/talk-plugin-notifications/client/translations.yml index f1967feca..4b1aedf55 100644 --- a/plugins/talk-plugin-notifications/client/translations.yml +++ b/plugins/talk-plugin-notifications/client/translations.yml @@ -34,6 +34,24 @@ en: digest_option: Send notifications digest_enum: NONE: Immediately +sr: + talk-plugin-notifications: + settings_title: Obaveštenja + settings_subtitle: Primaj obaveštenja kada + turn_off_all: Ne želim da primam obaveštenja + banner_info: + title: Neophodna je potvrda e-mail adrese + text: Da biste primali e-mail obaveštenja morate potvrditi svoju e-mail adresu. + verify_now: Potvrdite svoj email + banner_success: + title: E-mail za potvrdu poslat + text: E-mail koji sadrži link za potvrdu je poslat na {0} . + banner_error: + title: Greška + text: Došlo je do greške pri slanju e-maila za potvrdu. Molimo pokušajte kasnije. + digest_option: Pošalji obaveštenja + digest_enum: + NONE: Odmah es: talk-plugin-notifications: settings_title: Notificaciones diff --git a/plugins/talk-plugin-offtopic/client/translations.json b/plugins/talk-plugin-offtopic/client/translations.json index c923c7c17..e1400833a 100644 --- a/plugins/talk-plugin-offtopic/client/translations.json +++ b/plugins/talk-plugin-offtopic/client/translations.json @@ -11,6 +11,10 @@ "off_topic": "Off Topic", "hide_off_topic": "Hide Off-Topic Comments" }, + "sr": { + "off_topic": "Van teme", + "hide_off_topic": "Sakri komentare van teme" + }, "de": { "off_topic": "Off-Topic", "hide_off_topic": "Off-Topic-Kommentare verbergen" diff --git a/plugins/talk-plugin-profile-data/translations.yml b/plugins/talk-plugin-profile-data/translations.yml index d2f017f72..95aa11b80 100644 --- a/plugins/talk-plugin-profile-data/translations.yml +++ b/plugins/talk-plugin-profile-data/translations.yml @@ -73,6 +73,43 @@ en: body: "You have cancelled your account deletion request for {0}. Your account is now reactivated." error: DOWNLOAD_TOKEN_INVALID: "Your download link is not valid." +sr: + download_landing: + download_your_account: "Preuzmi sve svoje komentare?" + download_details: "Svi vaši komentari biće preuzeti u .zip fajlu. Po raspakivanju kolekcije videćete .csv fajl sa vrednostima razdvojenim zarezima, i tkav fajl možete lako uvesti u svoj omiljeni spreadsheet program (Excel...)." + all_information_included: "Za svaki vaš komentar uključene su sledeće informacije:" + information_included: + date: "Kada ste komentar napisali" + url: "Permalink URL za komentar" + body: "Tekst komentara" + asset_url: "URL teksta/priče gde se komentar pojavljuje" + confirm: "Preuzmi kolekciju svojih komentara" + email: + download: + subject: "Vaši komnetari su spremni a preuzimanje sa {0}" + download_link_ready: "Kliknite ovde da preuzmete vaše komentare sa {0} od {1}:" + download_archive: "Preuzmi arhivu" + delete: + subject: "Vaš nalog za {0} je određen za brisanje" + body: | + Primili smo zahtev za brisanje vašeg naloga. Vaš nalog je određen za brisanje na {1}. + + Posle tog vremena svi vaši komentari biće uklonjeni sa sajta, svi vaši komnetari biće uklonjeni iz baze podataka, a vaše korisničko ime i e-mail uklonjeni sa našeg sistema. + + Ukoliko se predomislite možete se prijaviti na svoj nalog i poništiti zahtev pre predviđenog vremena za brisanje. + deleted: + subject: "Vaš nalog za {0} je obrisan" + body: | + Vaš nalog za {0} je sada obrisan. Žao nam je što idete! + + Ukoliko budete želeli da se ponovo uključite u rspravu u budućnosti, možete se prijaviti za novi nalog. + + If you'd like to give us feedback on why you left and what we can do to make the commenting experience better, please email us at {1}. + cancelDelete: + subject: "Zahtev za brisanje vašeg naloga {0} je otkazan" + body: "Poništili ste zahtev za brisanje naloga na {0}. Vaš nalog je reaktiviran." + error: + DOWNLOAD_TOKEN_INVALID: "Vaš link za preuzimanje nije validan." es: download_landing: download_your_account: "Descargue su historial de comentarios" diff --git a/plugins/talk-plugin-respect/client/translations.yml b/plugins/talk-plugin-respect/client/translations.yml index 9ea296491..92f3fdef9 100644 --- a/plugins/talk-plugin-respect/client/translations.yml +++ b/plugins/talk-plugin-respect/client/translations.yml @@ -10,6 +10,10 @@ en: talk-plugin-respect: respect: Respect respected: Respected +sr: + talk-plugin-respect: + respect: Respekt + respected: Respektovan de: talk-plugin-respect: respect: Respekt diff --git a/plugins/talk-plugin-sort-most-liked/client/translations.yml b/plugins/talk-plugin-sort-most-liked/client/translations.yml index 710519f50..06c4c4426 100644 --- a/plugins/talk-plugin-sort-most-liked/client/translations.yml +++ b/plugins/talk-plugin-sort-most-liked/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-sort-most-liked: label: Most liked first +sr: + talk-plugin-sort-most-liked: + label: Prvo sa najviše sviđanja de: talk-plugin-sort-most-liked: label: Beliebteste zuerst diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index f9bf60d18..e89833af3 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-sort-most-loved: label: Most loved first +sr: + talk-plugin-sort-most-loved: + label: Prvo najvoljeniji de: talk-plugin-sort-most-loved: label: Häufigste "Ich liebe es" zuerst diff --git a/plugins/talk-plugin-sort-most-replied/client/translations.yml b/plugins/talk-plugin-sort-most-replied/client/translations.yml index 5778ee3ea..c59227f3a 100644 --- a/plugins/talk-plugin-sort-most-replied/client/translations.yml +++ b/plugins/talk-plugin-sort-most-replied/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-sort-most-replied: label: Most replied first +sr: + talk-plugin-sort-most-replied: + label: Prvo sa najviše odgovora de: talk-plugin-sort-most-replied: label: Häufigste Antworten zuerst diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index 50a87b9db..dfba58581 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-sort-most-respected: label: Most respected first +sr: + talk-plugin-sort-most-respected: + label: Prvo naj-"respekovaniji" de: talk-plugin-sort-most-respected: label: Häufigste "Respektiert" zuerst diff --git a/plugins/talk-plugin-sort-newest/client/translations.yml b/plugins/talk-plugin-sort-newest/client/translations.yml index 63bdb024d..ef32d11d3 100644 --- a/plugins/talk-plugin-sort-newest/client/translations.yml +++ b/plugins/talk-plugin-sort-newest/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-sort-newest: label: Newest first +sr: + talk-plugin-sort-newest: + label: Prvo najnoviji de: talk-plugin-sort-newest: label: Neueste zuerst diff --git a/plugins/talk-plugin-sort-oldest/client/translations.yml b/plugins/talk-plugin-sort-oldest/client/translations.yml index 59a97c9d8..b3192fefd 100644 --- a/plugins/talk-plugin-sort-oldest/client/translations.yml +++ b/plugins/talk-plugin-sort-oldest/client/translations.yml @@ -7,6 +7,9 @@ da: en: talk-plugin-sort-oldest: label: Oldest first +sr: + talk-plugin-sort-oldest: + label: Prvo najstariji de: talk-plugin-sort-oldest: label: Älteste zuerst diff --git a/plugins/talk-plugin-toxic-comments/client/translations.yml b/plugins/talk-plugin-toxic-comments/client/translations.yml index 4151b6d7c..9a06be063 100644 --- a/plugins/talk-plugin-toxic-comments/client/translations.yml +++ b/plugins/talk-plugin-toxic-comments/client/translations.yml @@ -50,6 +50,24 @@ en: reasons: comment: toxic_comment: "Highly likely to be Toxic" +sr: + error: + COMMENT_IS_TOXIC: | + Da li ste sigurni? Jezik u ovom komentaru može narušavati naša pravila diskusije. + Pregledajte komentar, ili ga svejdno pošaljite moderatoru na odobrenje. + talk-plugin-toxic-comments: + unlikely: "Malo verovatno" + highly_likely: "Vrlo verovatno" + possibly: "Moguće" + likely: "Verovatno" + toxic_comment: "Toksičan komentar" + still_toxic: | + Ovako preuređen komentar još uvek može narušavati naša pravila diskusije. + Naš moderatorski tim će uskro pregledati vaš komentar. + flags: + reasons: + comment: + toxic_comment: "Vrlo verovatno 'toksičan'" de: error: COMMENT_IS_TOXIC: | diff --git a/plugins/talk-plugin-viewing-options/client/translations.yml b/plugins/talk-plugin-viewing-options/client/translations.yml index 903033af8..17ed6a13e 100644 --- a/plugins/talk-plugin-viewing-options/client/translations.yml +++ b/plugins/talk-plugin-viewing-options/client/translations.yml @@ -13,6 +13,11 @@ en: viewing_options: "Viewing Options" sort: Sorting filter: Filtering +sr: + talk-plugin-viewing-options: + viewing_options: "Opcije pregleda" + sort: Sortiranje + filter: Filterisanje de: talk-plugin-viewing-options: viewing_options: "Ansichtsoptionen" From 79d1f059c2e0d815c510f3592d05cb4e11385a93 Mon Sep 17 00:00:00 2001 From: Ljuba Rankovic Date: Sat, 22 Dec 2018 16:34:16 +0100 Subject: [PATCH 059/116] fixes --- .../client/translations.yml | 2 +- .../client/translations.yml | 2 +- .../client/translations.yml | 51 +++++++++++++++++++ .../client/translations.yml | 2 +- .../client/translations.yml | 2 +- 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/plugins/talk-plugin-featured-comments/client/translations.yml b/plugins/talk-plugin-featured-comments/client/translations.yml index 1a47379b3..bfc953833 100644 --- a/plugins/talk-plugin-featured-comments/client/translations.yml +++ b/plugins/talk-plugin-featured-comments/client/translations.yml @@ -43,7 +43,7 @@ en: are_you_sure: Are you sure you would like to feature this comment? cancel: Cancel yes_feature_comment: Yes, feature comment -en: +sr: talk-plugin-featured-comments: un_feature: Skini sa izdvojenih feature: Označi kao izdvojen diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index 44464b824..ad83e1b37 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -7,7 +7,7 @@ da: en: talk-plugin-flag-details: flags: Reports -en: +sr: talk-plugin-flag-details: flags: Reporteri de: diff --git a/plugins/talk-plugin-profile-data/client/translations.yml b/plugins/talk-plugin-profile-data/client/translations.yml index e7ebf49cd..0fd6fcf31 100644 --- a/plugins/talk-plugin-profile-data/client/translations.yml +++ b/plugins/talk-plugin-profile-data/client/translations.yml @@ -100,6 +100,57 @@ en: subtitle: "Are you sure you want to delete your account?" description: "To confirm you would like to delete your account please type in the following phrase into the text box below:" type_to_confirm: "Type phrase below to confirm" +sr: + download_request: + section_title: "Download My Comment History" + you_will_get_a_copy: "You will receive an email with a link to download your comment history. You can make" + download_rate: "one download request every {0} days" + most_recent_request: "Your most recent request" + request: "Request Comment History" + rate_limit: "You can submit another Comment History request in {0}" + hours: "{0} hours" + days: "{0} days" + hour: "{0} hour" + day: "{0} day" + download_preparing: "Account Download Preparing - Check your email shortly for a download link" + delete_request: + account_deletion_cancelled: 'Account Deletion Request Cancelled - Your request to delete your account has been cancelled.' + account_deletion_requested: 'Account Deletion Requested' + received_on: "A request to delete your account was received on " + cancel_request_description: "If you would like to reactivate your account, you may cancel your request to delete your account below" + before: "before" + cancel_account_deletion_request: "Cancel Account Deletion Request" + delete_my_account: "Delete My Account" + delete_my_account_description: "Deleting your account will permanently erase your profile and remove all your comments from this site." + already_submitted_request_description: "You have already submitted a request to delete your account. Your account will be deleted after {0}. You may cancel the request until that time" + your_request_submitted_description: "Your request has been submitted and confirmation has been sent to the email address associated with your account." + your_account_deletion_scheduled: "Your account is scheduled to be deleted after:" + changed_your_mind: "Changed your mind?" + simply_go_to: "Simply go to your account again before this time and click" + tell_us_why: "Tell us why" + feedback_copy: "We would like to know why you chose to delete your account. Send us feedback on our comment system by emailing" + done: "Done" + cancel: "Cancel" + proceed: "Proceed" + input_is_not_correct: "The input is not correct" + step_0: + you_are_attempting: "You are attempting to delete your account. This means:" + item_1: "All of your comments are removed from this site" + item_2: "All of your comments are deleted from our database" + item_3: "Your username and email address are removed from our system" + step_1: + subtitle: "When will my account be deleted?" + description: "Your account will be deleted {0} hours after your request has been submitted." + subtitle_2: "Can I still write comments until my account is deleted?" + description_2: "Yes, you can still comment, reply, and react to comments until the {0} hours expires." + step_2: + description: "Before your account is deleted, we recommend you download your comment history for your records. After your account is deleted, you will be unable to request your comment history." + to_download: "To download your comment history go to:" + path: "My Profile > Download My Comment History" + step_3: + subtitle: "Are you sure you want to delete your account?" + description: "To confirm you would like to delete your account please type in the following phrase into the text box below:" + type_to_confirm: "Type phrase below to confirm" es: download_request: section_title: "Descargar el historial de mis comentarios" diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index dfba58581..b60d9c54c 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -9,7 +9,7 @@ en: label: Most respected first sr: talk-plugin-sort-most-respected: - label: Prvo naj-"respekovaniji" + label: Prvo naj-respekovaniji de: talk-plugin-sort-most-respected: label: Häufigste "Respektiert" zuerst diff --git a/plugins/talk-plugin-toxic-comments/client/translations.yml b/plugins/talk-plugin-toxic-comments/client/translations.yml index 9a06be063..cb1d956ab 100644 --- a/plugins/talk-plugin-toxic-comments/client/translations.yml +++ b/plugins/talk-plugin-toxic-comments/client/translations.yml @@ -67,7 +67,7 @@ sr: flags: reasons: comment: - toxic_comment: "Vrlo verovatno 'toksičan'" + toxic_comment: "Vrlo verovatno toksičan" de: error: COMMENT_IS_TOXIC: | From ed953b5e7ec69fd2723e3fc88f018153ad9103be Mon Sep 17 00:00:00 2001 From: Ljuba Rankovic Date: Mon, 24 Dec 2018 15:41:05 +0100 Subject: [PATCH 060/116] Change translation --- plugins/talk-plugin-sort-most-respected/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index b60d9c54c..6057102dc 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -9,7 +9,7 @@ en: label: Most respected first sr: talk-plugin-sort-most-respected: - label: Prvo naj-respekovaniji + label: Prvo najpopularniji de: talk-plugin-sort-most-respected: label: Häufigste "Respektiert" zuerst From 2c3589cdaca77f2b91463b2b52972ea4f8cb4fbb Mon Sep 17 00:00:00 2001 From: immber Date: Fri, 4 Jan 2019 16:49:16 -0800 Subject: [PATCH 061/116] added cert to auth section --- docs/source/integrating/authentication.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/integrating/authentication.md b/docs/source/integrating/authentication.md index f834f3e53..981ceb156 100644 --- a/docs/source/integrating/authentication.md +++ b/docs/source/integrating/authentication.md @@ -61,6 +61,9 @@ The generated JWT must contain the following claims: - [`iss`](https://tools.ietf.org/html/rfc7519#section-4.1.1): the issuer for the token must match the value of `TALK_JWT_ISSUER` - [`aud`](https://tools.ietf.org/html/rfc7519#section-4.1.3): the audience for the token must match the value of `TALK_JWT_AUDIENCE` +### Generate a key to sign the JWT +Optionally you can use https://github.com/coralproject/coralcert to generate a key with which to sign the JWTs and specify the secret as an environment variable. + ### Push token into embed We're assuming that your CMS is capable of authenticating a user account, or From 886222260db0347dd22e4020b64a9458927cef6d Mon Sep 17 00:00:00 2001 From: immber Date: Fri, 4 Jan 2019 16:55:56 -0800 Subject: [PATCH 062/116] fb requires ssl --- plugins/talk-plugin-facebook-auth/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/talk-plugin-facebook-auth/README.md b/plugins/talk-plugin-facebook-auth/README.md index 08780adda..839265b04 100644 --- a/plugins/talk-plugin-facebook-auth/README.md +++ b/plugins/talk-plugin-facebook-auth/README.md @@ -29,6 +29,8 @@ Configuration: guide. This is only required while the `talk-plugin-facebook-auth` plugin is enabled. +_NOTE: FabceBook auth requires your site to use `https` (SSL) not `http`. If your site is not `https` you can not use this plugin!_ + ## GDPR Compliance In order to facilitate compliance with the From 8f633fbe780e6c563c21f9dc8e3a824b38fafdc0 Mon Sep 17 00:00:00 2001 From: immber Date: Fri, 4 Jan 2019 17:20:49 -0800 Subject: [PATCH 063/116] added comment count to checklist --- docs/source/01-05-pre-launch-checklist.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/source/01-05-pre-launch-checklist.md b/docs/source/01-05-pre-launch-checklist.md index 01e42b9bd..f07953eb6 100644 --- a/docs/source/01-05-pre-launch-checklist.md +++ b/docs/source/01-05-pre-launch-checklist.md @@ -58,9 +58,10 @@ permalink: /pre-launch-checklist/ - Install [talk-plugin-rich-text](/talk/plugin/talk-plugin-rich-text) -- [ ] Do you want to display comment counts? - - Use the GraphQL [CommentCountQuery](https://docs.coralproject.net/talk/api/graphql/#CommentCountQuery) - - Install [talk-plugin-deep-reply-count](/talk/plugin/talk-plugin-deep-reply-count) if necessary. +- [ ] Do you want to display comment counts on your embed stream or on a homepage with dozens of articles? + - Install [talk-plugin-comment-count](https://github.com/coralproject/talk-plugin-comment-count) for summary counts on multiple articles + - Install [talk-plugin-deep-reply-count](/talk/plugin/talk-plugin-deep-reply-count) to add counts to the embed stream + - Or use the GraphQL [CommentCountQuery](https://docs.coralproject.net/talk/api/graphql/#CommentCountQuery) - [ ] Do you want to translate Talk to a different language? From ba31dbbdf917950fb0f909e81d3237252a85af3d Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 8 Jan 2019 09:53:46 -0800 Subject: [PATCH 064/116] added logout wait time --- docs/source/07-02-troubleshooting-tips.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/07-02-troubleshooting-tips.md b/docs/source/07-02-troubleshooting-tips.md index 6d7304a83..0b4a7a682 100644 --- a/docs/source/07-02-troubleshooting-tips.md +++ b/docs/source/07-02-troubleshooting-tips.md @@ -38,3 +38,6 @@ If you're using `talk-plugin-auth`: * See if you can isolate if it's a particular group of users that are experiencing this issue, e.g. mods, admins, subscribers? Confirm they have the appropriate permissions to comment. * Note if this is a new issue that happened after an upgrade - did you read the [migration docs](/talk/migration/3/) and the [release notes](https://github.com/coralproject/talk/releases)? This might help you resolve the issue. * If you're still experiencing issues, log a [support ticket](mailto:support@coralproject.net) so we can help diagnose the issue + +If a user has been locked out due to too many failed login attempts: +* How long does the user have to wait before they will be allowed to login? 10 mins \ No newline at end of file From db5bf9a676e0f7240b47db8e79fa6eaadf50ae20 Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 8 Jan 2019 10:04:39 -0800 Subject: [PATCH 065/116] added twitter faq --- docs/source/integrating/authentication.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/integrating/authentication.md b/docs/source/integrating/authentication.md index 981ceb156..05f88449e 100644 --- a/docs/source/integrating/authentication.md +++ b/docs/source/integrating/authentication.md @@ -26,6 +26,9 @@ Plugins are available for the following 3rd party authentication providers: * [Facebook](/talk/plugin/talk-plugin-facebook-auth/) * [Google](/talk/plugin/talk-plugin-google-auth/) +_FAQ: Can I create a Twitter auth plugin?_ +This is currently not possible because Talk uses passport.js which does not support Twitter's oAuth2 requirements. + ## Custom Token Integration You can integrate Talk with any authentication service to enable single sign-on From 83819df922f4fb6690a39d778cdf1002e2a2ae96 Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 8 Jan 2019 13:27:08 -0800 Subject: [PATCH 066/116] added talk-plugin-comment-count to plugins directory --- docs/source/_data/plugins.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/_data/plugins.yml b/docs/source/_data/plugins.yml index 0e09de210..3c08715fe 100644 --- a/docs/source/_data/plugins.yml +++ b/docs/source/_data/plugins.yml @@ -146,3 +146,8 @@ tags: - default - sorting +- name: talk-plugin-comment-count + description: This plugin enables adding comment counts to Talk’s embed or in other locations on your site. + link: https://github.com/coralproject/talk-plugin-comment-count + tags: + - counts From c98d227411b16c14767d9530176538e14b6c14c9 Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 8 Jan 2019 15:12:44 -0800 Subject: [PATCH 067/116] updated notifications page --- docs/source/integrating/notifications.md | 86 ++++++++++++++++++------ 1 file changed, 65 insertions(+), 21 deletions(-) diff --git a/docs/source/integrating/notifications.md b/docs/source/integrating/notifications.md index a5f625083..7ee9d0834 100644 --- a/docs/source/integrating/notifications.md +++ b/docs/source/integrating/notifications.md @@ -3,22 +3,13 @@ title: Notifications permalink: /integrating/notifications/ --- -Talk currently supports 3 types of email notifications. +There are several plugins included with Talk that once enabled will control how and when Talk sends emails to users based on user activity. Only basic user profile notifications are enabled by default. - -1. When someone replies to my comment -2. When a staff member replies to my comment -3. When my comment gets featured - -Talk support 3 options for notification frequency: immediately, hourly or daily. Commenters can also opt-out of email notifications. Notifications are set to OFF by default. - -Commenters cannot enable notifications until they have verified their email. - -Note: Notifications are not currently supported for users that sign-up via Facebook or Google auth, or don't have an email attached to their account for any other reason. +_NOTE: Notifications are only supported for users that have an email address in Talk! If you are using authenticate via Facebook, Google, or SSO and you want to persist the user’s email, you will also need to enable `talk-plugin-local-auth` ([See Authentication](/talk/integrating/authentication/))_ ### Configuring SMTP -You must setup SMTP to use notifications. The following ENV variables must be set: +You must setup SMTP to send email notifications. The following ENV variables must be set: ``` TALK_SMTP_FROM_ADDRESS=email@email.com @@ -28,28 +19,72 @@ TALK_SMTP_HOST=smtp.domain.net TALK_SMTP_PORT=2525 ``` -### Enabling Notifications +See our documentation on [setting env variables](/talk/advanced-configuration/#talk-smtp-from-address) for reference. -Enabling the `talk-plugin-notifications` creates a NotificationManager that creates and manages events send from the event emitter that is linked to the Graph API PubSub system. +When running Talk in production we recommend using a 3rd party mail service provider like SendGrid or MailGun. -Adding the `talk-plugin-notifications` plugin will also enable the `notifications` plugin hook. Any plugin that registers before the `talk-plugin-notifications` plugin will get picked up by. +If you are having difficulty with your SMTP settings you can add `DEBUG=talk:jobs:mailer` to your .env to see additional logs from the mailer service. -See https://github.com/coralproject/talk/blob/8b669a31c551a042f0f079d8cfc16825673eb8f0/plugins/talk-plugin-notifications-reply/index.js for an example. +All notifications require SMTP settings to be correctly configured first, then enable the corresponding plugin, and configure any settings in the Talk Admin. If SMTP is not enabled, it will log to the server console that some variables were not provided. -### Notification Categories +### Notification Types & Plugins -Talk currently supports the following Notifications options out of the box: +In addition to the core notifications included with Talk, some plugins add features that are supported by and will add additional types of email notifications. Commenters can opt-out of most email notifications, and comment activity notifications are set to OFF by default. Commenters cannot enable notifications until they have verified their email. -`talk-plugin-notifications-category-reply` -`talk-plugin-notifications-category-staff-reply` -`talk-plugin-notifications-category-featured` +You can see a list of all the plugins related to notifications by visiting: +https://docs.coralproject.net/talk/plugins-directory/?q=notifications + +#### Type: User Profile Notifications (Included by Talk core) + +* When user registers, sends email confirmation and verification +* When user requests password reset +* When user changes username, sends confirmation +* When a user is banned or suspended + +#### Type: GDPR Notifications (optional) +`talk-plugin-profile-data:` +* When my comment history is ready for download (only one link can be generated every 7 days, and the link is valid for 24 hours) + +`talk-plugin-local-auth:` +* When user changes their email address +* When a user adds a new email address + +#### Type: Comment Activity Notifications (optional) +Talk support 3 options for notification frequency for this type of notification: +* immediately +* hourly +* daily + +`talk-plugin-notifications:` +* Enables notifications configuration (required for all comment activity notifications below) + +`talk-plugin-notifications-category-reply:` +* When someone replies to my comment + +`talk-plugin-notifications-category-staff-reply:` +* When a staff member replies to my comment + +`talk-plugin-notifications-category-featured:` +* When my comment gets featured ### Notification Digests +Notification digests are enabled by enabling the corresponding plugin, otherwise comment activity notifications are sent immediately. +* `talk-plugin-notifications-digest-daily` +* `talk-plugin-notifications-digest-hourly` + Talk supports hourly and daily digests out the box, if you would like to create your own, refer to the below: https://github.com/coralproject/talk/blob/9cc9969320dca47bb0f8f81e8d944ae4d19e548b/plugins/talk-plugin-notifications/server/connect.js#L69-L102 + +### Customizing Notifications + +Enabling the `talk-plugin-notifications` creates a NotificationManager that creates and manages events send from the event emitter that is linked to the Graph API PubSub system. This allows the instance that received the mutation to also fire off a notification job that can be handled. It also enabels the `notifications` plugin hook. Any plugin that registers after the `talk-plugin-notifications` can export the notifications plugin to reference it. + +See https://github.com/coralproject/talk/blob/8b669a31c551a042f0f079d8cfc16825673eb8f0/plugins/talk-plugin-notifications-reply/index.js for an example. + + ### Connect API This exposes the `graph/connectors.js` via the `connect` hook. @@ -67,3 +102,12 @@ See https://github.com/coralproject/talk/blob/90290cfa2de88e62f687e1ed0235ba6dfe ### Email Templates Email templates are text based and support translations. If you would like to create a new email template, you can register it via the Connect API, see https://github.com/coralproject/talk/blob/8b669a31c551a042f0f079d8cfc16825673eb8f0/plugins/talk-plugin-notifications/server/connect.js#L12-L28### + +Any email template registered with the same name as another template will replace the existing template for that type of email. _NOTE: that also means that the template data sent to each email template will __not__ change, so bear that in mind when designing templates that you may not have rich access to data._ + +An example of this is with the `talk-plugin-notifications-category-featured` plugin: + +Notification translation is located: https://github.com/coralproject/talk/blob/dd0601a80132d2849c53ef7eaf12ff382f3920b9/plugins/talk-plugin-notifications-category-featured/translations.yml#L13 + +Where the template content is provided: https://github.com/coralproject/talk/blob/dd0601a80132d2849c53ef7eaf12ff382f3920b9/plugins/talk-plugin-notifications-category-featured/index.js#L79 + From b0b5807c8b98637cdf277ffa21deec4af930dda8 Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 8 Jan 2019 16:39:06 -0800 Subject: [PATCH 068/116] added scaling talk --- docs/source/01-04-planning-architecture.md | 35 +++++++++++++++++++++ docs/source/images/ServerArch.png | Bin 0 -> 27124 bytes 2 files changed, 35 insertions(+) create mode 100644 docs/source/images/ServerArch.png diff --git a/docs/source/01-04-planning-architecture.md b/docs/source/01-04-planning-architecture.md index d11ca4ac2..de1cfe803 100644 --- a/docs/source/01-04-planning-architecture.md +++ b/docs/source/01-04-planning-architecture.md @@ -19,3 +19,38 @@ Application servers: c4.xlarge (16 VM nginx + Talk VM machine pairs) Mongo nodes: 3x c3.medium (large db cluster, 1 master, 2 read replicas) If you need help with Talk performance or want custom scaling help or recommendations, let us know by logging a ticket and one of our engineers will get in touch with you: https://support.coralproject.net + +## How to Scale Talk Components +### Scaling the Talk Application + +In addition to scaling by adding additional app servers, Talk as a server component can flex to various roles. Depending on the desired configuration the roles can be split up to ensure high availability, and best matching to underlying host resources. + +There are three components to the Talk application that can be served independently or in combination on a single thread: API Server, WebSockets, and Jobs + +![ServerArchitectureDiagram](/talk/images/ServerArch.png) + +In the diagram we see the difference between a Typical configuration (which just adds additional Talk application instances) vs the Split configuration where different Talk components could be spread across different machine resources to optimize infrastructure utilization. +See [Serving the Application](/talk/configuration-cli-tools/#serving-the-application) + +### Scaling Redis + +Redis serves as a general cache and pub/sub broker. We treat all the data stored in Redis as ephemeral, so using as a cache serves us well for Talk to synchronize expensive query caches. It also serves as our pub/sub broker for use with live updates as propagated through the GraphQL subscription system. For this reason it is not recommended to implement multiple instances of Redis. + +### Scaling MongoDB + +MongoDB is treated as our general store for persisted data. Talk supports the most common strategies for scaling MongoDB instances including replicas and/or sharding. Depending on your specific data use cases, refer to MongoDBs documentation for more information about scaling https://www.mongodb.com/mongodb-scale. + +### Load Balancer +While this subject lives outside the Talk ecosystem, it is critical for application delivery. For websockets to work correctly, a load balancer must be selected that can support long lived connections that are required for websockets to work. + +## Running Talk in Production + +When you are ready to launch your production instance of Talk update your NODE_ENV environment variable from `development` to `production` mode. + +Then launch talk with `yarn start` or with the command `NODE_ENV=production ./bin/cli-serve -j -w` + + + + + + diff --git a/docs/source/images/ServerArch.png b/docs/source/images/ServerArch.png new file mode 100644 index 0000000000000000000000000000000000000000..aed5ffccaba6082506f1ba65ff68ff075485d0b0 GIT binary patch literal 27124 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 literal 0 HcmV?d00001 From 83379b58a7102abd7815707ba492160342ef488b Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 8 Jan 2019 16:46:49 -0800 Subject: [PATCH 069/116] em that can not be opted out of --- docs/source/integrating/notifications.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/integrating/notifications.md b/docs/source/integrating/notifications.md index 7ee9d0834..04fe8f59f 100644 --- a/docs/source/integrating/notifications.md +++ b/docs/source/integrating/notifications.md @@ -41,6 +41,8 @@ https://docs.coralproject.net/talk/plugins-directory/?q=notifications * When user changes username, sends confirmation * When a user is banned or suspended +_NOTE: Users can not opt-out of User Profile Notifications_ + #### Type: GDPR Notifications (optional) `talk-plugin-profile-data:` * When my comment history is ready for download (only one link can be generated every 7 days, and the link is valid for 24 hours) From 8f54c1d3c3c043b9b8732dc2647e7d6a4126ffd5 Mon Sep 17 00:00:00 2001 From: immber Date: Wed, 9 Jan 2019 12:38:33 -0800 Subject: [PATCH 070/116] fixed md typo --- docs/source/plugins/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/plugins/overview.md b/docs/source/plugins/overview.md index 1f734edeb..b4e1f41d5 100644 --- a/docs/source/plugins/overview.md +++ b/docs/source/plugins/overview.md @@ -67,9 +67,9 @@ External plugins can be resolved by running: This achieves two things: 1. It will traverse into local plugin folders and install their dependencies. - _Note that if the plugin is already installed and available in the + __Note that if the plugin is already installed and available in the node_modules folder, it will not be fetched again unless there is a version - mismatch._ This will result in the project `package.json` and `yarn.lock` + mismatch.__ This will result in the project `package.json` and `yarn.lock` files to be modified, this is normal as this ensures that repeated deployments (with the same config) will have the same config, these changes should not be committed to source control. From 76ef0f7d521069aa3b5deab55229a06ce51cd5cd Mon Sep 17 00:00:00 2001 From: immber Date: Thu, 10 Jan 2019 10:55:20 -0800 Subject: [PATCH 071/116] pulled community link from readme --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index dd04b096f..72207c1f3 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,6 @@ The current recommended release version is v4.5.0. ^4.5 (and all future even-num - [Talk Product Roadmap](https://www.pivotaltracker.com/n/projects/1863625) - [Our Blog](https://blog.coralproject.net/) -- [Community Forums](https://community.coralproject.net/) - [Community Guides for Journalism](https://guides.coralproject.net/) - [More About Us](https://coralproject.net/) From f69a9c826d1a1bf04441e6f881b226a34e3fce84 Mon Sep 17 00:00:00 2001 From: immber Date: Thu, 10 Jan 2019 17:04:22 -0800 Subject: [PATCH 072/116] removed link to community from faq --- docs/source/07-01-faq.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/07-01-faq.md b/docs/source/07-01-faq.md index 8f34adbf1..f3bf92396 100644 --- a/docs/source/07-01-faq.md +++ b/docs/source/07-01-faq.md @@ -11,8 +11,6 @@ To log a bug or request a feature, submit a Support ticket ([support@coralprojec You can also request help on Github by [submitting an issue](https://github.com/coralproject/talk/issues). This also increases your chances of having someone from the community respond to help. -And you can also search our [Coral Community](https://community.coralproject.net) to see if your issue has been solved, or to get tips from the community. - ## How can our dev team contribute to Talk? We are lucky to work with newsroom dev teams and individual contributors who span the world, and come from newsrooms of all sizes. You can read our [Contribution Guide](https://github.com/coralproject/talk/blob/master/CONTRIBUTING.md) to get started, but feel free to reach out to us via Github too. From acc83e27ce907f15596535f788d2feacdfd4af22 Mon Sep 17 00:00:00 2001 From: immber Date: Mon, 14 Jan 2019 10:37:36 -0800 Subject: [PATCH 073/116] added TALK_CONCURRENCY to adv config --- docs/source/01-04-planning-architecture.md | 2 ++ docs/source/02-02-advanced-configuration.md | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/docs/source/01-04-planning-architecture.md b/docs/source/01-04-planning-architecture.md index de1cfe803..602222b8f 100644 --- a/docs/source/01-04-planning-architecture.md +++ b/docs/source/01-04-planning-architecture.md @@ -49,6 +49,8 @@ When you are ready to launch your production instance of Talk update your NODE_E Then launch talk with `yarn start` or with the command `NODE_ENV=production ./bin/cli-serve -j -w` +By default Talk will run on a single thread, but you can also run multiple Talk threads on a single application instance by setting the environment variable `TALK_CONCURRENCY`. [See Advanced Configuration](/talk/advanced-configuration/#talk-concurrency) + diff --git a/docs/source/02-02-advanced-configuration.md b/docs/source/02-02-advanced-configuration.md index 49769be0b..1d12d2b47 100644 --- a/docs/source/02-02-advanced-configuration.md +++ b/docs/source/02-02-advanced-configuration.md @@ -23,6 +23,10 @@ otherwise the application will fail to start. Configure the duration for which comment counts are cached for, parsed by [ms](https://www.npmjs.com/package/ms). (Default `1hr`) +## TALK_CONCURRENCY + +This environment variable allows multiple worker processes to be spawned to handle traffic. Defaults to 1 if not set. + ## TALK_DEFAULT_LANG This is a **Build Variable** and must be consumed during build. If using the From df5e863cc4eca6ceab10e6578cde9feb291cda03 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 14 Jan 2019 13:45:28 -0800 Subject: [PATCH 074/116] updated default phrasing to be consistent Co-Authored-By: immber --- docs/source/02-02-advanced-configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/02-02-advanced-configuration.md b/docs/source/02-02-advanced-configuration.md index 1d12d2b47..1a60ac98b 100644 --- a/docs/source/02-02-advanced-configuration.md +++ b/docs/source/02-02-advanced-configuration.md @@ -25,7 +25,7 @@ Configure the duration for which comment counts are cached for, parsed by ## TALK_CONCURRENCY -This environment variable allows multiple worker processes to be spawned to handle traffic. Defaults to 1 if not set. +This environment variable allows multiple worker processes to be spawned to handle traffic. (Default `1`) ## TALK_DEFAULT_LANG From c02d2b9b4ebf939cdb6cc0c27aff4347723845dc Mon Sep 17 00:00:00 2001 From: Andrew Losowsky Date: Wed, 16 Jan 2019 10:46:49 -0500 Subject: [PATCH 075/116] Fixed blog url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 72207c1f3..0e39cc780 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The current recommended release version is v4.5.0. ^4.5 (and all future even-num ## More Resources - [Talk Product Roadmap](https://www.pivotaltracker.com/n/projects/1863625) -- [Our Blog](https://blog.coralproject.net/) +- [Our Blog](https://coralproject.net/blog) - [Community Guides for Journalism](https://guides.coralproject.net/) - [More About Us](https://coralproject.net/) From d7fb0056be7d2e2a9e31975621d94946892af2bc Mon Sep 17 00:00:00 2001 From: immber Date: Wed, 16 Jan 2019 14:16:04 -0800 Subject: [PATCH 076/116] added native comments pdf --- docs/source/05-04-native-mobile-apps.md | 8 ++++++++ docs/source/images/IGNNativeComments.pdf | Bin 0 -> 73497 bytes 2 files changed, 8 insertions(+) create mode 100644 docs/source/05-04-native-mobile-apps.md create mode 100644 docs/source/images/IGNNativeComments.pdf diff --git a/docs/source/05-04-native-mobile-apps.md b/docs/source/05-04-native-mobile-apps.md new file mode 100644 index 000000000..69c54f825 --- /dev/null +++ b/docs/source/05-04-native-mobile-apps.md @@ -0,0 +1,8 @@ +--- +title: Embedding Talk in Native Mobile Apps +permalink: /embedding-in-native-mobile-apps/ +--- + +When it comes mobile devices, the Talk client embed is already responsive and mobile friendly. It is for this reason that the Coral Project has not attempted to make a Talk client available as a native iOS or Android mobile application. However, we get asked about this _a lot_! + +One organization that has taken on the challenge of creating their own iOS native Talk client is IGN. They were kind enough to share some details about their process which can be found [here](talk/images/IGNNativeComments.pdf) diff --git a/docs/source/images/IGNNativeComments.pdf b/docs/source/images/IGNNativeComments.pdf new file mode 100644 index 0000000000000000000000000000000000000000..33faf54631181d5dfa093a18c2e4506baab995d1 GIT binary patch literal 73497 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 Date: Wed, 16 Jan 2019 14:25:52 -0800 Subject: [PATCH 077/116] added link to sidebar --- docs/source/05-04-native-mobile-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/05-04-native-mobile-apps.md b/docs/source/05-04-native-mobile-apps.md index 69c54f825..5def248e4 100644 --- a/docs/source/05-04-native-mobile-apps.md +++ b/docs/source/05-04-native-mobile-apps.md @@ -5,4 +5,4 @@ permalink: /embedding-in-native-mobile-apps/ When it comes mobile devices, the Talk client embed is already responsive and mobile friendly. It is for this reason that the Coral Project has not attempted to make a Talk client available as a native iOS or Android mobile application. However, we get asked about this _a lot_! -One organization that has taken on the challenge of creating their own iOS native Talk client is IGN. They were kind enough to share some details about their process which can be found [here](talk/images/IGNNativeComments.pdf) +One organization that has taken on the challenge of creating their own iOS native Talk client is IGN. They were kind enough to share some details about their process which can be found [here](/talk/images/IGNNativeComments.pdf) From 6ef5c3a42f44cac0b46121c4bd3e481057069873 Mon Sep 17 00:00:00 2001 From: immber Date: Wed, 16 Jan 2019 14:29:35 -0800 Subject: [PATCH 078/116] added link to sidebar --- docs/_config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/_config.yml b/docs/_config.yml index d9de09850..f63c59213 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -166,6 +166,8 @@ sidebar: url: /customizing-plugins-coral-ui/ - title: When You've Installed Talk url: /when-youve-installed-talk/ + - title: Embedding Talk in Native Mobile Apps + url: /embedding-in-native-mobile-apps/ - title: Migrating children: - title: Migrating from v3.x.x From 582d45bb213ffd15f47e51c1db35baf9f50818b8 Mon Sep 17 00:00:00 2001 From: immber Date: Thu, 17 Jan 2019 09:56:55 -0800 Subject: [PATCH 079/116] moved pdf to wp and updated copy --- docs/source/05-04-native-mobile-apps.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/05-04-native-mobile-apps.md b/docs/source/05-04-native-mobile-apps.md index 5def248e4..f53a26d57 100644 --- a/docs/source/05-04-native-mobile-apps.md +++ b/docs/source/05-04-native-mobile-apps.md @@ -3,6 +3,8 @@ title: Embedding Talk in Native Mobile Apps permalink: /embedding-in-native-mobile-apps/ --- -When it comes mobile devices, the Talk client embed is already responsive and mobile friendly. It is for this reason that the Coral Project has not attempted to make a Talk client available as a native iOS or Android mobile application. However, we get asked about this _a lot_! +When it comes mobile devices, the Talk client embed is already responsive and mobile friendly. We do not currently have plans to provide mobile SDKs, however, you can do this yourself. -One organization that has taken on the challenge of creating their own iOS native Talk client is IGN. They were kind enough to share some details about their process which can be found [here](/talk/images/IGNNativeComments.pdf) +One organization that has taken on the challenge of creating their own iOS native Talk client is [IGN](http://www.ign.com/). They were kind enough to share how they implemented Talk natively on their apps, which can be found [here](http://coralproject.net/wp-content/uploads/2019/01/IGNNativeComments.pdf). + +If you implement Talk on your mobile apps and would like to contribute your process for others, you can add those here in our docs via a PR or post an issue on Github and we can help you. From d007c2295ef8517274621e5bea232603b290c3cf Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Mon, 21 Jan 2019 17:15:16 -0500 Subject: [PATCH 080/116] Fix Permalink copy on iOS --- .../client/components/PermalinkButton.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/talk-plugin-permalink/client/components/PermalinkButton.js b/plugins/talk-plugin-permalink/client/components/PermalinkButton.js index 5916b7f17..e2c286436 100644 --- a/plugins/talk-plugin-permalink/client/components/PermalinkButton.js +++ b/plugins/talk-plugin-permalink/client/components/PermalinkButton.js @@ -36,7 +36,18 @@ export default class PermalinkButton extends React.Component { }; copyPermalink = () => { - this.permalinkInput.select(); + const iOS = navigator && navigator.userAgent.match(/ipad|iphone/i); + + if (iOS) { + let range = document.createRange(); + range.selectNodeContents(this.permalinkInput); + let selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + this.permalinkInput.setSelectionRange(0, 999999); + } else { + this.permalinkInput.select(); + } try { document.execCommand('copy'); this.setState({ From d1a22f9dc80df04f2bfb3eca8023e746c78fb8cd Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 22:10:53 -0500 Subject: [PATCH 081/116] Remove merge comments --- plugins/talk-plugin-google-auth/server/router.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/plugins/talk-plugin-google-auth/server/router.js b/plugins/talk-plugin-google-auth/server/router.js index 06f6e6e8e..a260b6f93 100644 --- a/plugins/talk-plugin-google-auth/server/router.js +++ b/plugins/talk-plugin-google-auth/server/router.js @@ -2,11 +2,7 @@ module.exports = router => { const { passport, HandleAuthPopupCallback } = require('services/passport'); /** -<<<<<<< HEAD - * Google auth endpoint, this will redirect the user immediately to Google -======= * Google auth endpoint, this will redirect the user immediately to google ->>>>>>> da56cd5b18bfb7bb0e9f1ae2dba1f4c729f41ff1 * for authorization. */ router.get( @@ -20,11 +16,7 @@ module.exports = router => { /** * Google callback endpoint, this will send the user a html page designed to -<<<<<<< HEAD - * send back the user credentials upon successful login. -======= * send back the user credentials upon sucessful login. ->>>>>>> da56cd5b18bfb7bb0e9f1ae2dba1f4c729f41ff1 */ router.get('/api/v1/auth/google/callback', (req, res, next) => { // Perform the Google login flow and pass the data back through the opener. From d522a72d425e9a0e89f755ef65d26feafebf488c Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 23:09:30 -0500 Subject: [PATCH 082/116] Add additional hebrew --- locales/he.yml | 188 ++++++++++++++++++++++++------------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index cdeabaa9d..74bc70453 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -16,7 +16,7 @@ en: send: "שלח" notify_ban_headline: "הודע למשתמש על האיסור" notify_ban_description: "פעולה זו תודיע למשתמש בדוא"ל שהם נאסרו מהקהילה" - email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team." + email_message_ban: "{0},\n\nמישהו עם גישה לחשבון שלך הפר את הנחיות הקהילה שלנו. כתוצאה מכך, החשבון שלך נאסר. לא תוכל עוד להגיב, לדווח או לדווח על תגובות. אם אתה חושב שהדבר נעשה בטעות, צור קשר עם צוות הקהילה שלנו." bio_offensive: "ביו זה פוגע" cancel: "בטל" confirm_email: @@ -39,9 +39,9 @@ en: flagged: "מסומנת" view_context: "הצג הקשר" comment_box: - post: "Post" + post: "שלח" cancel: "בטל" - reply: "Reply" + reply: "תשובה" comment: "פרסם תגובה" name: "שם" comment_post_notif: "התגובה שלך פורסמה." @@ -57,7 +57,7 @@ en: common: copy: 'עותק' error: 'אירעה שגיאה.' - reply: 'reply' + reply: 'הגבה' replies: 'replies' reaction: 'reaction' reactions: 'reactions' @@ -77,63 +77,63 @@ en: banned: אסור banned_user: "משתמש מורשה" cancel: בטל - dont_like_username: "Dislike username" + dont_like_username: "לא אוהב את שם המשתמש" flaggedaccounts: "Reported Usernames" flags: Flags impersonating: "Impersonation" loading: "טוען תוצאות" - moderator: Moderator - newsroom_role: "Newsroom Role" - no_flagged_accounts: "The Reported Usernames queue is currently empty." - no_results: "No users found with that user name or email address. They're hiding!" - offensive: "Offensive" - other: Other - people: People - role: "Select role..." - select_status: "Select status..." - spam_ads: "Spam/Ads" - staff: "Staff" - status: Status - username_and_email: "Username and Email" + moderator: מנהל + newsroom_role: "תפקיד בחדר החדשות" + no_flagged_accounts: "תור שמות המשתמש המדווחים ריק כעת." + no_results: "לא נמצאו משתמשים בשם המשתמש או בכתובת האימייל הזו. הם מסתתרים!" + offensive: "פוגע" + other: אחר + people: אנשים + role: "בחר תפקיד ..." + select_status: "בחר סטטוס ..." + spam_ads: "ספאם / מודעות" + staff: "צוות" + status: סטטוס + username_and_email: "שם משתמש ודוא"ל" yes_ban_user: "כן. חסום משתמש" - commenter: "Commenter" + commenter: "מגיב" configure: - apply: Apply - banned_word_text: "Comments which contain these words or phrases (not case-sensitive) will be automatically removed from the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." - banned_words_title: "Banned words list" - close: "Close" - close_after: "Close comments after" - close_stream: "Close Stream" - close_stream_configuration: "This comment stream is currently closed. By opening this comment stream new comments may be submitted and displayed" - closed_comments_desc: "Write a message to be displayed when when your comment stream is closed and no longer accepting comments." - closed_comments_label: "Write a message..." - closed_stream_settings: "Closed Stream Message" - comment_count_error: "Please enter a valid number." - comment_count_header: "Limit Comment Length" - comment_count_text_post: characters - comment_count_text_pre: "Comments will be limited to" - comment_settings: Settings - comment_stream: "Comment Stream" - comment_stream_will_close: "The comment stream will close" - community: Community - configure: Configure - copy_and_paste: "Copy and paste code below into your CMS to embed your comment box in your articles" - custom_css_url: "Custom CSS URL" + apply: החל + banned_word_text: "הערות המכילות מילים או ביטויים אלה (לא תלויי רישיות) יוסרו באופן אוטומטי מזרם ההערות. הקלד מילה ולחץ על Enter או על Tab כדי להוסיף. אפשר להדביק רשימה מופרדת בפסיקים." + banned_words_title: "רשימת מילים אסורות" + close: "סגור" + close_after: "סגור הערות לאחר" + close_stream: "סגור את זרם ההערות" + close_stream_configuration: "זרם תגובות זה סגור כעת. על ידי פתיחת תגובה זו זרם תגובות חדשות ניתן להגיש ולהציג" + closed_comments_desc: "כתוב הודעה שתוצג כאשר זרם ההערות שלך ייסגר ולא תקבל עוד הערות." + closed_comments_label: "כתוב הודעה ..." + closed_stream_settings: "הודעת זרם סגור" + comment_count_error: "נא הכנס מספר תקף." + comment_count_header: "הגבל אורך תגובה" + comment_count_text_post: תווים + comment_count_text_pre: "תגובות יוגבלו" + comment_settings: הגדרות + comment_stream: "זרם תגובות" + comment_stream_will_close: "זרם ההערות ייסגר" + community: קהילה + configure: הגדר + copy_and_paste: "העתק והדבק קוד למטה לתוך CMS שלך כדי להטביע את תיבת התגובה לכתבות שלך" + custom_css_url: "כתובת האתר של ה- CSS המותאם אישית שלך" custom_css_url_desc: "כתובת אתר של גיליון סגנונות CSS שתבטל את ברירת המחדל של סגנונות 'הזרמת זרם'. יכול להיות פנימי או חיצוני." - days: Days - description: "As an admin, you can customize the settings for the comment stream for this story:" - domain_list_text: "Enter the domains you would like to permit for Talk e.g. your local staging and production environments (ex. localhost:3000 staging.domain.com domain.com)." - domain_list_title: "Permitted Domains" - edit_comment_timeframe_heading: "Edit Comment Timeframe" + days: ימים + description: "כמנהל, תוכל להתאים אישית את ההגדרות עבור זרם ההערות עבור הסיפור הזה:" + domain_list_text: "הזן את הדומיינים שברצונך להרשות עבור Talk. כלומר, סביבות האחסון הזמני וההפקה המקומית שלך (לדוגמה localhost: 3000, staging.domain.com, domain.com)." + domain_list_title: "דומיינים מותרים" + edit_comment_timeframe_heading: "עריכת מסגרת זמן של תגובה" edit_comment_timeframe_text_pre: "Commenters will have" - edit_comment_timeframe_text_post: "seconds to edit their comments." + edit_comment_timeframe_text_post: "שניות כדי לערוך את התגובות שלהם." embed_comment_stream: "Embed Stream" enable_premod_links_text: "Moderators must approve any comment containing a link before it is published." - enable_pre_moderation: "Enable pre-moderation" - enable_pre_moderation_text: "Moderators must approve any comment before it is published." + enable_pre_moderation: "אפשר התנהלות מראש" + enable_pre_moderation_text: "על המנחים לאשר כל הערה לפני פרסומה." enable_premod_links: "Pre-Moderate Comments Containing Links" enable_premod: "Enable Premoderation" - enable_premod_description: "Moderators must approve any comment before it is published." + enable_premod_description: "על המנחים לאשר כל הערה לפני פרסומה." enable_premod_links_description: "Moderators must approve any comment containing a link before it is published." enable_questionbox: "Ask Readers a Question" enable_questionbox_description: "This question will appear at the top of this comment stream. Ask readers about a certain issue in the article or pose discussion questions etc." @@ -279,24 +279,24 @@ en: flags: reasons: user: - username_offensive: "Offensive" - username_nolike: "Dislike" + username_offensive: "פוגע" + username_nolike: "לא אוהב" username_impersonating: "Impersonation" - username_spam: "Spam" - username_other: "Other" + username_spam: "ספאם" + username_other: "אחר" comment: - comment_offensive: "Offensive" - comment_spam: "Spam" - comment_noagree: "Disagree" - comment_other: "Other" - suspect_word: "Suspect Word" - banned_word: "Banned Word" - body_count: "Body exceeds max length" - trust: "Trust" - links: "Link" + comment_offensive: "פוגע" + comment_spam: "ספאם" + comment_noagree: "לא מסכים" + comment_other: "אחר" + suspect_word: "מילה חשודה" + banned_word: "מילה אסורה" + body_count: "גוף התגובה עולה על אורך מרבי" + trust: "אמון" + links: "קישור" modqueue: account: "account flags" - actions: Actions + actions: פעולות all: all all_streams: "All Streams" notify_edited: '{0} edited comment "{1}"' @@ -402,7 +402,7 @@ en: title_notify: "Notify the user of their temporary suspension" notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." description_notify: "Suspending this user will temporarily disable their account." - write_message: "Write a message" + write_message: "לכתוב הודעה" send: שלח reject_username: username: שם משתמש @@ -414,37 +414,37 @@ en: suspend_user: "Suspend User" yes_suspend: "Yes suspend" email_message_reject: "Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please e-mail us if you have any questions or concerns." - write_message: "Write a message" + write_message: "לכתוב הודעה" send: שלח - thank_you: "We value your safety and feedback. A moderator will review your report." + thank_you: "אנו מעריכים את בטיחותך ומשובך. מנחה יסקור את הדוח שלך." user: - bio_flags: "flags for this bio" - user_bio: "User Bio" - username_flags: "flags for this username" + bio_flags: "דגלים עבור ביוגרפיה זו" + user_bio: "ביוגרפיה של המשתמש" + username_flags: "דגלים עבור שם משתמש זה" user_detail: - remove_suspension: "Remove Suspension" - suspend: "Suspend User" - remove_ban: "Remove Ban" - ban: "Ban User" - member_since: "Member Since" - email: "Email" - total_comments: "Total Comments" - reject_rate: "Reject Rate" - reports: "Reports" - all: "All" - rejected: "Rejected" - account_history: "Account History" - user_impersonating: "This user is impersonating" - user_no_comment: "You've never left a comment. Join the conversation!" - username_offensive: "This username is offensive" - view_conversation: "View Conversation" + remove_suspension: "הסר השעיה" + suspend: "להשעות משתמש" + remove_ban: "הסרת חסימה" + ban: "לחסום משתמש" + member_since: "חבר מאז" + email: "דוא"ל" + total_comments: "סה"כ תגובות" + reject_rate: "שיעור דחייה" + reports: "דיווחים" + all: "כל" + rejected: "נדחה" + account_history: "היסטוריית החשבון" + user_impersonating: "משתמש זה מתחזה" + user_no_comment: "מעולם לא השארת תגובה. הצטרף לשיחה!" + username_offensive: "שם משתמש זה פוגע" + view_conversation: "הצג שיחה" install: initial: - description: "Let's set up your Talk community in just a few short steps." - submit: "Get Started" + description: "בואו נגדיר את קהילת Talk שלך בכמה שלבים קצרים בלבד." + submit: "תחל" add_organization: - description: "Please tell us the name of your organization. This will appear in emails when inviting new team members." - label: "Organization Name" + description: "ספר לנו את שם הארגון שלך. פעולה זו תופיע בדוא"ל בעת הזמנת חברי צוות חדשים." + label: "שם ארגון" save: "שמור" create: email: 'כתובת דוא"ל' @@ -453,12 +453,12 @@ en: confirm_password: "אשר סיסמה" save: "שמור" permitted_domains: - title: "Permitted domains" - description: "Enter the domains you would like to permit for Talk, e.g. your local, staging and production environments (ex. localhost:3000, staging.domain.com, domain.com)." - submit: "Finish install" + title: "דומיינים מותרים" + description: "הזן את הדומיינים שברצונך להרשות עבור Talk. כלומר, סביבות האחסון הזמני וההפקה המקומית שלך (לדוגמה localhost: 3000, staging.domain.com, domain.com)." + submit: "סיים את ההתקנה" final: - description: "Thanks for installing Talk! We sent an email to verify your email address. While you finish setting up the account, you can start engaging with your readers now." - launch: "Launch Talk" + description: "תודה שהתקנת את Talk! שלחנו הודעת אימייל לאימות כתובת האימייל שלך. בזמן שתסיים להגדיר את החשבון, תוכל להתחיל לעסוק עם הקוראים שלך כעת." + launch: "הפעל את Talk" close: "סגור את המתקין" admin_sidebar: view_options: "הצג אפשרויות" From 1dfc4b83c72688226848f94a5b90f8edca0985a5 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 23:11:25 -0500 Subject: [PATCH 083/116] Remove unnecessary diffs --- plugins/talk-plugin-google-auth/server/router.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/talk-plugin-google-auth/server/router.js b/plugins/talk-plugin-google-auth/server/router.js index a260b6f93..4253919ff 100644 --- a/plugins/talk-plugin-google-auth/server/router.js +++ b/plugins/talk-plugin-google-auth/server/router.js @@ -2,7 +2,7 @@ module.exports = router => { const { passport, HandleAuthPopupCallback } = require('services/passport'); /** - * Google auth endpoint, this will redirect the user immediately to google + * Google auth endpoint, this will redirect the user immediately to Google * for authorization. */ router.get( @@ -16,7 +16,7 @@ module.exports = router => { /** * Google callback endpoint, this will send the user a html page designed to - * send back the user credentials upon sucessful login. + * send back the user credentials upon successful login. */ router.get('/api/v1/auth/google/callback', (req, res, next) => { // Perform the Google login flow and pass the data back through the opener. From 5ad90e00cbfe3c848f664cfcc8489958a14381d8 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 23:16:09 -0500 Subject: [PATCH 084/116] Add Hebrew to profile plugin --- .../client/translations.yml | 51 +++++++++++++++++++ .../talk-plugin-profile-data/translations.yml | 37 ++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/plugins/talk-plugin-profile-data/client/translations.yml b/plugins/talk-plugin-profile-data/client/translations.yml index e7ebf49cd..6ad55b30e 100644 --- a/plugins/talk-plugin-profile-data/client/translations.yml +++ b/plugins/talk-plugin-profile-data/client/translations.yml @@ -49,6 +49,57 @@ ar: subtitle: "هل انت متأكد انك تريد حذف حسابك؟" description: "للتأكيد على رغبتك في حذف حسابك، يرجى كتابة العبارة التالية في مربع النص أدناه:" type_to_confirm: "اكتب عبارة أدناه للتأكيد" +he: + download_request: + section_title: "Download My Comment History" + you_will_get_a_copy: "You will receive an email with a link to download your comment history. You can make" + download_rate: "one download request every {0} days" + most_recent_request: "Your most recent request" + request: "Request Comment History" + rate_limit: "You can submit another Comment History request in {0}" + hours: "{0} hours" + days: "{0} days" + hour: "{0} hour" + day: "{0} day" + download_preparing: "Account Download Preparing - Check your email shortly for a download link" + delete_request: + account_deletion_cancelled: 'Account Deletion Request Cancelled - Your request to delete your account has been cancelled.' + account_deletion_requested: 'Account Deletion Requested' + received_on: "A request to delete your account was received on " + cancel_request_description: "If you would like to reactivate your account, you may cancel your request to delete your account below" + before: "before" + cancel_account_deletion_request: "Cancel Account Deletion Request" + delete_my_account: "Delete My Account" + delete_my_account_description: "Deleting your account will permanently erase your profile and remove all your comments from this site." + already_submitted_request_description: "You have already submitted a request to delete your account. Your account will be deleted after {0}. You may cancel the request until that time" + your_request_submitted_description: "Your request has been submitted and confirmation has been sent to the email address associated with your account." + your_account_deletion_scheduled: "Your account is scheduled to be deleted after:" + changed_your_mind: "Changed your mind?" + simply_go_to: "Simply go to your account again before this time and click" + tell_us_why: "Tell us why" + feedback_copy: "We would like to know why you chose to delete your account. Send us feedback on our comment system by emailing" + done: "Done" + cancel: "Cancel" + proceed: "Proceed" + input_is_not_correct: "The input is not correct" + step_0: + you_are_attempting: "You are attempting to delete your account. This means:" + item_1: "All of your comments are removed from this site" + item_2: "All of your comments are deleted from our database" + item_3: "Your username and email address are removed from our system" + step_1: + subtitle: "When will my account be deleted?" + description: "Your account will be deleted {0} hours after your request has been submitted." + subtitle_2: "Can I still write comments until my account is deleted?" + description_2: "Yes, you can still comment, reply, and react to comments until the {0} hours expires." + step_2: + description: "Before your account is deleted, we recommend you download your comment history for your records. After your account is deleted, you will be unable to request your comment history." + to_download: "To download your comment history go to:" + path: "My Profile > Download My Comment History" + step_3: + subtitle: "Are you sure you want to delete your account?" + description: "To confirm you would like to delete your account please type in the following phrase into the text box below:" + type_to_confirm: "Type phrase below to confirm" en: download_request: section_title: "Download My Comment History" diff --git a/plugins/talk-plugin-profile-data/translations.yml b/plugins/talk-plugin-profile-data/translations.yml index d2f017f72..1a4ee3b09 100644 --- a/plugins/talk-plugin-profile-data/translations.yml +++ b/plugins/talk-plugin-profile-data/translations.yml @@ -36,6 +36,43 @@ ar: body: "لقد ألغيت طلب حذف حسابك ل {0}. تم الآن إعادة تفعيل حسابك." error: DOWNLOAD_TOKEN_INVALID: "رابط التنزيل الخاص بك غير صالح." +he: + download_landing: + download_your_account: "Download Your Comment History" + download_details: "Your comment history will be downloaded into a .zip file. After your comment history is unzipped you will have a comma separated value (or .csv) file that you can easily import into your favorite spreadsheet application." + all_information_included: "For each of your comments the following information is included:" + information_included: + date: "When you wrote the comment" + url: "The permalink URL for the comment" + body: "The comment text" + asset_url: "The URL of the article or story where the comment appears" + confirm: "Download My Comment History" + email: + download: + subject: "Your comments are ready for download from {0}" + download_link_ready: "Click here to download your comments from {0} as of {1}:" + download_archive: "Download Archive" + delete: + subject: "Your account for {0} is scheduled to be deleted" + body: | + A request to delete your account was received. Your account is scheduled for deletion on {1}. + + After that time all of your comments will be removed from the site, all of your comments will be removed from our database, and your username and email address will be removed from our system. + + If you change your mind you can sign into your account and cancel the request before your scheduled account deletion time. + deleted: + subject: "Your account for {0} has been deleted" + body: | + Your commenter account for {0} is now deleted. We're sorry to see you go! + + If you'd like to re-join the discussion in the future, you can sign up for a new account. + + If you'd like to give us feedback on why you left and what we can do to make the commenting experience better, please email us at {1}. + cancelDelete: + subject: "Your account deletion request for {0} has been cancelled" + body: "You have cancelled your account deletion request for {0}. Your account is now reactivated." + error: + DOWNLOAD_TOKEN_INVALID: "Your download link is not valid." en: download_landing: download_your_account: "Download Your Comment History" From 02963dc5ac2a38dbabdb5eda6c7a7b4324297e10 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 23:18:18 -0500 Subject: [PATCH 085/116] Fix translation --- plugins/talk-plugin-sort-most-loved/client/translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/talk-plugin-sort-most-loved/client/translations.yml b/plugins/talk-plugin-sort-most-loved/client/translations.yml index f6ad5d118..8c8aecda1 100644 --- a/plugins/talk-plugin-sort-most-loved/client/translations.yml +++ b/plugins/talk-plugin-sort-most-loved/client/translations.yml @@ -18,7 +18,7 @@ fr: label: Most loved first he: talk-plugin-sort-most-loved: - label: הכי אהבתי קודם + label: הכי אהוב קודם nl_NL: talk-plugin-sort-most-loved: label: Meest geliefd eerst From 9a49044030eff5d4486eb2b2b5f62f75b7130b9d Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 23:30:39 -0500 Subject: [PATCH 086/116] Add client profile translations --- .../client/translations.yml | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/plugins/talk-plugin-profile-data/client/translations.yml b/plugins/talk-plugin-profile-data/client/translations.yml index 6ad55b30e..e2a8184db 100644 --- a/plugins/talk-plugin-profile-data/client/translations.yml +++ b/plugins/talk-plugin-profile-data/client/translations.yml @@ -49,57 +49,6 @@ ar: subtitle: "هل انت متأكد انك تريد حذف حسابك؟" description: "للتأكيد على رغبتك في حذف حسابك، يرجى كتابة العبارة التالية في مربع النص أدناه:" type_to_confirm: "اكتب عبارة أدناه للتأكيد" -he: - download_request: - section_title: "Download My Comment History" - you_will_get_a_copy: "You will receive an email with a link to download your comment history. You can make" - download_rate: "one download request every {0} days" - most_recent_request: "Your most recent request" - request: "Request Comment History" - rate_limit: "You can submit another Comment History request in {0}" - hours: "{0} hours" - days: "{0} days" - hour: "{0} hour" - day: "{0} day" - download_preparing: "Account Download Preparing - Check your email shortly for a download link" - delete_request: - account_deletion_cancelled: 'Account Deletion Request Cancelled - Your request to delete your account has been cancelled.' - account_deletion_requested: 'Account Deletion Requested' - received_on: "A request to delete your account was received on " - cancel_request_description: "If you would like to reactivate your account, you may cancel your request to delete your account below" - before: "before" - cancel_account_deletion_request: "Cancel Account Deletion Request" - delete_my_account: "Delete My Account" - delete_my_account_description: "Deleting your account will permanently erase your profile and remove all your comments from this site." - already_submitted_request_description: "You have already submitted a request to delete your account. Your account will be deleted after {0}. You may cancel the request until that time" - your_request_submitted_description: "Your request has been submitted and confirmation has been sent to the email address associated with your account." - your_account_deletion_scheduled: "Your account is scheduled to be deleted after:" - changed_your_mind: "Changed your mind?" - simply_go_to: "Simply go to your account again before this time and click" - tell_us_why: "Tell us why" - feedback_copy: "We would like to know why you chose to delete your account. Send us feedback on our comment system by emailing" - done: "Done" - cancel: "Cancel" - proceed: "Proceed" - input_is_not_correct: "The input is not correct" - step_0: - you_are_attempting: "You are attempting to delete your account. This means:" - item_1: "All of your comments are removed from this site" - item_2: "All of your comments are deleted from our database" - item_3: "Your username and email address are removed from our system" - step_1: - subtitle: "When will my account be deleted?" - description: "Your account will be deleted {0} hours after your request has been submitted." - subtitle_2: "Can I still write comments until my account is deleted?" - description_2: "Yes, you can still comment, reply, and react to comments until the {0} hours expires." - step_2: - description: "Before your account is deleted, we recommend you download your comment history for your records. After your account is deleted, you will be unable to request your comment history." - to_download: "To download your comment history go to:" - path: "My Profile > Download My Comment History" - step_3: - subtitle: "Are you sure you want to delete your account?" - description: "To confirm you would like to delete your account please type in the following phrase into the text box below:" - type_to_confirm: "Type phrase below to confirm" en: download_request: section_title: "Download My Comment History" @@ -202,6 +151,57 @@ es: subtitle: "¿Seguro que quieres eliminar tu cuenta?" description: "Para confirmar que deseas eliminar tu cuenta, escriba la siguiente frase en el cuadro de texto a continuación:" type_to_confirm: "Escriba la frase a continuación para confirmar" +he: + download_request: + section_title: "הורד את היסטוריית התגובות שלי" + you_will_get_a_copy: "תקבל הודעת דוא"ל עם קישור להורדת היסטוריית התגובות שלך. ניתן לבצע" + download_rate: "בקשת הורדה אחת בכל {0} ימים" + most_recent_request: "הבקשה האחרונה שלך" + request: "בקש היסטוריה של תגובות" + rate_limit: "תוכל לשלוח בקשה נוספת של היסטוריית תגובות ב {0}" + hours: "{0} שעות" + days: "{0} ימים" + hour: "{0} שעה" + day: "{0} יום" + download_preparing: "הורדה של החשבון שלך הכנה - בדוק את הדוא"ל שלך בקרוב עבור קישור להורדה" + delete_request: + account_deletion_cancelled: 'בקשת מחיקת החשבון בוטלה - בקשתך למחוק את החשבון שלך בוטלה.' + account_deletion_requested: 'מחיקת חשבון מבוקשת' + received_on: "בקשה למחיקת החשבון התקבלה " + cancel_request_description: "אם תרצה להפעיל מחדש את חשבונך, תוכל לבטל את בקשתך למחוק את החשבון שלך למטה" + before: "לפני" + cancel_account_deletion_request: "ביטול בקשת מחיקת חשבון" + delete_my_account: "מחק את חשבוני" + delete_my_account_description: "מחיקת החשבון תמחק את הפרופיל שלך לצמיתות ותסיר את כל התגובות שלך מאתר זה." + already_submitted_request_description: "כבר שלחת בקשה למחיקת החשבון שלך. החשבון שלך יימחק לאחר {0}. תוכל לבטל את הבקשה עד למועד זה" + your_request_submitted_description: "הבקשה שלך נשלחה ואישור נשלח לכתובת הדוא"ל המשויכת לחשבונך." + your_account_deletion_scheduled: "החשבון שלך אמור להימחק לאחר:" + changed_your_mind: "שינה את דעתך?" + simply_go_to: "פשוט עבור אל החשבון שלך שוב לפני זמן זה ולחץ" + tell_us_why: "ספר לנו למה" + feedback_copy: "ברצוננו לדעת מדוע בחרת למחוק את החשבון שלך. שלח לנו משוב על מערכת התגובה שלנו בדוא"ל" + done: "בוצע" + cancel: "בטל" + proceed: "להמשיך" + input_is_not_correct: "הקלט אינו נכון" + step_0: + you_are_attempting: "אתה מנסה למחוק את החשבון שלך. זה אומר:" + item_1: "כל התגובות שלך יוסרו מאתר זה" + item_2: "כל התשובות שלך נמחקות ממסד הנתונים שלנו" + item_3: "שם המשתמש וכתובת האימייל שלך מוסרים מהמערכת שלנו" + step_1: + subtitle: "מתי החשבון שלי יימחק?" + description: "החשבון שלך יימחק {0} שעות לאחר הגשת הבקשה." + subtitle_2: "האם אני עדיין יכול לכתוב תגובות עד למחיקת החשבון שלי?" + description_2: "כן, עדיין תוכל להגיב עד שפג תוקפו של {0} שעות." + step_2: + description: "לפני שחשבונך נמחק, אנו ממליצים לך להוריד את היסטוריית התגובות שלך עבור הרשומות שלך. לאחר מחיקת החשבון, לא תוכל לבקש את היסטוריית התגובות שלך." + to_download: "כדי להוריד את היסטוריית התגובות עבור אל:" + path: "הפרופיל שלי > הורד את ההיסטוריה של תגובות" + step_3: + subtitle: "האם אתה בטוח שברצונך למחוק את החשבון שלך?" + description: "כדי לאשר שברצונך למחוק את חשבונך, הקלד את הביטוי הבא בתיבת הטקסט שבהמשך:" + type_to_confirm: "הקלד ביטוי למטה כדי לאשר" de: download_request: section_title: "Mein Kommentar-Archiv herunterladen" From ca44588095b0e56b9dbd3f85c85809a315805cc7 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Tue, 22 Jan 2019 23:38:10 -0500 Subject: [PATCH 087/116] Add Hebrew profile translations - server --- .../talk-plugin-profile-data/translations.yml | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/plugins/talk-plugin-profile-data/translations.yml b/plugins/talk-plugin-profile-data/translations.yml index 1a4ee3b09..00ca6dcc2 100644 --- a/plugins/talk-plugin-profile-data/translations.yml +++ b/plugins/talk-plugin-profile-data/translations.yml @@ -36,43 +36,6 @@ ar: body: "لقد ألغيت طلب حذف حسابك ل {0}. تم الآن إعادة تفعيل حسابك." error: DOWNLOAD_TOKEN_INVALID: "رابط التنزيل الخاص بك غير صالح." -he: - download_landing: - download_your_account: "Download Your Comment History" - download_details: "Your comment history will be downloaded into a .zip file. After your comment history is unzipped you will have a comma separated value (or .csv) file that you can easily import into your favorite spreadsheet application." - all_information_included: "For each of your comments the following information is included:" - information_included: - date: "When you wrote the comment" - url: "The permalink URL for the comment" - body: "The comment text" - asset_url: "The URL of the article or story where the comment appears" - confirm: "Download My Comment History" - email: - download: - subject: "Your comments are ready for download from {0}" - download_link_ready: "Click here to download your comments from {0} as of {1}:" - download_archive: "Download Archive" - delete: - subject: "Your account for {0} is scheduled to be deleted" - body: | - A request to delete your account was received. Your account is scheduled for deletion on {1}. - - After that time all of your comments will be removed from the site, all of your comments will be removed from our database, and your username and email address will be removed from our system. - - If you change your mind you can sign into your account and cancel the request before your scheduled account deletion time. - deleted: - subject: "Your account for {0} has been deleted" - body: | - Your commenter account for {0} is now deleted. We're sorry to see you go! - - If you'd like to re-join the discussion in the future, you can sign up for a new account. - - If you'd like to give us feedback on why you left and what we can do to make the commenting experience better, please email us at {1}. - cancelDelete: - subject: "Your account deletion request for {0} has been cancelled" - body: "You have cancelled your account deletion request for {0}. Your account is now reactivated." - error: - DOWNLOAD_TOKEN_INVALID: "Your download link is not valid." en: download_landing: download_your_account: "Download Your Comment History" @@ -184,3 +147,40 @@ de: body: "Sie haben die Lösch-Anfrage für Ihr Benutzerkonto bei {0} abgebrochen. Das Konto ist nun wieder aktiv." error: DOWNLOAD_TOKEN_INVALID: "Der Download-Link ist ungültig." +he: + download_landing: + download_your_account: "הורד היסטורית תגובתך" + download_details: "היסטוריית התגובה שלך תועבר לקובץ zip. לאחר היסטוריית התגובה שלך הוא unzipped יהיה לך ערך מופרדים בפסיק (או. CSV) קובץ ואתה יכול בקלות לייבא לתוך היישום האהוב עליך גיליון אלקטרוני." + all_information_included: "עבור כל אחת מהתגובות את המידע הבא נכלל:" + information_included: + date: "כאשר כתבת את התגובה" + url: "כתובת האתר של הקישור עבור התגובה" + body: "טקסט התגובה" + asset_url: "כתובת האתר של הכתבה שבו מופיעה ההערה" + confirm: "הורד היסטוריית תגובות" + email: + download: + subject: "התגובות שלך מוכנות להורדה מ {0}" + download_link_ready: "לחץ כאן כדי להוריד את התגובות שלך מתוך {0} החל מ- {1}:" + download_archive: "הורד ארכיון" + delete: + subject: "החשבון שלך עבור {0} אמור להימחק" + body: | + בקשה למחיקת החשבון שלך התקבלה. החשבון שלך מתוזמן למחיקה ב- {1}. + + לאחר מכן כל התגובות שלך יוסרו מהאתר, כל התגובות שלך יוסרו ממסד הנתונים שלנו, ושם המשתמש והכתובת האימייל שלך יוסרו מהמערכת שלנו. + + אם תשנה את דעתך, תוכל להיכנס לחשבון ולבטל את הבקשה לפני מועד מחיקת החשבון המתוכנן. + deleted: + subject: "החשבון שלך עבור {0} נמחק" + body: | + חשבון המפרסם שלך עבור {0} נמחק כעת. אנחנו מצטערים לראות אותך הולך! + + אם תרצה להצטרף מחדש לדיון בעתיד, תוכל להירשם לחשבון חדש. + + אם תרצה לתת לנו משוב על הסיבות לכך שעזבת ומה ניתן לעשות כדי לשפר את חווית התגובות, שלח לנו דוא"ל לכתובת {1}. + cancelDelete: + subject: "בקשת מחיקת החשבון שלך עבור {0} בוטלה" + body: "ביטלת את בקשת מחיקת החשבון שלך עבור {0}. החשבון שלך מופעל מחדש כעת." + error: + DOWNLOAD_TOKEN_INVALID: "קישור ההורדה שלך אינו חוקי." From 6cc0c60adebed0ff4d6d6865eea7dde278b4f900 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Wed, 23 Jan 2019 00:38:53 -0500 Subject: [PATCH 088/116] Add Final hebrew translations --- locales/he.yml | 504 ++++++++++++++++++++++++------------------------- 1 file changed, 252 insertions(+), 252 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index 74bc70453..86451c755 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -1,4 +1,4 @@ -en: +he: your_account_has_been_suspended: החשבון שלך הושעה באופן זמני. your_account_has_been_banned: החשבון שלך הורחק. your_username_has_been_rejected: החשבון שלך הושעה מפני ששם המשתמש שלך נחשב לא הולם. כדי לשחזר את החשבון שלך, הזן שם משתמש חדש. @@ -41,7 +41,7 @@ en: comment_box: post: "שלח" cancel: "בטל" - reply: "תשובה" + reply: "תשיב" comment: "פרסם תגובה" name: "שם" comment_post_notif: "התגובה שלך פורסמה." @@ -57,30 +57,30 @@ en: common: copy: 'עותק' error: 'אירעה שגיאה.' - reply: 'הגבה' - replies: 'replies' - reaction: 'reaction' - reactions: 'reactions' + reply: 'תשובה' + replies: 'תשובות' + reaction: 'ריאקציה' + reactions: 'ריאקציות' story: 'כתבה' flagged_usernames: - notify_approved: '{0} approved username {1}' - notify_rejected: '{0} rejected username {1}' - notify_flagged: '{0} reported username {1}' - notify_changed: 'user {0} changed their username to {1}' + notify_approved: '{0} אישר את שם המשתמש {1}' + notify_rejected: '{0} דחה את שם המשתמש {1}' + notify_flagged: '{0} דיווח על שם המשתמש {1}' + notify_changed: 'המשתמש {0} שינה את שם המשתמש שלו ל {1}' community: account_creation_date: "תאריך היצירה של החשבון" active: פעיל admin: מנהל ads_marketing: "זה נראה כמו מודעה / שיווק" - are_you_sure: "Are you sure you would like to ban {0}?" + are_you_sure: "האם אתה בטוח שברצונך לאסור {0}?" ban_user: "חסום משתמש?" banned: אסור banned_user: "משתמש מורשה" cancel: בטל dont_like_username: "לא אוהב את שם המשתמש" - flaggedaccounts: "Reported Usernames" - flags: Flags - impersonating: "Impersonation" + flaggedaccounts: "שמות משתמש שדווחו" + flags: דגלים + impersonating: "התחזות" loading: "טוען תוצאות" moderator: מנהל newsroom_role: "תפקיד בחדר החדשות" @@ -125,163 +125,163 @@ en: domain_list_text: "הזן את הדומיינים שברצונך להרשות עבור Talk. כלומר, סביבות האחסון הזמני וההפקה המקומית שלך (לדוגמה localhost: 3000, staging.domain.com, domain.com)." domain_list_title: "דומיינים מותרים" edit_comment_timeframe_heading: "עריכת מסגרת זמן של תגובה" - edit_comment_timeframe_text_pre: "Commenters will have" + edit_comment_timeframe_text_pre: "למשתמשים יהיו" edit_comment_timeframe_text_post: "שניות כדי לערוך את התגובות שלהם." - embed_comment_stream: "Embed Stream" - enable_premod_links_text: "Moderators must approve any comment containing a link before it is published." + embed_comment_stream: "הטמע את הזרם" + enable_premod_links_text: "על המתווכים לאשר כל תגובה המכילה קישור לפני פרסומה." enable_pre_moderation: "אפשר התנהלות מראש" enable_pre_moderation_text: "על המנחים לאשר כל הערה לפני פרסומה." - enable_premod_links: "Pre-Moderate Comments Containing Links" - enable_premod: "Enable Premoderation" + enable_premod_links: "תגובות המכילות קישורים צריך להיות מנוהל מראש" + enable_premod: "אפשר התנהלות מראש" enable_premod_description: "על המנחים לאשר כל הערה לפני פרסומה." - enable_premod_links_description: "Moderators must approve any comment containing a link before it is published." - enable_questionbox: "Ask Readers a Question" - enable_questionbox_description: "This question will appear at the top of this comment stream. Ask readers about a certain issue in the article or pose discussion questions etc." - hours: Hours - include_comment_stream: "Include Comment Stream Description for Readers" - include_comment_stream_desc: "Write a message to be added to the top of your comment stream. Pose a topic include community guidelines etc." - include_text: "Include your text here." - include_question_here: "Write your question here:" - moderate: Moderate - moderation_settings: "Moderation Settings" - open: "Open" - open_stream: "Open Stream" - open_stream_configuration: "This comment stream is currently open. By closing this comment stream no new comments may be submitted and all previous comments will still be displayed." - require_email_verification: "Require Email Verification" - require_email_verification_text: "New Users must verify their email before commenting" - save_changes: "Save Changes" - shortcuts: Shortcuts - sign_out: "Sign Out" - stories: Stories - stream_settings: "Stream Settings" - suspect_word_title: "Suspect words list" - suspect_word_text: "Comments which contain these words or phrases (not case-sensitive) will be highlighted in the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." - tech_settings: "Tech Settings" - title: "Configure Comment Stream" - weeks: Weeks - wordlist: "Banned Words" - continue: "Continue" + enable_premod_links_description: "על המתווכים לאשר כל תגובה המכילה קישור לפני פרסומה." + enable_questionbox: "שאל את הקוראים שאלה" + enable_questionbox_description: "שאלה זו תופיע בחלק העליון של זרם תגובות זה. לשאול את הקוראים על בעיה מסוימת במאמר או להציג שאלות דיון וכו '" + hours: שעות + include_comment_stream: "כלול תיאור בזרם תגובות עבור הקוראים" + include_comment_stream_desc: "כתוב הודעה שתופיע בחלק העליון של זרם התגובה שלך. הוסף נושא להנחיות הקהילה וכו '." + include_text: "כלול את הטקסט שלך כאן." + include_question_here: "כתוב את השאלה שלך כאן:" + moderate: מתון + moderation_settings: "הגדרות פיקוח" + open: "פתח" + open_stream: "פתח את הזרם" + open_stream_configuration: "זרם תגובות זה פתוח כעת. על ידי סגירת זרם תגובות זה לא ניתן להגיש תגובות חדשות וכל התגובות הקודמות עדיין יוצגו." + require_email_verification: "דרוש אימות דוא"ל" + require_email_verification_text: "משתמשים חדשים חייבים לאמת את הדוא"ל שלהם לפני שתגיב" + save_changes: "שמור שינויים" + shortcuts: קיצורי דרך + sign_out: "התנתק" + stories: כתבות + stream_settings: "הגדרות זרם" + suspect_word_title: "רשימת מילים חשוד" + suspect_word_text: "תגובות שמכילות מילים או ביטויים אלה (לא תלויי רישיות) יודגשו בזרם התגובות. הקלד מילה ולחץ על Enter או על Tab כדי להוסיף. אפשר להדביק רשימה מופרדת בפסיקים." + tech_settings: "הגדרות טכנולוגיה" + title: "הגדר זרם תגובות" + weeks: שבועות + wordlist: "מילים אסורות" + continue: "המשך" createdisplay: - check_the_form: "Invalid Form. Please check the fields" - continue: "Continue with the same Facebook username" - error_create: "Error when changing username" - fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section." - fake_comment_date: "1 minute ago" - if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments." - required_field: "Required field" - save: Save - special_characters: "Usernames can contain letters numbers and _ only" + check_the_form: "טופס לא חוקי. בדוק את השדות" + continue: "המשך עם אותו שם משתמש ב- Facebook" + error_create: "שגיאה בעת שינוי שם המשתמש" + fake_comment_body: "זוהי תגובה לדוגמה. הקוראים יכולים לשתף את מחשבותיהם ואת דעותיהם עם צוות החדשות בקטע התגובות." + fake_comment_date: "לפני 1 דקה" + if_you_dont_change_your_name: "אם לא תשנה את שם המשתמש שלך בשלב זה שם התצוגה שלך ב- Facebook יופיע לצד כל ההערות שלך." + required_field: "שדה נדרש" + save: שמור + special_characters: "שמות משתמש יכולים להכיל מספרי אותיות ו- _ בלבד" username: שם משתמש - write_your_username: "Edit your username" - your_username: "Your username appears on every comment you post." - done: Done + write_your_username: "ערוך את שם המשתמש שלך" + your_username: "שם המשתמש שלך מופיע בכל תגובה שתפרסם." + done: בוצע edit_comment: - body_input_label: "Edit this comment" - save_button: "Save changes" - edit_window_expired: "You can no longer edit this comment. The time window to do so has expired. Why not post another one?" - edit_window_expired_close: "Close" - edit_window_timer_prefix: "Edit Window: " - second: "second" - seconds_plural: "seconds" - minute: "minute" - minutes_plural: "minutes" + body_input_label: "ערוך תגובה זו" + save_button: "שמור שינויים" + edit_window_expired: "לא ניתן עוד לערוך את ההערה הזו. פרק הזמן לביצוע זה פג. למה לא לכתוב עוד אחד?" + edit_window_expired_close: "סגור" + edit_window_timer_prefix: "פרק זמן זה לעריכה: " + second: "שנייה" + seconds_plural: "שניות" + minute: "דקה" + minutes_plural: "דקות" email: suspended: - subject: "Your account has been suspended" + subject: "חשבונך הושעה" banned: - subject: "Your account has been banned" - body: "In accordance with The Coral Project’s community guidelines, your account has been banned. You are now longer allowed to comment, flag or engage with our community." + subject: "החשבון שלך הורחק" + body: "בהתאם להנחיות הקהילה של פרויקט אלמוגים, החשבון שלך נאסר. כעת אתה מורשה יותר להגיב, לדגל או ליצור מעורבות עם הקהילה שלנו." confirm: - has_been_requested: "A email confirmation has been requested for the following account:" - to_confirm: "To confirm the account, please visit the following link:" - confirm_email: "Confirm Email" - if_you_did_not: "If you did not request this, you can safely ignore this email." - subject: "Email Confirmation" + has_been_requested: "התבקש אישור בדוא"ל עבור החשבון הבא:" + to_confirm: "כדי לאשר את החשבון, בקר בקישור הבא:" + confirm_email: "אשר אימייל" + if_you_did_not: "אם לא ביקשת זאת, תוכל להתעלם בבטחה מדוא"ל זה." + subject: "אישור דואר אלקטרוני" password_reset: - we_received_a_request: "We received a request to reset your password. If you did not request this change, you can ignore this email." - if_you_did: "If you did," - please_click: "please click here to reset password" + we_received_a_request: "קיבלנו בקשה לאפס את הסיסמה שלך. אם לא ביקשת שינוי זה, תוכל להתעלם מהודעת אימייל זו." + if_you_did: "אם עשית," + please_click: "לחץ כאן כדי לאפס את הסיסמה" embedlink: copy: "העתק ללוח" error: - COMMENT_PARENT_NOT_VISIBLE: "The comment that you're replying to has been removed or doesn't exist." - EMAIL_VERIFICATION_TOKEN_INVALID: "Email verification token is invalid." - PASSWORD_RESET_TOKEN_INVALID: "Your password reset link is invalid." - COMMENT_TOO_SHORT: "Comments should be more than one character, please revise your comment and try again." - NOT_AUTHORIZED: "You are not authorized to perform this action." - NO_SPECIAL_CHARACTERS: "Usernames can contain letters numbers and _ only" - PASSWORD_LENGTH: "Password is too short" - PROFANITY_ERROR: "Usernames must not contain profanity. Please contact the administrator if you believe this to be in error." - RATE_LIMIT_EXCEEDED: "Rate limit exceeded" - USERNAME_IN_USE: "Username already in use" - USERNAME_REQUIRED: "Must input a username" - EMAIL_NOT_VERIFIED: "E-mail address not verified" - EDIT_WINDOW_ENDED: "You can no longer edit this comment. The time window to do so has expired." - EDIT_USERNAME_NOT_AUTHORIZED: "You do not have permission to update your username." - SAME_USERNAME_PROVIDED: "You must submit a different username." - EMAIL_IN_USE: "Email address already in use" - EMAIL_REQUIRED: "An email address is required" - LOGIN_MAXIMUM_EXCEEDED: "You have made too many unsuccessful password attempts. Please wait." - PASSWORD_REQUIRED: "Must input a password" - COMMENTING_CLOSED: "Commenting is already closed" - NOT_FOUND: "Resource not found" - ALREADY_EXISTS: "Resource already exists" - INVALID_ASSET_URL: "Assert URL is invalid" - CANNOT_IGNORE_STAFF: "Cannot ignore Staff members." - email: "Not a valid E-Mail" - confirm_password: "Passwords don't match. Please check again" - network_error: "Failed to connect to server. Check your internet connection and try again." - email_not_verified: "E-mail address {0} not verified." - email_password: "E-mail and/or password combination incorrect." - organization_name: "Organization name must only contain letters or numbers." - password: "Password must be at least 8 characters" - username: "Usernames can contain letters numbers and _ only" - unexpected: "Unexpected error occurred. Sorry!" - required_field: "This field is required" - temporarily_suspended: "Your account is currently suspended. It will be reactivated {0}. Please contact us if you have any questions." - flag_comment: "Report comment" - flag_reason: "Reason for reporting (Optional)" - flag_username: "Report username" + COMMENT_PARENT_NOT_VISIBLE: "התגובה שאתה משיב לה הוסרה או אינה קיימת." + EMAIL_VERIFICATION_TOKEN_INVALID: "אסימון האימייל אינו חוקי." + PASSWORD_RESET_TOKEN_INVALID: "הקישור לאיפוס הסיסמה אינו חוקי." + COMMENT_TOO_SHORT: "התגובות צריכות להיות יותר מתו אחד, אנא שנה את תגובתך ונסה שוב." + NOT_AUTHORIZED: "אינך מורשה לבצע פעולה זו." + NO_SPECIAL_CHARACTERS: "שמות משתמש יכולים להכיל מספרי אותיות ו- _ בלבד" + PASSWORD_LENGTH: "הסיסמה קצרה מדי" + PROFANITY_ERROR: "שמות משתמש לא יכולים להכיל גסות. פנה למנהל המערכת אם אתה סבור שמדובר בטעות." + RATE_LIMIT_EXCEEDED: "חרגת מגבלת התעריף" + USERNAME_IN_USE: "שם משתמש כבר בשימוש" + USERNAME_REQUIRED: "חייב להזין שם משתמש" + EMAIL_NOT_VERIFIED: "כתובת האימייל לא אומתה" + EDIT_WINDOW_ENDED: "לא ניתן עוד לערוך את התגובה הזו. פרק הזמן לביצוע זה פג." + EDIT_USERNAME_NOT_AUTHORIZED: "אין לך הרשאה לעדכן את שם המשתמש שלך." + SAME_USERNAME_PROVIDED: "עליך לשלוח שם משתמש אחר." + EMAIL_IN_USE: "כתובת הדוא"ל כבר בשימוש" + EMAIL_REQUIRED: "נדרשת כתובת דוא"ל" + LOGIN_MAXIMUM_EXCEEDED: "עשית יותר מדי ניסיונות סיסמה לא מוצלחים. המתן בבקשה." + PASSWORD_REQUIRED: "יש להזין סיסמה" + COMMENTING_CLOSED: "התגובה כבר סגורה" + NOT_FOUND: "זרם התגובה כבר סגור" + ALREADY_EXISTS: "המשאב כבר קיים" + INVALID_ASSET_URL: "כתובת האתר של הנכס אינה חוקית" + CANNOT_IGNORE_STAFF: "לא ניתן להתעלם מחברי צוות." + email: "אימייל לא חוקי" + confirm_password: "סיסמאות אינן תואמות. אנא בדוק שוב" + network_error: "נכשל נסיון להתחבר לשרת. בדוק את חיבור האינטרנט שלך ונסה שוב." + email_not_verified: "כתובת האימייל {0} לא אומתה." + email_password: "שילוב דואר אלקטרוני ו / או סיסמה שגוי." + organization_name: "שם הארגון חייב להכיל רק אותיות או מספרים." + password: "הסיסמה צריכה להיות לפחות 8 תווים" + username: "שמות משתמש יכולים להכיל מספרי אותיות ו- _ בלבד" + unexpected: "אירעה שגיאה לא צפויה. מצטער!" + required_field: "שדה חובה" + temporarily_suspended: "החשבון שלך מושעה כעת. הוא יופעל מחדש {0}. אנא צור איתנו קשר אם יש לך שאלות." + flag_comment: "דווח על תגובה" + flag_reason: "סיבה לדיווח (אופציונלי)" + flag_username: "דווח על שם משתמש" framework: - banned_account_header: "Your account is currently banned." - banned_account_body: "This means that you cannot Like, Report, or write comments." - comment: comment - comment_is_ignored: "This comment is hidden because you ignored this user." - comment_is_rejected: "You have rejected this comment." - comment_is_hidden: "This comment is not available." - comments: comments - configure_stream: "Configure" - content_not_available: "This content is not available" + banned_account_header: "החשבון שלך מוחרם כעת." + banned_account_body: "פירוש הדבר שאינך אוהב, לדווח או לכתוב תגובות." + comment: תגובה + comment_is_ignored: "תגובה זו מוסתרת מפני שהתעלמת ממשתמש זה." + comment_is_rejected: "דחית את התגובה הזו." + comment_is_hidden: "תגובה זו אינה זמינה." + comments: תגובות + configure_stream: "הגדר" + content_not_available: "תוכן זה אינו זמין" edit_name: - button: Submit - error: "Usernames can contain letters numbers and _ only" - label: "New Username" - msg: "Your account is currently suspended because your username has been deemed inappropriate. To restore your account please enter a new username. Please contact us if you have any questions." + button: שלח + error: "שמות משתמש יכולים להכיל מספרי אותיות ו- _ בלבד" + label: "שם משתמש חדש" + msg: "החשבון שלך מושעה כרגע מפני ששם המשתמש שלך נחשב לא הולם. כדי לשחזר את החשבון שלך, הזן שם משתמש חדש. אנא צור איתנו קשר אם יש לך שאלות." changed_name: - msg: "Your username change is under review by our moderation team." - my_comments: "My Comments" - my_profile: "My profile" - new_count: "View {0} more {1}" - profile: Profile - show_all_comments: "Show all comments" - success_bio_update: "Your biography has been updated" - success_name_update: "Your username has been updated" - success_update_settings: "The changes you have made have been applied to the comment stream on this article" - show_all_replies: Show all replies - show_more_replies: Show more replies - view_more_comments: "view more comments" - view_reply: "view reply" - from_settings_page: "From the Profile Page you can see your comment history." - like: Like - loading_results: "Loading Results" - marketing: "This looks like an ad/marketing" - moderate_this_stream: "Moderate this stream" + msg: "שינוי שם המשתמש שלך נמצא בבדיקה על ידי צוות הניהול שלנו." + my_comments: "התגובות שלי" + my_profile: "הפרופיל שלי" + new_count: "הצג {0} עוד {1}" + profile: פרופיל + show_all_comments: "הצג את כל התגובות" + success_bio_update: "הביוגרפיה שלך עודכנה" + success_name_update: "שם המשתמש שלך עודכן" + success_update_settings: "השינויים שביצעת הוחלו על זרם התגובה בכתבה זה" + show_all_replies: הצג את כל התשובות + show_more_replies: הצג תשובות נוספות + view_more_comments: "הצג תגובות נוספות" + view_reply: "הצג תשובה" + from_settings_page: "בדף הפרופיל תוכל לראות את היסטוריית התגובות שלך." + like: לייק + loading_results: "טוען תוצאות" + marketing: "זה נראה כמו מודעה / שיווק" + moderate_this_stream: "נהל את הזרם הזה" flags: reasons: user: username_offensive: "פוגע" username_nolike: "לא אוהב" - username_impersonating: "Impersonation" + username_impersonating: "התחזות" username_spam: "ספאם" username_other: "אחר" comment: @@ -295,125 +295,125 @@ en: trust: "אמון" links: "קישור" modqueue: - account: "account flags" + account: "דגלים של החשבון" actions: פעולות - all: all - all_streams: "All Streams" - notify_edited: '{0} edited comment "{1}"' - notify_accepted: '{0} accepted comment "{1}"' - notify_rejected: '{0} rejected comment "{1}"' - notify_flagged: '{0} flagged comment "{1}"' - notify_reset: '{0} reset status of comment "{1}"' - approve: "Approve" - approved: "Approved" - ban_user: "Ban" - billion: B - close: Close - empty_queue: "No more comments to moderate! You're all caught up. Go have some ☕️" - flagged: flagged - reported: reported - less_detail: "Less detail" - likes: likes - million: M - mod_faster: "Moderate faster with keyboard shortcuts" - moderate: "Moderate →" - more_detail: "More detail" - new: New - newest_first: "Newest First" - navigation: Navigation - next_comment: "Go to the next comment" - toggle_search: "Open search" - next_queue: "Switch queues" - oldest_first: "Oldest First" - premod: pre-mod - prev_comment: "Go to the previous comment" - reject: "Reject" - rejected: "Rejected" - reply: "Reply" - select_stream: "Select Stream" + all: הכל + all_streams: "כל הזרמים" + notify_edited: '{0} ערך תגובה "{1}"' + notify_accepted: '{0} קיבל תגובה "{1}"' + notify_rejected: '{0} דחה תגובה "{1}"' + notify_flagged: '{0} דגל תגובה "{1}"' + notify_reset: '{0} אפס את סטטוס התגובה "{1}"' + approve: "אישרו" + approved: "אושר" + ban_user: "חסום" + billion: ב + close: סגור + empty_queue: "אין תגובות נוספות כדי להתמתן! כולכם תקועים. לכי וליהנות קצת ☕️" + flagged: מסומנת + reported: דיווח + less_detail: "פחות פרטים" + likes: לייקס + million: מ + mod_faster: "מתון מהר יותר עם קיצורי מקשים" + moderate: "מתון ←" + more_detail: "פרטים נוספים" + new: חדש + newest_first: "הכי חדש קודם" + navigation: ניווט + next_comment: "עבור לתגובה הבאה" + toggle_search: "פתח חיפוש" + next_queue: "הפעל תורים" + oldest_first: "הכי עתיק קודם" + premod: מתינות מראש + prev_comment: "עבור לתגובה הקודמת" + reject: "דחה" + rejected: "נדחה" + reply: "תשיב" + select_stream: "בחר זרם" shift_key: "⇧" - shortcuts: "Shortcuts" - sort: "Sort" - show_shortcuts: "Show Shortcuts" - singleview: "Zen mode" - thismenu: "Open this menu" - jump_to_queue: "Jump to specific queue" + shortcuts: "קיצורי דרך" + sort: "מיין" + show_shortcuts: "הצג קיצורי דרך" + singleview: "מצב זן" + thismenu: "פתח את התפריט" + jump_to_queue: "קפיצה לתור ספציפי" thousand: k - try_these: "Try these" - view_more_shortcuts: "View more shortcuts" - my_comment_history: "My comment History" - name: Name - no_agree_comment: "I don't agree with this comment" - no_like_bio: "I don't like this bio" - no_like_username: "I don't like this username" - already_flagged_username: "You have already flagged this username." - other: Other - permalink: Share - personal_info: "This comment reveals personally identifiable information" - post: Post - profile: Profile - profile_settings: "Profile Settings" - reply: Reply - report: Report - report_notif: "Thank you for reporting this comment. Our moderation team has been notified and will review it shortly." - report_notif_remove: "Your report has been removed." - reported: Reported + try_these: "נסה את אלה" + view_more_shortcuts: "הצג קיצורי דרך נוספים" + my_comment_history: "ההיסטוריה של התגובות שלי" + name: שם + no_agree_comment: "אני לא מסכים עם תגובה זו" + no_like_bio: "אני לא אוהב את הביוגרפיה הזאת" + no_like_username: "אני לא אוהב את שם המשתמש הזה" + already_flagged_username: "כבר סימנת שם משתמש זה." + other: אחר + permalink: שתף + personal_info: "תגובה זו מגלה מידע המאפשר זיהוי אישי" + post: שלח + profile: פרופיל + profile_settings: "הגדרות פרופיל" + reply: תשיב + report: דווח + report_notif: "תודה שדיווחת על תגובה זו. צוות ההתייחסות שלנו קיבל הודעה על כך ויבדוק אותו בקרוב." + report_notif_remove: "הדוח שלך הוסר." + reported: דווח settings: - from_settings_page: "From the Profile Page you can see your comment history." - my_comment_history: "My comment History" - profile: Profile - profile_settings: "Profile Settings" - sign_in: "Sign in" - to_access: "to access Profile" - user_no_comment: "You've never left a comment. Join the conversation!" + from_settings_page: "בדף הפרופיל תוכל לראות את היסטוריית התגובות שלך." + my_comment_history: "ההיסטוריה של התגובות שלי" + profile: פרופיל + profile_settings: "הגדרות פרופיל" + sign_in: "היכנס" + to_access: "כדי לגשת לפרופיל" + user_no_comment: "מעולם לא השארת תגובה. הצטרף לשיחה!" stream: - all_comments: "All Comments" - temporarily_suspended: "In accordance with {0}'s community guidelines, your account has been temporarily suspended. Please rejoin the conversation {1}." - comment_not_found: "This comment has been removed or does not exist." - no_comments: "There are no comments yet, why don’t you write one?" - no_comments_and_closed: "There were no comments on this article." - step_1_header: "Report an issue" - step_2_header: "Help us understand" - step_3_header: "Thank you for your input" + all_comments: "כל התגובות" + temporarily_suspended: "בהתאם להנחיות הקהילה {0}, חשבונך הושעה באופן זמני. חזור לשיחה {1}." + comment_not_found: "תגובה זו הוסרה או אינה קיימת." + no_comments: "עדיין אין תגובות. האם אתה רוצה לכתוב אחד?" + no_comments_and_closed: "לא היו תגובות על כתבה זה." + step_1_header: "דווח על בעיה" + step_2_header: "עזור לנו להבין" + step_3_header: "תודה על הקלט שלך" streams: - all: All - article: Story - closed: Closed - empty_result: "No assets match this search. Maybe try widening your search?" - filter_streams: "Filter Streams" + all: הכל + article: כתבה + closed: סגור + empty_result: "אין נכסים שמתאימים לחיפוש זה. אולי לנסות להרחיב את החיפוש שלך?" + filter_streams: "סינון זרמים" newest: החדש ביותר oldest: הוותיק ביותר - open: Open - pubdate: "Publication Date" - search: Search - sort_by: "Sort By" - status: "Stream Status" - stream_status: "Stream Status" + open: פתח + pubdate: "תאריך פרסום" + search: לחפש + sort_by: "מיין לפי" + status: "מצב זרם" + stream_status: "מצב זרם" suspenduser: - title_suspend: "Suspend User" - description_suspend: "You are suspending {0}. This comment will go to the Rejected queue, and {0} will not be allowed to like, report, reply or post until the suspension time is complete." - select_duration: "Select suspension duration" - one_hour: "1 hour" - hours: "{0} hours" - days: "{0} days" + title_suspend: "להשעות משתמש" + description_suspend: "אתה משעה את {0}. תגובה זו תעבור לתור נדחה, ו- {0} לא יהיה יכול ללייק, לדווח, להשיב או לפרסם עד להשלמת זמן ההשעיה." + select_duration: "בחר משך השעיה" + one_hour: "1 שעה" + hours: "{0} שעות" + days: "{0} ימים" cancel: "בטל" - suspend_user: "Suspend User" - email_message_suspend: "Dear {0},\n\nIn accordance with {1}’s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}." - title_notify: "Notify the user of their temporary suspension" - notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." - description_notify: "Suspending this user will temporarily disable their account." + suspend_user: "להשעות משתמש" + email_message_suspend: "{0}, \n\n בהתאם להנחיות הקהילה {1}, חשבונך הושעה באופן זמני. במהלך ההשעיה, לא תוכל להגיב, לדגל או לשתף פעולה עם מפרסמים אחרים. חזור לשיחה {2}." + title_notify: "הודע למשתמש על השעיה זמנית" + notify_suspend_until: "המשתמש {0} הושעה באופן זמני. ההשעיה הזו תסתיים באופן אוטומטי {1}." + description_notify: "השעיית משתמש זה תשבית זמנית את החשבון שלו." write_message: "לכתוב הודעה" send: שלח reject_username: username: שם משתמש no_cancel: "אין ביטול" - description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}." - title_notify: "Notify the user of their temporary suspension" - description_notify: "Suspending this user will temporarily disable their account." - title_reject: "We noticed you rejected a username" - suspend_user: "Suspend User" - yes_suspend: "Yes suspend" - email_message_reject: "Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please e-mail us if you have any questions or concerns." + description_reject: "האם אתה רוצה לאסור את המשתמש הזה באופן זמני בגלל {0} שלו? פעולה זו תשעה את המשתמש הזה באופן זמני עד שיכתבו מחדש את {0}." + title_notify: "הודע למשתמש על השעיה זמנית" + description_notify: "השעיית משתמש זה תשבית זמנית את החשבון שלו." + title_reject: "שמנו לב שדחית שם משתמש" + suspend_user: "להשעות משתמש" + yes_suspend: "כן, להשעות" + email_message_reject: "לאחרונה חבר בקהילה שלנו סימן את שם המשתמש שלך לבדיקה. בגלל התוכן של שם המשתמש שלך, שם המשתמש שלך נדחה. פירוש הדבר שאינך יכול עוד להגיב או לסמן תוכן עד שתשנה את שם המשתמש שלך. אנא שלח לנו דוא"ל אם יש לך שאלות או חששות." write_message: "לכתוב הודעה" send: שלח thank_you: "אנו מעריכים את בטיחותך ומשובך. מנחה יסקור את הדוח שלך." From 905e43e745b3c469150e38e90f43a46a91a1bdb2 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Wed, 23 Jan 2019 00:41:29 -0500 Subject: [PATCH 089/116] Remove deleted plugin --- .../client/translations.yml | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 plugins/talk-plugin-profile-settings/client/translations.yml diff --git a/plugins/talk-plugin-profile-settings/client/translations.yml b/plugins/talk-plugin-profile-settings/client/translations.yml deleted file mode 100644 index a1b1aec5d..000000000 --- a/plugins/talk-plugin-profile-settings/client/translations.yml +++ /dev/null @@ -1,30 +0,0 @@ -de: - talk-plugin-profile-settings: - tab: Einstellungen -en: - talk-plugin-profile-settings: - tab: Settings -es: - talk-plugin-profile-settings: - tab: Configuración -fr: - talk-plugin-profile-settings: - tab: Paramètres -he: - talk-plugin-profile-settings: - tab: הגדרות -nl_NL: - talk-plugin-profile-settings: - tab: Instellingen -da: - talk-plugin-profile-settings: - tab: Indstillinger -pt_PR: - talk-plugin-profile-settings: - tab: Configurações -zh_TW: - talk-plugin-profile-settings: - tab: 設置 -zh_CN: - talk-plugin-profile-settings: - tab: 设置 From fa42c028dfba924679ae3ebb15599c938462824a Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Wed, 23 Jan 2019 00:45:31 -0500 Subject: [PATCH 090/116] Fix quotes --- locales/he.yml | 22 +++++++++---------- .../client/translations.yml | 8 +++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index 86451c755..93878b616 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -15,7 +15,7 @@ he: write_a_message: "כתוב הודעה" send: "שלח" notify_ban_headline: "הודע למשתמש על האיסור" - notify_ban_description: "פעולה זו תודיע למשתמש בדוא"ל שהם נאסרו מהקהילה" + notify_ban_description: 'פעולה זו תודיע למשתמש בדוא"ל שהם נאסרו מהקהילה' email_message_ban: "{0},\n\nמישהו עם גישה לחשבון שלך הפר את הנחיות הקהילה שלנו. כתוצאה מכך, החשבון שלך נאסר. לא תוכל עוד להגיב, לדווח או לדווח על תגובות. אם אתה חושב שהדבר נעשה בטעות, צור קשר עם צוות הקהילה שלנו." bio_offensive: "ביו זה פוגע" cancel: "בטל" @@ -94,7 +94,7 @@ he: spam_ads: "ספאם / מודעות" staff: "צוות" status: סטטוס - username_and_email: "שם משתמש ודוא"ל" + username_and_email: 'שם משתמש ודוא"ל' yes_ban_user: "כן. חסום משתמש" commenter: "מגיב" configure: @@ -147,8 +147,8 @@ he: open: "פתח" open_stream: "פתח את הזרם" open_stream_configuration: "זרם תגובות זה פתוח כעת. על ידי סגירת זרם תגובות זה לא ניתן להגיש תגובות חדשות וכל התגובות הקודמות עדיין יוצגו." - require_email_verification: "דרוש אימות דוא"ל" - require_email_verification_text: "משתמשים חדשים חייבים לאמת את הדוא"ל שלהם לפני שתגיב" + require_email_verification: 'דרוש אימות דוא"ל' + require_email_verification_text: 'משתמשים חדשים חייבים לאמת את הדוא"ל שלהם לפני שתגיב' save_changes: "שמור שינויים" shortcuts: קיצורי דרך sign_out: "התנתק" @@ -192,10 +192,10 @@ he: subject: "החשבון שלך הורחק" body: "בהתאם להנחיות הקהילה של פרויקט אלמוגים, החשבון שלך נאסר. כעת אתה מורשה יותר להגיב, לדגל או ליצור מעורבות עם הקהילה שלנו." confirm: - has_been_requested: "התבקש אישור בדוא"ל עבור החשבון הבא:" + has_been_requested: 'התבקש אישור בדוא"ל עבור החשבון הבא:' to_confirm: "כדי לאשר את החשבון, בקר בקישור הבא:" confirm_email: "אשר אימייל" - if_you_did_not: "אם לא ביקשת זאת, תוכל להתעלם בבטחה מדוא"ל זה." + if_you_did_not: 'אם לא ביקשת זאת, תוכל להתעלם בבטחה מדוא"ל זה.' subject: "אישור דואר אלקטרוני" password_reset: we_received_a_request: "קיבלנו בקשה לאפס את הסיסמה שלך. אם לא ביקשת שינוי זה, תוכל להתעלם מהודעת אימייל זו." @@ -219,8 +219,8 @@ he: EDIT_WINDOW_ENDED: "לא ניתן עוד לערוך את התגובה הזו. פרק הזמן לביצוע זה פג." EDIT_USERNAME_NOT_AUTHORIZED: "אין לך הרשאה לעדכן את שם המשתמש שלך." SAME_USERNAME_PROVIDED: "עליך לשלוח שם משתמש אחר." - EMAIL_IN_USE: "כתובת הדוא"ל כבר בשימוש" - EMAIL_REQUIRED: "נדרשת כתובת דוא"ל" + EMAIL_IN_USE: 'כתובת הדוא"ל כבר בשימוש' + EMAIL_REQUIRED: 'נדרשת כתובת דוא"ל' LOGIN_MAXIMUM_EXCEEDED: "עשית יותר מדי ניסיונות סיסמה לא מוצלחים. המתן בבקשה." PASSWORD_REQUIRED: "יש להזין סיסמה" COMMENTING_CLOSED: "התגובה כבר סגורה" @@ -413,7 +413,7 @@ he: title_reject: "שמנו לב שדחית שם משתמש" suspend_user: "להשעות משתמש" yes_suspend: "כן, להשעות" - email_message_reject: "לאחרונה חבר בקהילה שלנו סימן את שם המשתמש שלך לבדיקה. בגלל התוכן של שם המשתמש שלך, שם המשתמש שלך נדחה. פירוש הדבר שאינך יכול עוד להגיב או לסמן תוכן עד שתשנה את שם המשתמש שלך. אנא שלח לנו דוא"ל אם יש לך שאלות או חששות." + email_message_reject: 'לאחרונה חבר בקהילה שלנו סימן את שם המשתמש שלך לבדיקה. בגלל התוכן של שם המשתמש שלך, שם המשתמש שלך נדחה. פירוש הדבר שאינך יכול עוד להגיב או לסמן תוכן עד שתשנה את שם המשתמש שלך. אנא שלח לנו דוא"ל אם יש לך שאלות או חששות.' write_message: "לכתוב הודעה" send: שלח thank_you: "אנו מעריכים את בטיחותך ומשובך. מנחה יסקור את הדוח שלך." @@ -427,7 +427,7 @@ he: remove_ban: "הסרת חסימה" ban: "לחסום משתמש" member_since: "חבר מאז" - email: "דוא"ל" + email: 'דוא"ל' total_comments: "סה"כ תגובות" reject_rate: "שיעור דחייה" reports: "דיווחים" @@ -443,7 +443,7 @@ he: description: "בואו נגדיר את קהילת Talk שלך בכמה שלבים קצרים בלבד." submit: "תחל" add_organization: - description: "ספר לנו את שם הארגון שלך. פעולה זו תופיע בדוא"ל בעת הזמנת חברי צוות חדשים." + description: 'ספר לנו את שם הארגון שלך. פעולה זו תופיע בדוא"ל בעת הזמנת חברי צוות חדשים.' label: "שם ארגון" save: "שמור" create: diff --git a/plugins/talk-plugin-profile-data/client/translations.yml b/plugins/talk-plugin-profile-data/client/translations.yml index e2a8184db..6ee07d371 100644 --- a/plugins/talk-plugin-profile-data/client/translations.yml +++ b/plugins/talk-plugin-profile-data/client/translations.yml @@ -154,7 +154,7 @@ es: he: download_request: section_title: "הורד את היסטוריית התגובות שלי" - you_will_get_a_copy: "תקבל הודעת דוא"ל עם קישור להורדת היסטוריית התגובות שלך. ניתן לבצע" + you_will_get_a_copy: 'תקבל הודעת דוא"ל עם קישור להורדת היסטוריית התגובות שלך. ניתן לבצע' download_rate: "בקשת הורדה אחת בכל {0} ימים" most_recent_request: "הבקשה האחרונה שלך" request: "בקש היסטוריה של תגובות" @@ -163,7 +163,7 @@ he: days: "{0} ימים" hour: "{0} שעה" day: "{0} יום" - download_preparing: "הורדה של החשבון שלך הכנה - בדוק את הדוא"ל שלך בקרוב עבור קישור להורדה" + download_preparing: 'הורדה של החשבון שלך הכנה - בדוק את הדוא"ל שלך בקרוב עבור קישור להורדה' delete_request: account_deletion_cancelled: 'בקשת מחיקת החשבון בוטלה - בקשתך למחוק את החשבון שלך בוטלה.' account_deletion_requested: 'מחיקת חשבון מבוקשת' @@ -174,12 +174,12 @@ he: delete_my_account: "מחק את חשבוני" delete_my_account_description: "מחיקת החשבון תמחק את הפרופיל שלך לצמיתות ותסיר את כל התגובות שלך מאתר זה." already_submitted_request_description: "כבר שלחת בקשה למחיקת החשבון שלך. החשבון שלך יימחק לאחר {0}. תוכל לבטל את הבקשה עד למועד זה" - your_request_submitted_description: "הבקשה שלך נשלחה ואישור נשלח לכתובת הדוא"ל המשויכת לחשבונך." + your_request_submitted_description: 'הבקשה שלך נשלחה ואישור נשלח לכתובת הדוא"ל המשויכת לחשבונך.' your_account_deletion_scheduled: "החשבון שלך אמור להימחק לאחר:" changed_your_mind: "שינה את דעתך?" simply_go_to: "פשוט עבור אל החשבון שלך שוב לפני זמן זה ולחץ" tell_us_why: "ספר לנו למה" - feedback_copy: "ברצוננו לדעת מדוע בחרת למחוק את החשבון שלך. שלח לנו משוב על מערכת התגובה שלנו בדוא"ל" + feedback_copy: 'ברצוננו לדעת מדוע בחרת למחוק את החשבון שלך. שלח לנו משוב על מערכת התגובה שלנו בדוא"ל' done: "בוצע" cancel: "בטל" proceed: "להמשיך" From 313310a097ea94c8430fc98d534a6756545a35bd Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Wed, 23 Jan 2019 00:55:23 -0500 Subject: [PATCH 091/116] Fix typo --- locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en.yml b/locales/en.yml index 02f9876d2..ad831f5a3 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -251,7 +251,7 @@ en: EMAIL_REQUIRED: 'An email address is required' EMAIL_VERIFICATION_TOKEN_INVALID: 'Email verification token is invalid.' INCORRECT_PASSWORD: 'Incorrect Password' - INVALID_ASSET_URL: 'Assert URL is invalid' + INVALID_ASSET_URL: 'Asset URL is invalid' LOGIN_MAXIMUM_EXCEEDED: 'You have made too many unsuccessful password attempts. Please wait.' network_error: 'Failed to connect to server. Check your internet connection and try again.' NO_SPECIAL_CHARACTERS: 'Usernames can contain letters numbers and _ only' From ef731f719d810a0702636b92e4a4dc3f7c073272 Mon Sep 17 00:00:00 2001 From: Andrew Losowsky Date: Thu, 24 Jan 2019 13:11:04 -0500 Subject: [PATCH 092/116] added Vox Media link (#2161) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e39cc780..4c088d75b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Online comments are broken. Our open-source commenting platform, Talk, rethinks how moderation, comment display, and conversation function, creating the opportunity for safer, smarter discussions around your work. [Read more about Talk here](https://coralproject.net/talk). -Built with <3 by The Coral Project. +Built with <3 by The Coral Project, a part of [Vox Media](https://www.voxmedia.com/a/go-deeper/about). ## Getting Started From 43219eed4baf47b608f9605c86f617e083bebcc8 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Thu, 24 Jan 2019 22:32:50 -0500 Subject: [PATCH 093/116] Replace quote marks --- locales/he.yml | 30 +++++++++---------- .../talk-plugin-auth/client/translations.yml | 4 +-- .../client/translations.yml | 8 ++--- .../talk-plugin-profile-data/translations.yml | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/locales/he.yml b/locales/he.yml index 93878b616..6b7e8ca8c 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -15,15 +15,15 @@ he: write_a_message: "כתוב הודעה" send: "שלח" notify_ban_headline: "הודע למשתמש על האיסור" - notify_ban_description: 'פעולה זו תודיע למשתמש בדוא"ל שהם נאסרו מהקהילה' + notify_ban_description: 'פעולה זו תודיע למשתמש באימייל שהם נאסרו מהקהילה' email_message_ban: "{0},\n\nמישהו עם גישה לחשבון שלך הפר את הנחיות הקהילה שלנו. כתוצאה מכך, החשבון שלך נאסר. לא תוכל עוד להגיב, לדווח או לדווח על תגובות. אם אתה חושב שהדבר נעשה בטעות, צור קשר עם צוות הקהילה שלנו." bio_offensive: "ביו זה פוגע" cancel: "בטל" confirm_email: - click_to_confirm: 'לחץ למטה כדי לאשר את כתובת הדוא"ל שלך' + click_to_confirm: 'לחץ למטה כדי לאשר את כתובת האימייל שלך' confirm: "אשר" password_reset: - mail_sent: 'אם יש לך חשבון רשום, נשלח קישור לאיפוס סיסמה לאותו דוא"ל' + mail_sent: 'אם יש לך חשבון רשום, נשלח קישור לאיפוס סיסמה לאותו דאימייל' set_new_password: "שנה את סיסמתך" new_password: "סיסמה חדשה" new_password_help: "הסיסמה חייבת להיות לפחות 8 תווים" @@ -94,7 +94,7 @@ he: spam_ads: "ספאם / מודעות" staff: "צוות" status: סטטוס - username_and_email: 'שם משתמש ודוא"ל' + username_and_email: 'שם משתמש ואימייל' yes_ban_user: "כן. חסום משתמש" commenter: "מגיב" configure: @@ -147,8 +147,8 @@ he: open: "פתח" open_stream: "פתח את הזרם" open_stream_configuration: "זרם תגובות זה פתוח כעת. על ידי סגירת זרם תגובות זה לא ניתן להגיש תגובות חדשות וכל התגובות הקודמות עדיין יוצגו." - require_email_verification: 'דרוש אימות דוא"ל' - require_email_verification_text: 'משתמשים חדשים חייבים לאמת את הדוא"ל שלהם לפני שתגיב' + require_email_verification: 'דרוש אימות אימייל' + require_email_verification_text: 'משתמשים חדשים חייבים לאמת את האימייל שלהם לפני שתגיב' save_changes: "שמור שינויים" shortcuts: קיצורי דרך sign_out: "התנתק" @@ -192,10 +192,10 @@ he: subject: "החשבון שלך הורחק" body: "בהתאם להנחיות הקהילה של פרויקט אלמוגים, החשבון שלך נאסר. כעת אתה מורשה יותר להגיב, לדגל או ליצור מעורבות עם הקהילה שלנו." confirm: - has_been_requested: 'התבקש אישור בדוא"ל עבור החשבון הבא:' + has_been_requested: 'התבקש אישור באימייל עבור החשבון הבא:' to_confirm: "כדי לאשר את החשבון, בקר בקישור הבא:" confirm_email: "אשר אימייל" - if_you_did_not: 'אם לא ביקשת זאת, תוכל להתעלם בבטחה מדוא"ל זה.' + if_you_did_not: 'אם לא ביקשת זאת, תוכל להתעלם בבטחה מאימייל זה.' subject: "אישור דואר אלקטרוני" password_reset: we_received_a_request: "קיבלנו בקשה לאפס את הסיסמה שלך. אם לא ביקשת שינוי זה, תוכל להתעלם מהודעת אימייל זו." @@ -219,8 +219,8 @@ he: EDIT_WINDOW_ENDED: "לא ניתן עוד לערוך את התגובה הזו. פרק הזמן לביצוע זה פג." EDIT_USERNAME_NOT_AUTHORIZED: "אין לך הרשאה לעדכן את שם המשתמש שלך." SAME_USERNAME_PROVIDED: "עליך לשלוח שם משתמש אחר." - EMAIL_IN_USE: 'כתובת הדוא"ל כבר בשימוש' - EMAIL_REQUIRED: 'נדרשת כתובת דוא"ל' + EMAIL_IN_USE: 'כתובת האימייל כבר בשימוש' + EMAIL_REQUIRED: 'נדרשת כתובת אימייל' LOGIN_MAXIMUM_EXCEEDED: "עשית יותר מדי ניסיונות סיסמה לא מוצלחים. המתן בבקשה." PASSWORD_REQUIRED: "יש להזין סיסמה" COMMENTING_CLOSED: "התגובה כבר סגורה" @@ -413,7 +413,7 @@ he: title_reject: "שמנו לב שדחית שם משתמש" suspend_user: "להשעות משתמש" yes_suspend: "כן, להשעות" - email_message_reject: 'לאחרונה חבר בקהילה שלנו סימן את שם המשתמש שלך לבדיקה. בגלל התוכן של שם המשתמש שלך, שם המשתמש שלך נדחה. פירוש הדבר שאינך יכול עוד להגיב או לסמן תוכן עד שתשנה את שם המשתמש שלך. אנא שלח לנו דוא"ל אם יש לך שאלות או חששות.' + email_message_reject: 'לאחרונה חבר בקהילה שלנו סימן את שם המשתמש שלך לבדיקה. בגלל התוכן של שם המשתמש שלך, שם המשתמש שלך נדחה. פירוש הדבר שאינך יכול עוד להגיב או לסמן תוכן עד שתשנה את שם המשתמש שלך. אנא שלח לנו אימייל אם יש לך שאלות או חששות.' write_message: "לכתוב הודעה" send: שלח thank_you: "אנו מעריכים את בטיחותך ומשובך. מנחה יסקור את הדוח שלך." @@ -427,8 +427,8 @@ he: remove_ban: "הסרת חסימה" ban: "לחסום משתמש" member_since: "חבר מאז" - email: 'דוא"ל' - total_comments: "סה"כ תגובות" + email: 'אימייל' + total_comments: "סך הכל תגובות" reject_rate: "שיעור דחייה" reports: "דיווחים" all: "כל" @@ -443,11 +443,11 @@ he: description: "בואו נגדיר את קהילת Talk שלך בכמה שלבים קצרים בלבד." submit: "תחל" add_organization: - description: 'ספר לנו את שם הארגון שלך. פעולה זו תופיע בדוא"ל בעת הזמנת חברי צוות חדשים.' + description: 'ספר לנו את שם הארגון שלך. פעולה זו תופיע באימייל בעת הזמנת חברי צוות חדשים.' label: "שם ארגון" save: "שמור" create: - email: 'כתובת דוא"ל' + email: 'כתובת אימייל' username: "שם משתמש" password: "סיסמה" confirm_password: "אשר סיסמה" diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 6774145e4..ba2a397fe 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -300,8 +300,8 @@ he: talk-plugin-auth: login: email_verify_cta: "אנא אמת את כתובת האימייל שלך." - request_new_verify_email: 'בקש דוא"ל נוסף' - verify_email: 'תודה שיצרת חשבון! שלחנו דוא"ל לכתובת שסיפקת כדי לאמת את חשבונך.' + request_new_verify_email: 'בקש אימייל נוסף' + verify_email: 'תודה שיצרת חשבון! שלחנו אימייל לכתובת שסיפקת כדי לאמת את חשבונך.' verify_email2: "עליך לאמת את חשבונך לפני שתעסוק בקהילה." not_you: "לא אתה?" logged_in_as: "נכנס בתור" diff --git a/plugins/talk-plugin-profile-data/client/translations.yml b/plugins/talk-plugin-profile-data/client/translations.yml index 6ee07d371..4787bb2c4 100644 --- a/plugins/talk-plugin-profile-data/client/translations.yml +++ b/plugins/talk-plugin-profile-data/client/translations.yml @@ -154,7 +154,7 @@ es: he: download_request: section_title: "הורד את היסטוריית התגובות שלי" - you_will_get_a_copy: 'תקבל הודעת דוא"ל עם קישור להורדת היסטוריית התגובות שלך. ניתן לבצע' + you_will_get_a_copy: 'תקבל הודעת אימייל עם קישור להורדת היסטוריית התגובות שלך. ניתן לבצע' download_rate: "בקשת הורדה אחת בכל {0} ימים" most_recent_request: "הבקשה האחרונה שלך" request: "בקש היסטוריה של תגובות" @@ -163,7 +163,7 @@ he: days: "{0} ימים" hour: "{0} שעה" day: "{0} יום" - download_preparing: 'הורדה של החשבון שלך הכנה - בדוק את הדוא"ל שלך בקרוב עבור קישור להורדה' + download_preparing: 'הורדה של החשבון שלך הכנה - בדוק את האימייל שלך בקרוב עבור קישור להורדה' delete_request: account_deletion_cancelled: 'בקשת מחיקת החשבון בוטלה - בקשתך למחוק את החשבון שלך בוטלה.' account_deletion_requested: 'מחיקת חשבון מבוקשת' @@ -174,12 +174,12 @@ he: delete_my_account: "מחק את חשבוני" delete_my_account_description: "מחיקת החשבון תמחק את הפרופיל שלך לצמיתות ותסיר את כל התגובות שלך מאתר זה." already_submitted_request_description: "כבר שלחת בקשה למחיקת החשבון שלך. החשבון שלך יימחק לאחר {0}. תוכל לבטל את הבקשה עד למועד זה" - your_request_submitted_description: 'הבקשה שלך נשלחה ואישור נשלח לכתובת הדוא"ל המשויכת לחשבונך.' + your_request_submitted_description: 'הבקשה שלך נשלחה ואישור נשלח לכתובת האימייל המשויכת לחשבונך.' your_account_deletion_scheduled: "החשבון שלך אמור להימחק לאחר:" changed_your_mind: "שינה את דעתך?" simply_go_to: "פשוט עבור אל החשבון שלך שוב לפני זמן זה ולחץ" tell_us_why: "ספר לנו למה" - feedback_copy: 'ברצוננו לדעת מדוע בחרת למחוק את החשבון שלך. שלח לנו משוב על מערכת התגובה שלנו בדוא"ל' + feedback_copy: 'ברצוננו לדעת מדוע בחרת למחוק את החשבון שלך. שלח לנו משוב על מערכת התגובה שלנו באימייל' done: "בוצע" cancel: "בטל" proceed: "להמשיך" diff --git a/plugins/talk-plugin-profile-data/translations.yml b/plugins/talk-plugin-profile-data/translations.yml index 00ca6dcc2..f3f62d212 100644 --- a/plugins/talk-plugin-profile-data/translations.yml +++ b/plugins/talk-plugin-profile-data/translations.yml @@ -178,7 +178,7 @@ he: אם תרצה להצטרף מחדש לדיון בעתיד, תוכל להירשם לחשבון חדש. - אם תרצה לתת לנו משוב על הסיבות לכך שעזבת ומה ניתן לעשות כדי לשפר את חווית התגובות, שלח לנו דוא"ל לכתובת {1}. + אם תרצה לתת לנו משוב על הסיבות לכך שעזבת ומה ניתן לעשות כדי לשפר את חווית התגובות, שלח לנו אימייל לכתובת {1}. cancelDelete: subject: "בקשת מחיקת החשבון שלך עבור {0} בוטלה" body: "ביטלת את בקשת מחיקת החשבון שלך עבור {0}. החשבון שלך מופעל מחדש כעת." From 9b0173e6bf9c2dee43c4683dc7d38db4c8fa15a4 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sat, 26 Jan 2019 21:41:02 -0500 Subject: [PATCH 094/116] Add few more translations --- locales/he.yml | 4 ++++ plugins/talk-plugin-ignore-user/client/translations.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/locales/he.yml b/locales/he.yml index 6b7e8ca8c..71e2196ef 100644 --- a/locales/he.yml +++ b/locales/he.yml @@ -48,6 +48,9 @@ he: comment_post_notif_premod: "תודה על הפרסום. צוות הפיקוח שלנו יבחן את התגובה שלך בקרוב." comment_post_banned_word: "התגובה שלך מכילה מילה אחת או יותר שאינן מותרות, לכן היא לא תפורסם. אם אתה סבור שהודעה זו שגויה, צור קשר עם צוות הניהול שלנו." characters_remaining: "תווים נותרים" + comment_history_blank: + info: 'תולדות של התגובות שלך יופיעו כאן' + title: 'לא כתבת שום תגובה' comment_offensive: "תגובה זו פוגעת" comment_singular: תגובה comment_plural: תגובות @@ -147,6 +150,7 @@ he: open: "פתח" open_stream: "פתח את הזרם" open_stream_configuration: "זרם תגובות זה פתוח כעת. על ידי סגירת זרם תגובות זה לא ניתן להגיש תגובות חדשות וכל התגובות הקודמות עדיין יוצגו." + organization_contact_email: "אימייל של הארגון" require_email_verification: 'דרוש אימות אימייל' require_email_verification_text: 'משתמשים חדשים חייבים לאמת את האימייל שלהם לפני שתגיב' save_changes: "שמור שינויים" diff --git a/plugins/talk-plugin-ignore-user/client/translations.yml b/plugins/talk-plugin-ignore-user/client/translations.yml index 7e4f5d3a4..4844b583c 100644 --- a/plugins/talk-plugin-ignore-user/client/translations.yml +++ b/plugins/talk-plugin-ignore-user/client/translations.yml @@ -78,6 +78,7 @@ fr: confirmation_title: Ignore {0}? he: talk-plugin-ignore-user: + blank_info: בשלב זה אינך מתעלם ממשתמשים section_title: משתמשים שהתעלמו מהם section_info: מכיוון שהתעלמת מהמגיבים הבאים, ההערות שלהם מוסתרות. stop_ignoring: הפסק להתעלם From f6bfef3fb5d80946cafb9eaf7f9cae5ca77f86e7 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sun, 27 Jan 2019 21:31:51 -0500 Subject: [PATCH 095/116] Sort Translations ABC, Add missing Hebrew --- .../talk-plugin-auth/client/translations.yml | 90 ++++++++-------- .../client/translations.yml | 4 +- .../client/translations.yml | 6 +- .../talk-plugin-love/client/translations.yml | 8 +- .../client/translations.yml | 7 +- .../translations.yml | 12 ++- .../client/translations.yml | 7 +- .../translations.yml | 12 ++- .../client/translations.yml | 7 +- .../translations.yml | 12 ++- .../client/translations.yml | 8 +- .../client/translations.yml | 8 +- .../client/translations.yml | 44 +++++--- .../server/translations.yml | 42 +++++--- .../client/translations.yml | 102 +++++++++--------- .../talk-plugin-profile-data/translations.yml | 74 ++++++------- .../client/translations.yml | 5 + .../client/translations.yml | 3 + .../client/translations.yml | 4 +- .../client/translations.yml | 9 +- 20 files changed, 271 insertions(+), 193 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index ba2a397fe..f5f90b636 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -99,6 +99,51 @@ da: username: Username write_your_username: "Edit your username" your_username: "Your username appears on every comment you post." +de: + talk-plugin-auth: + login: + email_verify_cta: "Bitte bestätigen Sie Ihre E-Mail-Adresse." + request_new_verify_email: "E-Mail-Bestätigung erneut anfordern" + verify_email: "Danke, dass Sie ein Konto eingerichtet haben! Wir haben eine Nachricht an Ihre E-Mail-Adresse geschickt, mit der Sie Ihr Konto bestätigen können." + verify_email2: "Sie müssen ihr Konto bestätigen, bevor Sie beginnen können." + not_you: "Nicht Ihr Name?" + logged_in_as: "Angemeldet als" + facebook_sign_in: "Mit Facebook anmelden" + facebook_sign_up: "Mit Facebook registrieren" + logout: "Abmelden" + sign_in: "Anmelden" + sign_in_to_join: "Anmelden, um zu diskutieren" + or: "Oder" + email: "E-Mail-Adresse" + password: "Passwort" + forgot_your_pass: "Passwort vergessen?" + need_an_account: "Brauchen Sie ein Konto?" + register: "Registrieren" + sign_up: "Registrieren" + confirm_password: "Passwort bestätigen" + username: "Nutzername" + already_have_an_account: "Konto bereits vorhanden?" + recover_password: "Passwort zurücksetzen" + email_in_use: "E-Mail-Adresse bereits vergeben" + email_or_username_in_use: "E-Mail-Adresse oder Nutzername bereits vergeben" + required_field: "Pflichtfeld" + passwords_dont_match: "Passwörter nicht identisch." + special_characters: "Nutzernamen dürfen nur Buchstaben, Zahlen und _ enthalten" + sign_in_to_comment: "Zum Kommentieren anmelden" + check_the_form: "Ungültige Eingabe. Bitte prüfen Sie Ihre Felder" + set_username_dialog: + check_the_form: "Ungültige Eingabe. Bitte prüfen Sie Ihre Felder" + continue: "Mit diesem Facebook-Profilnamen fortfahren" + error_create: "Fehler bei Änderung des Nutzernamens" + fake_comment_body: "Dies ist ein Beispiel-Kommentar. Leser können im Kommentarbereich Meinungen und Gedanken mit der Redaktion austauschen." + fake_comment_date: "Vor 1 Minute" + if_you_dont_change_your_name: "Wenn Sie Ihren Nutzernamen an diesem Punkt nicht ändern, wird Ihr Facebook-Name mit Ihren Kommentaren angezeigt." + required_field: "Pflichtfeld" + save: Speichern + special_characters: "Nutzernamen dürfen nur Buchstaben, Zahlen und _ enthalten" + username: Nutzername + write_your_username: "Nutzername bearbeiten" + your_username: "Ihr Nutzername erscheint an jedem Ihrer veröffentlichten Kommentare." en: talk-plugin-auth: login: @@ -152,51 +197,6 @@ en: cancel: "Cancel" edit: "Edit" changed_password_msg: "Your password has been successfully changed" -de: - talk-plugin-auth: - login: - email_verify_cta: "Bitte bestätigen Sie Ihre E-Mail-Adresse." - request_new_verify_email: "E-Mail-Bestätigung erneut anfordern" - verify_email: "Danke, dass Sie ein Konto eingerichtet haben! Wir haben eine Nachricht an Ihre E-Mail-Adresse geschickt, mit der Sie Ihr Konto bestätigen können." - verify_email2: "Sie müssen ihr Konto bestätigen, bevor Sie beginnen können." - not_you: "Nicht Ihr Name?" - logged_in_as: "Angemeldet als" - facebook_sign_in: "Mit Facebook anmelden" - facebook_sign_up: "Mit Facebook registrieren" - logout: "Abmelden" - sign_in: "Anmelden" - sign_in_to_join: "Anmelden, um zu diskutieren" - or: "Oder" - email: "E-Mail-Adresse" - password: "Passwort" - forgot_your_pass: "Passwort vergessen?" - need_an_account: "Brauchen Sie ein Konto?" - register: "Registrieren" - sign_up: "Registrieren" - confirm_password: "Passwort bestätigen" - username: "Nutzername" - already_have_an_account: "Konto bereits vorhanden?" - recover_password: "Passwort zurücksetzen" - email_in_use: "E-Mail-Adresse bereits vergeben" - email_or_username_in_use: "E-Mail-Adresse oder Nutzername bereits vergeben" - required_field: "Pflichtfeld" - passwords_dont_match: "Passwörter nicht identisch." - special_characters: "Nutzernamen dürfen nur Buchstaben, Zahlen und _ enthalten" - sign_in_to_comment: "Zum Kommentieren anmelden" - check_the_form: "Ungültige Eingabe. Bitte prüfen Sie Ihre Felder" - set_username_dialog: - check_the_form: "Ungültige Eingabe. Bitte prüfen Sie Ihre Felder" - continue: "Mit diesem Facebook-Profilnamen fortfahren" - error_create: "Fehler bei Änderung des Nutzernamens" - fake_comment_body: "Dies ist ein Beispiel-Kommentar. Leser können im Kommentarbereich Meinungen und Gedanken mit der Redaktion austauschen." - fake_comment_date: "Vor 1 Minute" - if_you_dont_change_your_name: "Wenn Sie Ihren Nutzernamen an diesem Punkt nicht ändern, wird Ihr Facebook-Name mit Ihren Kommentaren angezeigt." - required_field: "Pflichtfeld" - save: Speichern - special_characters: "Nutzernamen dürfen nur Buchstaben, Zahlen und _ enthalten" - username: Nutzername - write_your_username: "Nutzername bearbeiten" - your_username: "Ihr Nutzername erscheint an jedem Ihrer veröffentlichten Kommentare." es: talk-plugin-auth: login: diff --git a/plugins/talk-plugin-author-menu/client/translations.yml b/plugins/talk-plugin-author-menu/client/translations.yml index 271e99b09..85c5c9679 100644 --- a/plugins/talk-plugin-author-menu/client/translations.yml +++ b/plugins/talk-plugin-author-menu/client/translations.yml @@ -2,10 +2,10 @@ ar: talk-plugin-author-menu: da: talk-plugin-author-menu: -en: - talk-plugin-author-menu: de: talk-plugin-author-menu: +en: + talk-plugin-author-menu: es: talk-plugin-author-menu: fr: diff --git a/plugins/talk-plugin-flag-details/client/translations.yml b/plugins/talk-plugin-flag-details/client/translations.yml index 5ee8bfb37..93679d98d 100644 --- a/plugins/talk-plugin-flag-details/client/translations.yml +++ b/plugins/talk-plugin-flag-details/client/translations.yml @@ -4,12 +4,12 @@ ar: da: talk-plugin-flag-details: flags: Reports -en: - talk-plugin-flag-details: - flags: Reports de: talk-plugin-flag-details: flags: Markierungen +en: + talk-plugin-flag-details: + flags: Reports es: talk-plugin-flag-details: flags: Reportes diff --git a/plugins/talk-plugin-love/client/translations.yml b/plugins/talk-plugin-love/client/translations.yml index bf361da36..0e41976d8 100644 --- a/plugins/talk-plugin-love/client/translations.yml +++ b/plugins/talk-plugin-love/client/translations.yml @@ -6,14 +6,14 @@ da: talk-plugin-love: love: Love loved: Loved -en: - talk-plugin-love: - love: Love - loved: Loved de: talk-plugin-love: love: Ich liebe es loved: Ich liebe es +en: + talk-plugin-love: + love: Love + loved: Loved es: talk-plugin-love: love: Amo diff --git a/plugins/talk-plugin-notifications-category-featured/client/translations.yml b/plugins/talk-plugin-notifications-category-featured/client/translations.yml index 83db88f75..ecd7a910c 100644 --- a/plugins/talk-plugin-notifications-category-featured/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-featured/client/translations.yml @@ -1,12 +1,15 @@ ar: talk-plugin-notifications-category-featured: toggle_description: تعليقي تم تمييزه +de: + talk-plugin-notifications-category-featured: + toggle_description: Mein Kommentar wird empfohlen en: talk-plugin-notifications-category-featured: toggle_description: My comment is featured es: talk-plugin-notifications-category-featured: toggle_description: Mi comentario esta presentado -de: +he: talk-plugin-notifications-category-featured: - toggle_description: Mein Kommentar wird empfohlen + toggle_description: My comment is featured diff --git a/plugins/talk-plugin-notifications-category-featured/translations.yml b/plugins/talk-plugin-notifications-category-featured/translations.yml index f7fa91b6a..bd9dde3da 100644 --- a/plugins/talk-plugin-notifications-category-featured/translations.yml +++ b/plugins/talk-plugin-notifications-category-featured/translations.yml @@ -5,6 +5,12 @@ ar: subject: "تميَزت واحدة من تعليقاتك على {0}" body: "{0}\n حدد أحد أعضاء فريقنا هذا التعليق ليتم عرضه كتعليق مميز للقراء الآخرين: {1}" +de: + talk-plugin-notifications: + categories: + featured: + subject: "Einer Ihrer Kommentare wurde auf {0} hervorgehoben" + body: "{0}\nEin Mitglied unseres Teams hat diesen Kommentar ausgewählt, er wird jetzt für andere Leser besonders hervorgehoben: {1}" en: talk-plugin-notifications: categories: @@ -17,9 +23,9 @@ es: featured: subject: "Uno de tus comentarios apareció en {0}" body: "{0}\nUn miembro de nuestro equipo ha seleccionado este comentario para ser presentado por otros lectores: {1}" -de: +he: talk-plugin-notifications: categories: featured: - subject: "Einer Ihrer Kommentare wurde auf {0} hervorgehoben" - body: "{0}\nEin Mitglied unseres Teams hat diesen Kommentar ausgewählt, er wird jetzt für andere Leser besonders hervorgehoben: {1}" + subject: "One of your comments was featured on {0}" + body: "{0}\nA member of our team has selected this comment to be featured for other readers: {1}" diff --git a/plugins/talk-plugin-notifications-category-reply/client/translations.yml b/plugins/talk-plugin-notifications-category-reply/client/translations.yml index 08fbb7fc6..300e47614 100644 --- a/plugins/talk-plugin-notifications-category-reply/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-reply/client/translations.yml @@ -1,15 +1,18 @@ ar: talk-plugin-notifications-category-reply: toggle_description: يتلقى تعليقي ردا +de: + talk-plugin-notifications-category-reply: + toggle_description: Jemand antwortet auf meinen Kommentar en: talk-plugin-notifications-category-reply: toggle_description: My comment receives a reply es: talk-plugin-notifications-category-reply: toggle_description: Mi comentario recibe una respuesta -de: +he: talk-plugin-notifications-category-reply: - toggle_description: Jemand antwortet auf meinen Kommentar + toggle_description: My comment receives a reply nl_NL: talk-plugin-notifications-category-reply: toggle_description: Iemand antwoord op mijn reactie diff --git a/plugins/talk-plugin-notifications-category-reply/translations.yml b/plugins/talk-plugin-notifications-category-reply/translations.yml index a084818c6..8c12efdbb 100644 --- a/plugins/talk-plugin-notifications-category-reply/translations.yml +++ b/plugins/talk-plugin-notifications-category-reply/translations.yml @@ -5,6 +5,12 @@ ar: subject: "رد شخص ما على تعليقك على {0}" body: "{0}\n{1} رد على تعليقك {2}" +de: + talk-plugin-notifications: + categories: + reply: + subject: "Jemand hat bei {0} auf Ihren Kommentar geantwortet" + body: "{0}\n{1} antwortete auf Ihren Kommentar: {2}" en: talk-plugin-notifications: categories: @@ -17,9 +23,9 @@ es: reply: subject: "Alguien ha respondido a tu comentario en {0}" body: "{0}\n{1} respondió a tu comentario: {2}" -de: +he: talk-plugin-notifications: categories: reply: - subject: "Jemand hat bei {0} auf Ihren Kommentar geantwortet" - body: "{0}\n{1} antwortete auf Ihren Kommentar: {2}" + subject: "Someone has replied to your comment on {0}" + body: "{0}\n{1} replied to your comment: {2}" diff --git a/plugins/talk-plugin-notifications-category-staff/client/translations.yml b/plugins/talk-plugin-notifications-category-staff/client/translations.yml index 43c2f5c01..246fe6f36 100644 --- a/plugins/talk-plugin-notifications-category-staff/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-staff/client/translations.yml @@ -1,15 +1,18 @@ ar: talk-plugin-notifications-category-staff: toggle_description: يرد أحد الموظفين على تعليقي +de: + talk-plugin-notifications-category-staff: + toggle_description: Ein Redaktionsmitglied antwortet auf meinen Kommentar en: talk-plugin-notifications-category-staff: toggle_description: A staff member replies to my comment es: talk-plugin-notifications-category-staff: toggle_description: Un miembro del personal responde a mi comentario -de: +he: talk-plugin-notifications-category-staff: - toggle_description: Ein Redaktionsmitglied antwortet auf meinen Kommentar + toggle_description: A staff member replies to my comment nl_NL: talk-plugin-notifications-category-staff: toggle_description: Een redactielid antwoord op mijn reactie diff --git a/plugins/talk-plugin-notifications-category-staff/translations.yml b/plugins/talk-plugin-notifications-category-staff/translations.yml index 24fe7d9ea..a9f30ba57 100644 --- a/plugins/talk-plugin-notifications-category-staff/translations.yml +++ b/plugins/talk-plugin-notifications-category-staff/translations.yml @@ -5,6 +5,12 @@ ar: subject: "شخص ما في {0} قد رد على تعليقك" body: "{0}\n{1} يعمل ل {2} وقد رد على تعليقك: {3}" +de: + talk-plugin-notifications: + categories: + staff: + subject: "Jemand hat bei {0} auf Ihren Kommentar geantwortet" + body: "{0}\n{1} arbeitet für {2} und hat auf Ihren Kommentar geantwortet: {3}" en: talk-plugin-notifications: categories: @@ -17,12 +23,12 @@ es: staff: subject: "Alguien en {0} ha respondido a tu comentario" body: "{0}\n{1} trabaja para {2} y ha respondido a tu comentario: {3}" -de: +he: talk-plugin-notifications: categories: staff: - subject: "Jemand hat bei {0} auf Ihren Kommentar geantwortet" - body: "{0}\n{1} arbeitet für {2} und hat auf Ihren Kommentar geantwortet: {3}" + subject: "Someone at {0} has replied to your comment" + body: "{0}\n{1} works for {2} and has replied to your comment: {3}" nl_NL: talk-plugin-notifications: categories: diff --git a/plugins/talk-plugin-notifications-digest-daily/client/translations.yml b/plugins/talk-plugin-notifications-digest-daily/client/translations.yml index f71c3364b..f1f7c029f 100644 --- a/plugins/talk-plugin-notifications-digest-daily/client/translations.yml +++ b/plugins/talk-plugin-notifications-digest-daily/client/translations.yml @@ -2,6 +2,10 @@ ar: talk-plugin-notifications: digest_enum: DAILY: في ملخص يومي +de: + talk-plugin-notifications: + digest_enum: + DAILY: Einmal täglich en: talk-plugin-notifications: digest_enum: @@ -10,10 +14,10 @@ es: talk-plugin-notifications: digest_enum: DAILY: En un resumen diario -de: +he: talk-plugin-notifications: digest_enum: - DAILY: Einmal täglich + DAILY: In a daily digest nl_NL: talk-plugin-notifications: digest_enum: diff --git a/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml b/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml index cb82b6253..4fe714f3f 100644 --- a/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml +++ b/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml @@ -2,6 +2,10 @@ ar: talk-plugin-notifications: digest_enum: HOURLY: في ملخص كل ساعة +de: + talk-plugin-notifications: + digest_enum: + HOURLY: Stündlich en: talk-plugin-notifications: digest_enum: @@ -10,10 +14,10 @@ es: talk-plugin-notifications: digest_enum: HOURLY: En un resumen por hora -de: +he: talk-plugin-notifications: digest_enum: - HOURLY: Stündlich + HOURLY: In an hourly digest nl_NL: talk-plugin-notifications: digest_enum: diff --git a/plugins/talk-plugin-notifications/client/translations.yml b/plugins/talk-plugin-notifications/client/translations.yml index f1967feca..8cf16112a 100644 --- a/plugins/talk-plugin-notifications/client/translations.yml +++ b/plugins/talk-plugin-notifications/client/translations.yml @@ -16,6 +16,24 @@ ar: digest_option: إرسال الإشعارات digest_enum: NONE: فورا +de: + talk-plugin-notifications: + settings_title: Benachrichtigungen + settings_subtitle: Benachrichtige mich wenn + turn_off_all: Ich möchte keine Benachrichtigungen erhalten + banner_info: + title: Bestätigte E-Mail-Adresse benötigt + text: Um E-Mail-Benachrichtigungen zu erhalten, müssen Sie eine bestätigte E-Mail-Adresse haben. + verify_now: E-Mail-Adresse jetzt bestätigen + banner_success: + title: E-Mail-Bestätigungsanfrage verschickt + text: Eine E-Mail mit einem Bestätigungslink wurde an {0} geschickt. + banner_error: + title: Fehler + text: Beim Versand der Bestätigungsmail gab es einen Fehler. Bitte versuchen Sie es später erneut. + digest_option: Benachrichtigungen senden + digest_enum: + NONE: Sofort en: talk-plugin-notifications: settings_title: Notifications @@ -52,24 +70,24 @@ es: digest_option: Enviar notificaciones digest_enum: NONE: Inmediatamente -de: +he: talk-plugin-notifications: - settings_title: Benachrichtigungen - settings_subtitle: Benachrichtige mich wenn - turn_off_all: Ich möchte keine Benachrichtigungen erhalten + settings_title: Notifications + settings_subtitle: Receive notifications when + turn_off_all: I do not want to receive notifications banner_info: - title: Bestätigte E-Mail-Adresse benötigt - text: Um E-Mail-Benachrichtigungen zu erhalten, müssen Sie eine bestätigte E-Mail-Adresse haben. - verify_now: E-Mail-Adresse jetzt bestätigen + title: Email Verification Required + text: To receive email notifications you must have a verified email address. + verify_now: Verify your email now banner_success: - title: E-Mail-Bestätigungsanfrage verschickt - text: Eine E-Mail mit einem Bestätigungslink wurde an {0} geschickt. + title: Email Verification Sent + text: An email has been sent to {0} containing a verification link. banner_error: - title: Fehler - text: Beim Versand der Bestätigungsmail gab es einen Fehler. Bitte versuchen Sie es später erneut. - digest_option: Benachrichtigungen senden + title: Error + text: There has been an error sending your verification email. Please try again later. + digest_option: Send notifications digest_enum: - NONE: Sofort + NONE: Immediately nl_NL: talk-plugin-notifications: settings_title: Notificaties diff --git a/plugins/talk-plugin-notifications/server/translations.yml b/plugins/talk-plugin-notifications/server/translations.yml index d063ab522..228e16b57 100644 --- a/plugins/talk-plugin-notifications/server/translations.yml +++ b/plugins/talk-plugin-notifications/server/translations.yml @@ -12,20 +12,6 @@ ar: confirm: "أكد" are_unsubscribed: "أنت الآن غير مشترك في جميع الإشعارات." token_invalid: "رابط إلغاء الاشتراك غير صالح ، انقر الرابط من بريد إلكتروني أحدث أو قم بزيارة جدول تعليقات وتسجيل الدخول لتغيير تفضيلات الإشعارات الخاصة بك" -en: - talk-plugin-notifications: - templates: - digest: - subject: "Your latest comment activity at {0}" - footer: "You received this notification because you are a commenter on {0} and you opted in to receive notifications." - links: - unsubscribe: "Unsubscribe from comment notifications" - unsubscribe_page: - unsubscribe: "Unsubscribe from comment notifications" - click_to_confirm: "Click below to confirm that you would like to unsubscribe from all notifications" - confirm: "Confirm" - are_unsubscribed: "You are now unsubscribed from all notifications." - token_invalid: "Unsubscribe link is invalid, click the link from a more recent email or visit a comment stream and login to change your notification preferences" de: talk-plugin-notifications: templates: @@ -40,6 +26,34 @@ de: confirm: "Bestätigen" are_unsubscribed: "Sie haben haben alle Benachrichtigungen erfolgreich abbestellt." token_invalid: "Der Abbestell-Link ist ungültig. Klicken Sie den Link einer neueren E-Mail oder gehen Sie zu einem Kommentarbereich, melden Sie sich an und ändern Sie dort Ihre Benachrichtigungseinstellungen" +en: + talk-plugin-notifications: + templates: + digest: + subject: "Your latest comment activity at {0}" + footer: "You received this notification because you are a commenter on {0} and you opted in to receive notifications." + links: + unsubscribe: "Unsubscribe from comment notifications" + unsubscribe_page: + unsubscribe: "Unsubscribe from comment notifications" + click_to_confirm: "Click below to confirm that you would like to unsubscribe from all notifications" + confirm: "Confirm" + are_unsubscribed: "You are now unsubscribed from all notifications." + token_invalid: "Unsubscribe link is invalid, click the link from a more recent email or visit a comment stream and login to change your notification preferences" +he: + talk-plugin-notifications: + templates: + digest: + subject: "Your latest comment activity at {0}" + footer: "You received this notification because you are a commenter on {0} and you opted in to receive notifications." + links: + unsubscribe: "Unsubscribe from comment notifications" + unsubscribe_page: + unsubscribe: "Unsubscribe from comment notifications" + click_to_confirm: "Click below to confirm that you would like to unsubscribe from all notifications" + confirm: "Confirm" + are_unsubscribed: "You are now unsubscribed from all notifications." + token_invalid: "Unsubscribe link is invalid, click the link from a more recent email or visit a comment stream and login to change your notification preferences" nl_NL: talk-plugin-notifications: templates: diff --git a/plugins/talk-plugin-profile-data/client/translations.yml b/plugins/talk-plugin-profile-data/client/translations.yml index 4787bb2c4..7726558c4 100644 --- a/plugins/talk-plugin-profile-data/client/translations.yml +++ b/plugins/talk-plugin-profile-data/client/translations.yml @@ -49,6 +49,57 @@ ar: subtitle: "هل انت متأكد انك تريد حذف حسابك؟" description: "للتأكيد على رغبتك في حذف حسابك، يرجى كتابة العبارة التالية في مربع النص أدناه:" type_to_confirm: "اكتب عبارة أدناه للتأكيد" +de: + download_request: + section_title: "Mein Kommentar-Archiv herunterladen" + you_will_get_a_copy: "Sie werden eine E-Mail mit einem Download-Link erhalten. Sie können" + download_rate: "eine Download-Anfrage alle {0} Tage stellen" + most_recent_request: "Ihre letzte Anfrage" + request: "Kommentar-Archiv anfordern" + rate_limit: "Sie können die nächste Anfrage stellen in {0}" + hours: "{0} Stunden" + days: "{0} Tagen" + hour: "{0} Stunde" + day: "{0} Tag" + download_preparing: "Bereite Konto-Download vor - Überprüfen Sie Ihr E-Mail-Postfach, sie sollten den Download-Link demnächst erhalten" + delete_request: + account_deletion_cancelled: 'Konto-Löschung abgebrochen - Ihre Anfrage, Ihr Konto zu löschen wurde abgebrochen.' + account_deletion_requested: 'Konto-Löschung angefordert' + received_on: "Die Anfrage, Ihr Konto zu löschen haben wir erhalten am " + cancel_request_description: "Fall Sie ihr Konto wieder aktivieren möchten, können Sie die Lösch-Anfrage hier abbrechen" + before: "vorher" + cancel_account_deletion_request: "Konto-Lösch-Anfrage abbrechen" + delete_my_account: "Mein Benutzerkonto löschen" + delete_my_account_description: "Mit dem Löschen Ihres Kontos werden Ihr Profil sowie alle Ihre Kommentare dauerhaft von dieser Website entfernt." + already_submitted_request_description: "Sie haben bereits eine Lösch-Anfrage gestellt. Ihr Konto wird nach dem {0} gelöscht. Bis zu diesem Zeitpunkt können Sie die Anfrage noch abbrechen" + your_request_submitted_description: "Ihre Lösch-Anfrage wurde übermittelt und eine Bestätigungsanfrage an die dem Konto zugehörige E-Mail-Adresse geschickt." + your_account_deletion_scheduled: "Ihr Benutzerkonto wird gelöscht nach dem:" + changed_your_mind: "Haben Sie Ihre Meinung geändert?" + simply_go_to: "Gehen Sie einfach vor dem Zeitpunkt zu Ihrem Konto und klicken Sie" + tell_us_why: "Sagen Sie uns warum" + feedback_copy: "Wir würden gern erfahren, warum Sie sich entschieden haben, Ihr Konto zu löschen. Schicken Sie uns eine E-Mail mit Feedback an" + done: "Fertig" + cancel: "Abbrechen" + proceed: "Fortfahren" + input_is_not_correct: "Die Eingabe ist nicht korrekt" + step_0: + you_are_attempting: "Sie versuchen Ihr Konto zu löschen. Das bedeutet:" + item_1: "Alle Ihre Kommentare werden von der Website entfernt" + item_2: "Alle Ihre Kommentare werden aus unserer Datenbank gelöscht" + item_3: "Ihr Nutzername und Ihre E-Mail-Adresse werden aus unserem System gelöscht" + step_1: + subtitle: "Wann wird mein Benutzerkonto entfernt?" + description: "Ihr Konto wird {0} Stunden nachdem Sie die Anfrage gestellt haben gelöscht." + subtitle_2: "Kann ich weiterhin Kommentare schreiben, bis mein Konto gelöscht wird?" + description_2: "Ja, Sie können kommentieren, antworten usw. bis die {0} Stunden abgelaufen sind." + step_2: + description: "Bevor Ihr Konto gelöscht wird, empfehlen wir Ihnen, Ihr Kommentar-Archiv herunterzuladen. Nach der Konto-Löschung ist dies nicht mehr möglich." + to_download: "Um Ihr Konto-Archiv herunterzuladen gehen sie zu:" + path: "Profil > Mein Kommentar-Archiv herunterladen" + step_3: + subtitle: "Sind Sie sicher, dass Sie Ihr Benutzerkonto löschen möchten?" + description: "Um zu bestätigen, dass Sie Ihr Konto löschen möchten, geben Sie bitte folgende Zeichen in das Textfeld ein:" + type_to_confirm: "Zur Bestätigung Zeichenfolge eingeben" en: download_request: section_title: "Download My Comment History" @@ -202,57 +253,6 @@ he: subtitle: "האם אתה בטוח שברצונך למחוק את החשבון שלך?" description: "כדי לאשר שברצונך למחוק את חשבונך, הקלד את הביטוי הבא בתיבת הטקסט שבהמשך:" type_to_confirm: "הקלד ביטוי למטה כדי לאשר" -de: - download_request: - section_title: "Mein Kommentar-Archiv herunterladen" - you_will_get_a_copy: "Sie werden eine E-Mail mit einem Download-Link erhalten. Sie können" - download_rate: "eine Download-Anfrage alle {0} Tage stellen" - most_recent_request: "Ihre letzte Anfrage" - request: "Kommentar-Archiv anfordern" - rate_limit: "Sie können die nächste Anfrage stellen in {0}" - hours: "{0} Stunden" - days: "{0} Tagen" - hour: "{0} Stunde" - day: "{0} Tag" - download_preparing: "Bereite Konto-Download vor - Überprüfen Sie Ihr E-Mail-Postfach, sie sollten den Download-Link demnächst erhalten" - delete_request: - account_deletion_cancelled: 'Konto-Löschung abgebrochen - Ihre Anfrage, Ihr Konto zu löschen wurde abgebrochen.' - account_deletion_requested: 'Konto-Löschung angefordert' - received_on: "Die Anfrage, Ihr Konto zu löschen haben wir erhalten am " - cancel_request_description: "Fall Sie ihr Konto wieder aktivieren möchten, können Sie die Lösch-Anfrage hier abbrechen" - before: "vorher" - cancel_account_deletion_request: "Konto-Lösch-Anfrage abbrechen" - delete_my_account: "Mein Benutzerkonto löschen" - delete_my_account_description: "Mit dem Löschen Ihres Kontos werden Ihr Profil sowie alle Ihre Kommentare dauerhaft von dieser Website entfernt." - already_submitted_request_description: "Sie haben bereits eine Lösch-Anfrage gestellt. Ihr Konto wird nach dem {0} gelöscht. Bis zu diesem Zeitpunkt können Sie die Anfrage noch abbrechen" - your_request_submitted_description: "Ihre Lösch-Anfrage wurde übermittelt und eine Bestätigungsanfrage an die dem Konto zugehörige E-Mail-Adresse geschickt." - your_account_deletion_scheduled: "Ihr Benutzerkonto wird gelöscht nach dem:" - changed_your_mind: "Haben Sie Ihre Meinung geändert?" - simply_go_to: "Gehen Sie einfach vor dem Zeitpunkt zu Ihrem Konto und klicken Sie" - tell_us_why: "Sagen Sie uns warum" - feedback_copy: "Wir würden gern erfahren, warum Sie sich entschieden haben, Ihr Konto zu löschen. Schicken Sie uns eine E-Mail mit Feedback an" - done: "Fertig" - cancel: "Abbrechen" - proceed: "Fortfahren" - input_is_not_correct: "Die Eingabe ist nicht korrekt" - step_0: - you_are_attempting: "Sie versuchen Ihr Konto zu löschen. Das bedeutet:" - item_1: "Alle Ihre Kommentare werden von der Website entfernt" - item_2: "Alle Ihre Kommentare werden aus unserer Datenbank gelöscht" - item_3: "Ihr Nutzername und Ihre E-Mail-Adresse werden aus unserem System gelöscht" - step_1: - subtitle: "Wann wird mein Benutzerkonto entfernt?" - description: "Ihr Konto wird {0} Stunden nachdem Sie die Anfrage gestellt haben gelöscht." - subtitle_2: "Kann ich weiterhin Kommentare schreiben, bis mein Konto gelöscht wird?" - description_2: "Ja, Sie können kommentieren, antworten usw. bis die {0} Stunden abgelaufen sind." - step_2: - description: "Bevor Ihr Konto gelöscht wird, empfehlen wir Ihnen, Ihr Kommentar-Archiv herunterzuladen. Nach der Konto-Löschung ist dies nicht mehr möglich." - to_download: "Um Ihr Konto-Archiv herunterzuladen gehen sie zu:" - path: "Profil > Mein Kommentar-Archiv herunterladen" - step_3: - subtitle: "Sind Sie sicher, dass Sie Ihr Benutzerkonto löschen möchten?" - description: "Um zu bestätigen, dass Sie Ihr Konto löschen möchten, geben Sie bitte folgende Zeichen in das Textfeld ein:" - type_to_confirm: "Zur Bestätigung Zeichenfolge eingeben" pt_BR: download_request: section_title: "Baixar meu histórico de comentários" diff --git a/plugins/talk-plugin-profile-data/translations.yml b/plugins/talk-plugin-profile-data/translations.yml index f3f62d212..43510782c 100644 --- a/plugins/talk-plugin-profile-data/translations.yml +++ b/plugins/talk-plugin-profile-data/translations.yml @@ -36,6 +36,43 @@ ar: body: "لقد ألغيت طلب حذف حسابك ل {0}. تم الآن إعادة تفعيل حسابك." error: DOWNLOAD_TOKEN_INVALID: "رابط التنزيل الخاص بك غير صالح." +de: + download_landing: + download_your_account: "Mein Kommentar-Archiv herunterladen" + download_details: "Ihr Kommentar-Archiv wird als ZIP-Datei bereitgestellt. Nach dem Entpacken erhalten Sie eine CSV-Datei, die einfach in ein Tabellenkalkulationsprogramm importiert werden kann." + all_information_included: "Für jeden Ihrer Kommentare sind folgende Informationen enthalten:" + information_included: + date: "Wann Sie den Kommentar geschrieben haben" + url: "Die dauerhafte URL (Internetadresse) des Kommentars" + body: "Der Kommentar-Text" + asset_url: "Die URL (Internetadresse) des Artikels an dem der Kommentar erscheint" + confirm: "Kommentar-Archiv herunterladen" + email: + download: + subject: "Ihre Kommentare sind zum Download bereit: {0}" + download_link_ready: "Hier klicken, um Ihre Kommentare von {0} bis {1} herunterzuladen:" + download_archive: "Archiv herunterladen" + delete: + subject: "Ihr Benutzerkonto bei {0} ist zur Löschung vorgesehen" + body: | + Wir haben eine Anfrage erhalten, Ihr Benutzerkonto zu löschen. Die Löschung ist geplant für den {1}. + + Nach diesem Zeitpunkt werden alle Ihre Kommentare von der Website und aus unserer Datenbank gelöscht. Außerdem werden Ihr Nutzername und Ihre E-Mail-Adresse aus unserem System enfernt. + + Falls Sie es sich noch anders überlegen, können Sie sich bis spätestens zum angegebenen Lösch-Zeitpunkt einloggen und die Lösch-Anfrage abbrechen. + deleted: + subject: "Ihre Benutzerkonto bei {0} wurde gelöscht" + body: | + Ihr Kommentar-Konto bei {0} ist nun gelöscht. Schade, auf Wiedersehen! + + Falls Sie sich in Zukunft erneut an der Diskussion beteiligen möchten, können Sie jederzeit ein neues Benutzerkonto einrichten. + + Wenn Sie Lust haben, schreiben Sie uns doch eine Rückmeldung, Feedback, oder Kritik an {1}, damit wir unsere Community verbessern können. Vielen Dank! + cancelDelete: + subject: "Die Lösch-Anfrage für Ihr Benutzerkonto bei {0} wurde abgebrochen" + body: "Sie haben die Lösch-Anfrage für Ihr Benutzerkonto bei {0} abgebrochen. Das Konto ist nun wieder aktiv." + error: + DOWNLOAD_TOKEN_INVALID: "Der Download-Link ist ungültig." en: download_landing: download_your_account: "Download Your Comment History" @@ -110,43 +147,6 @@ es: body: "Ha cancelado la solicitud de eliminación de cuenta para {0}. Su cuenta ahora está reactivada." error: DOWNLOAD_TOKEN_INVALID: "Su enlace de descarga no es válido." -de: - download_landing: - download_your_account: "Mein Kommentar-Archiv herunterladen" - download_details: "Ihr Kommentar-Archiv wird als ZIP-Datei bereitgestellt. Nach dem Entpacken erhalten Sie eine CSV-Datei, die einfach in ein Tabellenkalkulationsprogramm importiert werden kann." - all_information_included: "Für jeden Ihrer Kommentare sind folgende Informationen enthalten:" - information_included: - date: "Wann Sie den Kommentar geschrieben haben" - url: "Die dauerhafte URL (Internetadresse) des Kommentars" - body: "Der Kommentar-Text" - asset_url: "Die URL (Internetadresse) des Artikels an dem der Kommentar erscheint" - confirm: "Kommentar-Archiv herunterladen" - email: - download: - subject: "Ihre Kommentare sind zum Download bereit: {0}" - download_link_ready: "Hier klicken, um Ihre Kommentare von {0} bis {1} herunterzuladen:" - download_archive: "Archiv herunterladen" - delete: - subject: "Ihr Benutzerkonto bei {0} ist zur Löschung vorgesehen" - body: | - Wir haben eine Anfrage erhalten, Ihr Benutzerkonto zu löschen. Die Löschung ist geplant für den {1}. - - Nach diesem Zeitpunkt werden alle Ihre Kommentare von der Website und aus unserer Datenbank gelöscht. Außerdem werden Ihr Nutzername und Ihre E-Mail-Adresse aus unserem System enfernt. - - Falls Sie es sich noch anders überlegen, können Sie sich bis spätestens zum angegebenen Lösch-Zeitpunkt einloggen und die Lösch-Anfrage abbrechen. - deleted: - subject: "Ihre Benutzerkonto bei {0} wurde gelöscht" - body: | - Ihr Kommentar-Konto bei {0} ist nun gelöscht. Schade, auf Wiedersehen! - - Falls Sie sich in Zukunft erneut an der Diskussion beteiligen möchten, können Sie jederzeit ein neues Benutzerkonto einrichten. - - Wenn Sie Lust haben, schreiben Sie uns doch eine Rückmeldung, Feedback, oder Kritik an {1}, damit wir unsere Community verbessern können. Vielen Dank! - cancelDelete: - subject: "Die Lösch-Anfrage für Ihr Benutzerkonto bei {0} wurde abgebrochen" - body: "Sie haben die Lösch-Anfrage für Ihr Benutzerkonto bei {0} abgebrochen. Das Konto ist nun wieder aktiv." - error: - DOWNLOAD_TOKEN_INVALID: "Der Download-Link ist ungültig." he: download_landing: download_your_account: "הורד היסטורית תגובתך" diff --git a/plugins/talk-plugin-rich-text/client/translations.yml b/plugins/talk-plugin-rich-text/client/translations.yml index 0f230ace5..3fc22a700 100644 --- a/plugins/talk-plugin-rich-text/client/translations.yml +++ b/plugins/talk-plugin-rich-text/client/translations.yml @@ -3,4 +3,9 @@ en: format_bold: bold format_italic: italic format_blockquote: blockquote +he: + talk-plugin-rich-text: + format_bold: bold + format_italic: italic + format_blockquote: blockquote diff --git a/plugins/talk-plugin-sort-most-downvoted/client/translations.yml b/plugins/talk-plugin-sort-most-downvoted/client/translations.yml index 3bff2eed7..f72f730a3 100644 --- a/plugins/talk-plugin-sort-most-downvoted/client/translations.yml +++ b/plugins/talk-plugin-sort-most-downvoted/client/translations.yml @@ -1,3 +1,6 @@ en: talk-plugin-sort-most-downvoted: label: Most downvoted first +he: + talk-plugin-sort-most-downvoted: + label: Most downvoted first diff --git a/plugins/talk-plugin-sort-most-respected/client/translations.yml b/plugins/talk-plugin-sort-most-respected/client/translations.yml index 5aae35d1b..2e30c441b 100644 --- a/plugins/talk-plugin-sort-most-respected/client/translations.yml +++ b/plugins/talk-plugin-sort-most-respected/client/translations.yml @@ -8,8 +8,8 @@ de: talk-plugin-sort-most-respected: label: Häufigste "Respektiert" zuerst en: - talk-plugin-sort-most-liked: - label: Most liked first + talk-plugin-sort-most-respected: + label: Most respected first es: talk-plugin-sort-most-respected: label: Más respetadas primero diff --git a/plugins/talk-plugin-sort-most-upvoted/client/translations.yml b/plugins/talk-plugin-sort-most-upvoted/client/translations.yml index 95f7d3689..3aff9f288 100644 --- a/plugins/talk-plugin-sort-most-upvoted/client/translations.yml +++ b/plugins/talk-plugin-sort-most-upvoted/client/translations.yml @@ -1,9 +1,12 @@ -en: - talk-plugin-sort-most-upvoted: - label: Most upvoted first de: talk-plugin-sort-most-upvoted: label: Am besten bewertet +en: + talk-plugin-sort-most-upvoted: + label: Most upvoted first es: talk-plugin-sort-oldest: label: Más votadas primero +he: + talk-plugin-sort-most-upvoted: + label: Most upvoted first From 9d3e3ce45dc9f91cabc6404a92f46f08ec4b0e59 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Sun, 27 Jan 2019 21:59:38 -0500 Subject: [PATCH 096/116] Add additional Hebrew translations --- .../client/translations.yml | 2 +- .../translations.yml | 4 ++-- .../client/translations.yml | 2 +- .../translations.yml | 4 ++-- .../client/translations.yml | 2 +- .../translations.yml | 4 ++-- .../client/translations.yml | 2 +- .../client/translations.yml | 2 +- .../client/translations.yml | 24 +++++++++---------- .../server/translations.yml | 16 ++++++------- .../client/translations.yml | 4 ++-- .../client/translations.yml | 2 +- .../client/translations.yml | 2 +- 13 files changed, 35 insertions(+), 35 deletions(-) diff --git a/plugins/talk-plugin-notifications-category-featured/client/translations.yml b/plugins/talk-plugin-notifications-category-featured/client/translations.yml index ecd7a910c..08f192de7 100644 --- a/plugins/talk-plugin-notifications-category-featured/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-featured/client/translations.yml @@ -12,4 +12,4 @@ es: toggle_description: Mi comentario esta presentado he: talk-plugin-notifications-category-featured: - toggle_description: My comment is featured + toggle_description: התגובה שלי מובלטת diff --git a/plugins/talk-plugin-notifications-category-featured/translations.yml b/plugins/talk-plugin-notifications-category-featured/translations.yml index bd9dde3da..313aea7d6 100644 --- a/plugins/talk-plugin-notifications-category-featured/translations.yml +++ b/plugins/talk-plugin-notifications-category-featured/translations.yml @@ -27,5 +27,5 @@ he: talk-plugin-notifications: categories: featured: - subject: "One of your comments was featured on {0}" - body: "{0}\nA member of our team has selected this comment to be featured for other readers: {1}" + subject: "אחת מהתגובות שלך הוצגה ב {0}" + body: "{0} \n חבר בצוות שלנו בחר תגובה זו כך שתוצג עבור קוראים אחרים: {1}" diff --git a/plugins/talk-plugin-notifications-category-reply/client/translations.yml b/plugins/talk-plugin-notifications-category-reply/client/translations.yml index 300e47614..1e09a8eff 100644 --- a/plugins/talk-plugin-notifications-category-reply/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-reply/client/translations.yml @@ -12,7 +12,7 @@ es: toggle_description: Mi comentario recibe una respuesta he: talk-plugin-notifications-category-reply: - toggle_description: My comment receives a reply + toggle_description: התגובה שלי מקבלת תשובה nl_NL: talk-plugin-notifications-category-reply: toggle_description: Iemand antwoord op mijn reactie diff --git a/plugins/talk-plugin-notifications-category-reply/translations.yml b/plugins/talk-plugin-notifications-category-reply/translations.yml index 8c12efdbb..954586ebc 100644 --- a/plugins/talk-plugin-notifications-category-reply/translations.yml +++ b/plugins/talk-plugin-notifications-category-reply/translations.yml @@ -27,5 +27,5 @@ he: talk-plugin-notifications: categories: reply: - subject: "Someone has replied to your comment on {0}" - body: "{0}\n{1} replied to your comment: {2}" + subject: "מישהו השיב לתגובה שלך על {0}" + body: "{0}\n{1} השיב לתגובתך: {2}" diff --git a/plugins/talk-plugin-notifications-category-staff/client/translations.yml b/plugins/talk-plugin-notifications-category-staff/client/translations.yml index 246fe6f36..ae422d3c8 100644 --- a/plugins/talk-plugin-notifications-category-staff/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-staff/client/translations.yml @@ -12,7 +12,7 @@ es: toggle_description: Un miembro del personal responde a mi comentario he: talk-plugin-notifications-category-staff: - toggle_description: A staff member replies to my comment + toggle_description: חבר צוות עונה על תגובתי nl_NL: talk-plugin-notifications-category-staff: toggle_description: Een redactielid antwoord op mijn reactie diff --git a/plugins/talk-plugin-notifications-category-staff/translations.yml b/plugins/talk-plugin-notifications-category-staff/translations.yml index a9f30ba57..92693dfd5 100644 --- a/plugins/talk-plugin-notifications-category-staff/translations.yml +++ b/plugins/talk-plugin-notifications-category-staff/translations.yml @@ -27,8 +27,8 @@ he: talk-plugin-notifications: categories: staff: - subject: "Someone at {0} has replied to your comment" - body: "{0}\n{1} works for {2} and has replied to your comment: {3}" + subject: "מישהו ב {0} השיב לתגובתך" + body: "{0}\n{1} עובד עבור {2} והוא השיב לתגובתך: {3}" nl_NL: talk-plugin-notifications: categories: diff --git a/plugins/talk-plugin-notifications-digest-daily/client/translations.yml b/plugins/talk-plugin-notifications-digest-daily/client/translations.yml index f1f7c029f..5eb193a77 100644 --- a/plugins/talk-plugin-notifications-digest-daily/client/translations.yml +++ b/plugins/talk-plugin-notifications-digest-daily/client/translations.yml @@ -17,7 +17,7 @@ es: he: talk-plugin-notifications: digest_enum: - DAILY: In a daily digest + DAILY: בתקציר יומי nl_NL: talk-plugin-notifications: digest_enum: diff --git a/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml b/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml index 4fe714f3f..1ae6d8a69 100644 --- a/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml +++ b/plugins/talk-plugin-notifications-digest-hourly/client/translations.yml @@ -17,7 +17,7 @@ es: he: talk-plugin-notifications: digest_enum: - HOURLY: In an hourly digest + HOURLY: בתקציר שעתי nl_NL: talk-plugin-notifications: digest_enum: diff --git a/plugins/talk-plugin-notifications/client/translations.yml b/plugins/talk-plugin-notifications/client/translations.yml index 8cf16112a..2f66d04fb 100644 --- a/plugins/talk-plugin-notifications/client/translations.yml +++ b/plugins/talk-plugin-notifications/client/translations.yml @@ -72,22 +72,22 @@ es: NONE: Inmediatamente he: talk-plugin-notifications: - settings_title: Notifications - settings_subtitle: Receive notifications when - turn_off_all: I do not want to receive notifications + settings_title: התראות + settings_subtitle: קבל הודעות כאשר + turn_off_all: אני לא רוצה לקבל התראות banner_info: - title: Email Verification Required - text: To receive email notifications you must have a verified email address. - verify_now: Verify your email now + title: נדרש אימות אימייל + text: כדי לקבל התראות באימייל, עליך להיות בעל כתובת אימייל מאומתת. + verify_now: אמת את האימייל שלך כעת banner_success: - title: Email Verification Sent - text: An email has been sent to {0} containing a verification link. + title: נשלח אימות אימייל + text: הודעת אימייל נשלחה אל {0} שמכילה קישור לאימות. banner_error: - title: Error - text: There has been an error sending your verification email. Please try again later. - digest_option: Send notifications + title: שגיאה + text: אירעה שגיאה בשליחת אימייל האימות שלך. בבקשה נסה שוב מאוחר יותר. + digest_option: שלח התראות digest_enum: - NONE: Immediately + NONE: מיד nl_NL: talk-plugin-notifications: settings_title: Notificaties diff --git a/plugins/talk-plugin-notifications/server/translations.yml b/plugins/talk-plugin-notifications/server/translations.yml index 228e16b57..e3d06c9c6 100644 --- a/plugins/talk-plugin-notifications/server/translations.yml +++ b/plugins/talk-plugin-notifications/server/translations.yml @@ -44,16 +44,16 @@ he: talk-plugin-notifications: templates: digest: - subject: "Your latest comment activity at {0}" - footer: "You received this notification because you are a commenter on {0} and you opted in to receive notifications." + subject: "פעילות התגובה האחרונה שלך ב- {0}" + footer: "קיבלת את ההודעה הזו מפני שאתה מפרסם על {0} ואתה הצטרפת לקבל התראות." links: - unsubscribe: "Unsubscribe from comment notifications" + unsubscribe: "בטל את הרישום להודעות על תגובות" unsubscribe_page: - unsubscribe: "Unsubscribe from comment notifications" - click_to_confirm: "Click below to confirm that you would like to unsubscribe from all notifications" - confirm: "Confirm" - are_unsubscribed: "You are now unsubscribed from all notifications." - token_invalid: "Unsubscribe link is invalid, click the link from a more recent email or visit a comment stream and login to change your notification preferences" + unsubscribe: "בטל את הרישום להודעות על תגובות" + click_to_confirm: "לחץ למטה כדי לאשר שברצונך לבטל את הרישום לכל ההתראות" + confirm: "אשר" + are_unsubscribed: "כעת אינך רשום לכל ההודעות." + token_invalid: "הקישור לביטול רישום אינו חוקי, לחץ על הקישור מאימייל עדכני יותר או בקר בזרם תגובות והתחבר כדי לשנות את העדפות ההתראה שלך" nl_NL: talk-plugin-notifications: templates: diff --git a/plugins/talk-plugin-rich-text/client/translations.yml b/plugins/talk-plugin-rich-text/client/translations.yml index 3fc22a700..d281cf95d 100644 --- a/plugins/talk-plugin-rich-text/client/translations.yml +++ b/plugins/talk-plugin-rich-text/client/translations.yml @@ -5,7 +5,7 @@ en: format_blockquote: blockquote he: talk-plugin-rich-text: - format_bold: bold - format_italic: italic + format_bold: מודגש + format_italic: נטוי format_blockquote: blockquote diff --git a/plugins/talk-plugin-sort-most-downvoted/client/translations.yml b/plugins/talk-plugin-sort-most-downvoted/client/translations.yml index f72f730a3..8dcd7375e 100644 --- a/plugins/talk-plugin-sort-most-downvoted/client/translations.yml +++ b/plugins/talk-plugin-sort-most-downvoted/client/translations.yml @@ -3,4 +3,4 @@ en: label: Most downvoted first he: talk-plugin-sort-most-downvoted: - label: Most downvoted first + label: השלילי ביותר קודם diff --git a/plugins/talk-plugin-sort-most-upvoted/client/translations.yml b/plugins/talk-plugin-sort-most-upvoted/client/translations.yml index 3aff9f288..028e465f8 100644 --- a/plugins/talk-plugin-sort-most-upvoted/client/translations.yml +++ b/plugins/talk-plugin-sort-most-upvoted/client/translations.yml @@ -9,4 +9,4 @@ es: label: Más votadas primero he: talk-plugin-sort-most-upvoted: - label: Most upvoted first + label: החיובי ביותר קודם From c16514502c37fdaa443e0d84e065ad77d0b8de99 Mon Sep 17 00:00:00 2001 From: immber Date: Tue, 29 Jan 2019 12:41:26 -0800 Subject: [PATCH 097/116] Update recommended release version to link (#2168) * Update recommended release version to 4.7 * update release link on readme! --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c088d75b..9d7f49072 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ For advanced configuration and usage of Talk, check out our [Configuration](http ## Versions & Upgrading -The current recommended release version is v4.5.0. ^4.5 (and all future even-numbered versions) are considered stable LTS versions. We recommend ^4.5 for use in production environments. +Check our Releases page for the latest recommended release version. [Releases](https://github.com/coralproject/talk/releases) All future even-numbered versions are considered stable LTS versions. We recommend the latest verified release for use in production environments. ## More Resources From abc1664ef72e639a720b8c6bad743c62c63e5fba Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Thu, 31 Jan 2019 09:59:58 -0500 Subject: [PATCH 098/116] WIP: Snackbar close --- client/coral-embed/src/SnackBar.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/client/coral-embed/src/SnackBar.js b/client/coral-embed/src/SnackBar.js index 67851ce4e..e71676f28 100644 --- a/client/coral-embed/src/SnackBar.js +++ b/client/coral-embed/src/SnackBar.js @@ -24,7 +24,16 @@ export default class Snackbar { constructor(customStyle = {}) { this.timeout = null; this.el = document.createElement('div'); - this.el.id = 'coral-notif'; + this.el.id = 'coral-notif-tat'; + + const closeButton = document.createElement('i'); + closeButton.className = 'material-icons'; + closeButton.textContent = 'close'; + closeButton.onclick = function() { + this.el.style.opacity = 0; + }; + this.el.appendChild(closeButton); + // message overrides contents. need to fix. // Apply custom styles to the snackbar. const style = Object.assign({}, DEFAULT_STYLE, customStyle); From f11a51ebfc57261007b29805fa451d1d53067c2a Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Mon, 4 Feb 2019 12:56:50 -0500 Subject: [PATCH 099/116] Update Readme --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 9d7f49072..e7776865f 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ Check our Releases page for the latest recommended release version. [Releases](h ## More Resources -- [Talk Product Roadmap](https://www.pivotaltracker.com/n/projects/1863625) - [Our Blog](https://coralproject.net/blog) - [Community Guides for Journalism](https://guides.coralproject.net/) - [More About Us](https://coralproject.net/) From a49fbf2d05d09b8a7899368157c7d28a0140b630 Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Mon, 4 Feb 2019 17:16:15 -0500 Subject: [PATCH 100/116] Yml fix --- .../talk-plugin-auth/client/translations.yml | 47 +------------------ 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/plugins/talk-plugin-auth/client/translations.yml b/plugins/talk-plugin-auth/client/translations.yml index 14eff534b..8be54055a 100644 --- a/plugins/talk-plugin-auth/client/translations.yml +++ b/plugins/talk-plugin-auth/client/translations.yml @@ -197,52 +197,6 @@ en: cancel: "Cancel" edit: "Edit" changed_password_msg: "Your password has been successfully changed" - changed_password_msg: "Vaša lozinka je uspešno promenjena" -de: - talk-plugin-auth: - login: - email_verify_cta: "Bitte bestätigen Sie Ihre E-Mail-Adresse." - request_new_verify_email: "E-Mail-Bestätigung erneut anfordern" - verify_email: "Danke, dass Sie ein Konto eingerichtet haben! Wir haben eine Nachricht an Ihre E-Mail-Adresse geschickt, mit der Sie Ihr Konto bestätigen können." - verify_email2: "Sie müssen ihr Konto bestätigen, bevor Sie beginnen können." - not_you: "Nicht Ihr Name?" - logged_in_as: "Angemeldet als" - facebook_sign_in: "Mit Facebook anmelden" - facebook_sign_up: "Mit Facebook registrieren" - logout: "Abmelden" - sign_in: "Anmelden" - sign_in_to_join: "Anmelden, um zu diskutieren" - or: "Oder" - email: "E-Mail-Adresse" - password: "Passwort" - forgot_your_pass: "Passwort vergessen?" - need_an_account: "Brauchen Sie ein Konto?" - register: "Registrieren" - sign_up: "Registrieren" - confirm_password: "Passwort bestätigen" - username: "Nutzername" - already_have_an_account: "Konto bereits vorhanden?" - recover_password: "Passwort zurücksetzen" - email_in_use: "E-Mail-Adresse bereits vergeben" - email_or_username_in_use: "E-Mail-Adresse oder Nutzername bereits vergeben" - required_field: "Pflichtfeld" - passwords_dont_match: "Passwörter nicht identisch." - special_characters: "Nutzernamen dürfen nur Buchstaben, Zahlen und _ enthalten" - sign_in_to_comment: "Zum Kommentieren anmelden" - check_the_form: "Ungültige Eingabe. Bitte prüfen Sie Ihre Felder" - set_username_dialog: - check_the_form: "Ungültige Eingabe. Bitte prüfen Sie Ihre Felder" - continue: "Mit diesem Facebook-Profilnamen fortfahren" - error_create: "Fehler bei Änderung des Nutzernamens" - fake_comment_body: "Dies ist ein Beispiel-Kommentar. Leser können im Kommentarbereich Meinungen und Gedanken mit der Redaktion austauschen." - fake_comment_date: "Vor 1 Minute" - if_you_dont_change_your_name: "Wenn Sie Ihren Nutzernamen an diesem Punkt nicht ändern, wird Ihr Facebook-Name mit Ihren Kommentaren angezeigt." - required_field: "Pflichtfeld" - save: Speichern - special_characters: "Nutzernamen dürfen nur Buchstaben, Zahlen und _ enthalten" - username: Nutzername - write_your_username: "Nutzername bearbeiten" - your_username: "Ihr Nutzername erscheint an jedem Ihrer veröffentlichten Kommentare." es: talk-plugin-auth: login: @@ -535,6 +489,7 @@ sr: save: "Snimi" cancel: "Poništi" edit: "Uredi" + changed_password_msg: "Vaša lozinka je uspešno promenjena" zh_CN: talk-plugin-auth: login: From 456abaf862fc1267a58061b4efbee9d9738998c4 Mon Sep 17 00:00:00 2001 From: Nacho Toledo Date: Tue, 5 Feb 2019 12:49:25 -0300 Subject: [PATCH 101/116] Update appropriate
class in Profile section (#2170) * Update appropriate
class in user profile section Download my comment history has `talk-plugin-ignore-user-section` class. Should be `talk-plugin-profile-data--download-my-comment-history` (couldn't figure out the proper naming convention used). * Fix linting error * Fix lint second try --- .../client/components/DownloadCommentHistory.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/talk-plugin-profile-data/client/components/DownloadCommentHistory.js b/plugins/talk-plugin-profile-data/client/components/DownloadCommentHistory.js index 17aa10264..26134e1e7 100644 --- a/plugins/talk-plugin-profile-data/client/components/DownloadCommentHistory.js +++ b/plugins/talk-plugin-profile-data/client/components/DownloadCommentHistory.js @@ -54,7 +54,9 @@ class DownloadCommentHistory extends Component { const canRequestDownload = !lastAccountDownloadDate || hoursLeft <= 0; return ( -
+

{t('download_request.section_title')}

{t('download_request.you_will_get_a_copy')}{' '} From 94786c27114bbc2e43d17de559eb8933e20e2e75 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 5 Feb 2019 21:06:05 +0000 Subject: [PATCH 102/116] fix: repairs poor performance for assets (#2174) - fixes #2158 --- client/coral-admin/src/reducers/stories.js | 1 + client/coral-ui/components/Paginate.css | 12 ++++- models/schema/asset.js | 4 ++ routes/api/v1/assets.js | 58 ++++++++++++++++------ 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/client/coral-admin/src/reducers/stories.js b/client/coral-admin/src/reducers/stories.js index a942dd724..4a069c82e 100644 --- a/client/coral-admin/src/reducers/stories.js +++ b/client/coral-admin/src/reducers/stories.js @@ -11,6 +11,7 @@ const initialState = { criteria: { asc: 'false', filter: 'all', + limit: 20, }, }; diff --git a/client/coral-ui/components/Paginate.css b/client/coral-ui/components/Paginate.css index 813786d66..c188ccf57 100644 --- a/client/coral-ui/components/Paginate.css +++ b/client/coral-ui/components/Paginate.css @@ -16,7 +16,8 @@ text-align: center; vertical-align: middle; line-height: 30px; - width: 30px; + min-width: 30px; + padding: 5px; user-select: none; } @@ -24,7 +25,14 @@ font-size: 1.8em; } -.active { +.page:hover { + background-color: #ababab; + box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 3px 1px -2px rgba(0,0,0,.2), 0 1px 5px 0 rgba(0,0,0,.12); + a { + color: white; + } +} +.active, .active:hover { background-color: #696969; box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 3px 1px -2px rgba(0,0,0,.2), 0 1px 5px 0 rgba(0,0,0,.12); a { diff --git a/models/schema/asset.js b/models/schema/asset.js index 82de92120..6df93634b 100644 --- a/models/schema/asset.js +++ b/models/schema/asset.js @@ -81,6 +81,10 @@ Asset.index( } ); +// Indexes for listing the assets on the admin page. +Asset.index({ created_at: -1, publication_date: -1 }, { background: true }); +Asset.index({ created_at: 1, publication_date: 1 }, { background: true }); + /** * Returns true if the asset is closed, false else. */ diff --git a/routes/api/v1/assets.js b/routes/api/v1/assets.js index 6e3d4266d..a8b043946 100644 --- a/routes/api/v1/assets.js +++ b/routes/api/v1/assets.js @@ -1,4 +1,5 @@ const express = require('express'); +const Joi = require('joi'); const router = express.Router(); const authorization = require('../../../middleware/authorization'); const { ErrHTTPNotFound } = require('../../../errors'); @@ -31,36 +32,63 @@ const FilterOpenAssets = (query, filter) => { } }; +const ListAssetsSchema = Joi.object({ + value: Joi.string() + .empty('') + .default(''), + field: Joi.string() + .empty('') + .default('publication_date'), + page: Joi.number() + .empty('') + .default(1) + .min(1), + asc: Joi.bool() + .empty('') + .default(false), + filter: Joi.string() + .empty('') + .valid(['all', 'open', 'closed']) + .default('all'), + limit: Joi.number() + .empty('') + .default(20) + .max(500) + .min(0), +}); + // List assets. router.get( '/', authorization.needed('ADMIN', 'MODERATOR'), async (req, res, next) => { - const { - value = '', - field = 'publication_date', - page = 1, - asc = 'false', - filter = 'all', - limit = 20, - } = req.query; + const { value: query, error: err } = Joi.validate( + req.query, + ListAssetsSchema, + {} + ); + if (err) { + return next(err); + } + + let { value, field, page, asc, filter, limit } = query; try { - const order = asc === 'true' ? 1 : -1; + const order = asc ? 1 : -1; const queryOpts = { sort: { [field]: order, created_at: order }, skip: (page - 1) * limit, - limit, + limit: limit, }; // Find all the assets. let [result, count] = await Promise.all([ - // Find the actuall assets. + // Find the actual assets. FilterOpenAssets(AssetsService.search({ value }), filter) .sort(queryOpts.sort) - .skip(parseInt(queryOpts.skip)) - .limit(parseInt(queryOpts.limit)) + .skip(queryOpts.skip) + .limit(queryOpts.limit) .lean(), // Get the count of actual assets. @@ -70,9 +98,9 @@ router.get( // Send back the asset data. res.json({ result, - limit: Number(limit), + limit, count, - page: Number(page), + page, totalPages: Math.ceil(count / (limit === 0 ? 1 : limit)), }); } catch (e) { From 51e8035533425cf55c47474df3c6e271b515653a Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Wed, 6 Feb 2019 11:40:51 -0500 Subject: [PATCH 103/116] Break word on long description Also fix font size --- .../src/routes/Community/components/FlaggedUser.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/coral-admin/src/routes/Community/components/FlaggedUser.css b/client/coral-admin/src/routes/Community/components/FlaggedUser.css index 436f7307d..251a2df55 100644 --- a/client/coral-admin/src/routes/Community/components/FlaggedUser.css +++ b/client/coral-admin/src/routes/Community/components/FlaggedUser.css @@ -78,9 +78,10 @@ } .flaggedByReason { - font-size: 1tpx; + font-size: 14px; margin: 0px; line-height: 1.4; + word-break: break-word; } From 5173af2a27d4ed36063e1faf3f8223fef03eed82 Mon Sep 17 00:00:00 2001 From: immber Date: Wed, 6 Feb 2019 16:22:10 -0800 Subject: [PATCH 104/116] talk-plugin-toxic-comments - ADD MODEL VARIABLE TO TOXIC COMMENTS (#2178) * updated readme * added config var TALK_PERSPECTIVE_MODEL * fixed duplication on readme * fixed link on readme * fix: applied some changes --- plugins/talk-plugin-toxic-comments/README.md | 1 + .../talk-plugin-toxic-comments/server/config.js | 1 + .../server/perspective.js | 15 +++++++++------ .../server/resolvers.js | 9 ++++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/plugins/talk-plugin-toxic-comments/README.md b/plugins/talk-plugin-toxic-comments/README.md index f158a5eb3..e649f5832 100644 --- a/plugins/talk-plugin-toxic-comments/README.md +++ b/plugins/talk-plugin-toxic-comments/README.md @@ -28,3 +28,4 @@ Configuration: [ms](https://www.npmjs.com/package/ms). (Default `300ms`) - `TALK_PERSPECTIVE_DO_NOT_STORE` - Whether the API stores or deletes the comment text and context from this request after it has been evaluated. Stored comments will be used for future research and community model building purposes to improve the API over time. (Default `true`) [Perspective API - Analyze Comment Request](https://github.com/conversationai/perspectiveapi/blob/master/api_reference.md#analyzecomment-request) - `TALK_PERSPECTIVE_SEND_FEEDBACK` - If set to `TRUE`, this plugin will send back moderation actions as feedback to [Perspective](http://perspectiveapi.com/) to improve their model. (Default `FALSE`) +- `TALK_PERSPECTIVE_MODEL` - Determines the Perspective API toxicity model that should be used, i.e. `TOXICITY` vs `SEVERE_TOXICITY`. A list of available models provided by the Perspective API can be found [here](https://github.com/conversationai/perspectiveapi/blob/master/api_reference.md#models). When displaying the toxicity score, this model will be used by default. If this model isn't available on the comment metadata (such as when the model has been changed), it will fall back to the stored `TOXICITY` model as Talk will always fetch that. (Default `SEVERE_TOXICITY`) diff --git a/plugins/talk-plugin-toxic-comments/server/config.js b/plugins/talk-plugin-toxic-comments/server/config.js index cc0c2daa0..1987049cb 100644 --- a/plugins/talk-plugin-toxic-comments/server/config.js +++ b/plugins/talk-plugin-toxic-comments/server/config.js @@ -9,6 +9,7 @@ const config = { API_TIMEOUT: ms(process.env.TALK_PERSPECTIVE_TIMEOUT || '300ms'), DO_NOT_STORE: process.env.TALK_PERSPECTIVE_DO_NOT_STORE || true, SEND_FEEDBACK: process.env.TALK_PERSPECTIVE_SEND_FEEDBACK === 'TRUE', + API_MODEL: process.env.TALK_PERSPECTIVE_MODEL || 'SEVERE_TOXICITY', }; if (process.env.NODE_ENV !== 'test' && !config.API_KEY) { diff --git a/plugins/talk-plugin-toxic-comments/server/perspective.js b/plugins/talk-plugin-toxic-comments/server/perspective.js index db6d0c8de..773c097fb 100644 --- a/plugins/talk-plugin-toxic-comments/server/perspective.js +++ b/plugins/talk-plugin-toxic-comments/server/perspective.js @@ -5,8 +5,10 @@ const { THRESHOLD, API_TIMEOUT, DO_NOT_STORE, + API_MODEL, } = require('./config'); const debug = require('debug')('talk:plugin:toxic-comments'); +const get = require('lodash/get'); // Load the global Talk configuration, we want to grab some variables.. const { ROOT_URL } = require('config'); @@ -55,7 +57,7 @@ async function getScores(text) { doNotStore: DO_NOT_STORE, requestedAttributes: { TOXICITY: {}, - SEVERE_TOXICITY: {}, + [API_MODEL]: {}, }, }); if (!data || data.error) { @@ -64,7 +66,7 @@ async function getScores(text) { TOXICITY: { summaryScore: null, }, - SEVERE_TOXICITY: { + [API_MODEL]: { summaryScore: null, }, }; @@ -74,20 +76,21 @@ async function getScores(text) { TOXICITY: { summaryScore: data.attributeScores.TOXICITY.summaryScore.value, }, - SEVERE_TOXICITY: { - summaryScore: data.attributeScores.SEVERE_TOXICITY.summaryScore.value, + [API_MODEL]: { + summaryScore: data.attributeScores[API_MODEL].summaryScore.value, }, }; } /** - * Get toxicity probability + * Get toxicity probability from the scores, trying first the selection model, + * but falling back to the `TOXICITY` model when the selected model isn't found. * * @param {object} scores scores as returned by `getScores` * @return {number} toxicity probability from 0 - 1.0 */ function getProbability(scores) { - return scores.SEVERE_TOXICITY.summaryScore; + return get(scores, API_MODEL, scores.TOXICITY).summaryScore; } /** diff --git a/plugins/talk-plugin-toxic-comments/server/resolvers.js b/plugins/talk-plugin-toxic-comments/server/resolvers.js index 8143b446e..5108c07bc 100644 --- a/plugins/talk-plugin-toxic-comments/server/resolvers.js +++ b/plugins/talk-plugin-toxic-comments/server/resolvers.js @@ -1,8 +1,15 @@ const get = require('lodash/get'); +const { API_MODEL } = require('./config'); module.exports = { Comment: { toxicity: comment => - get(comment, 'metadata.perspective.SEVERE_TOXICITY.summaryScore'), + // Try to get the score from the custom model first, but fall back to the + // TOXICITY score if it isn't provided. + get( + comment, + `metadata.perspective.${API_MODEL}.summaryScore`, + get(comment, 'metadata.perspective.TOXICITY.summaryScore') + ), }, }; From 1928a7b02ecd8db7daf4bd2391f9faeb4dd47eba Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Thu, 7 Feb 2019 09:20:44 -0500 Subject: [PATCH 105/116] Create Moderation actions notification plugin (#2175) * Create Moderation actions plugin * Clarify env var in readme * Reword log message * Update with suggestion from Wyatt * Whitelist notification types * Update messaging * Rename unpublished to pending --- .gitignore | 1 + .../README.md | 19 +++ .../client/.eslintrc.json | 3 + .../client/index.js | 14 ++ .../client/translations.yml | 3 + .../config.js | 8 + .../index.js | 153 ++++++++++++++++++ .../translations.yml | 10 ++ 8 files changed, 211 insertions(+) create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/README.md create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/client/.eslintrc.json create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/client/index.js create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/config.js create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/index.js create mode 100644 plugins/talk-plugin-notifications-category-moderation-actions/translations.yml diff --git a/.gitignore b/.gitignore index 24022b9d7..aaf49c933 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ plugins/* !plugins/talk-plugin-moderation-actions !plugins/talk-plugin-notifications !plugins/talk-plugin-notifications-category-featured +!plugins/talk-plugin-notifications-category-moderation-actions !plugins/talk-plugin-notifications-category-reply !plugins/talk-plugin-notifications-category-staff !plugins/talk-plugin-notifications-digest-daily diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/README.md b/plugins/talk-plugin-notifications-category-moderation-actions/README.md new file mode 100644 index 000000000..62485037b --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/README.md @@ -0,0 +1,19 @@ +--- +title: talk-plugin-notifications-moderation-actions +permalink: /plugin/talk-plugin-notifications-moderation-actions/ +layout: plugin +plugin: + name: talk-plugin-notifications-moderation-actions + depends: + - name: talk-plugin-notifications + provides: + - Server + - Client +--- + +When a comment that is initially withheld from publication and is then +approved or rejected, the user will receive a notification email. + +## Configuration: + +- `TALK_MODERATION_NOTIFICATION_TYPES`. This plugin requires values to be set. Available options: `APPROVED`, `REJECTED` as a single string (comma separated). diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/client/.eslintrc.json b/plugins/talk-plugin-notifications-category-moderation-actions/client/.eslintrc.json new file mode 100644 index 000000000..c8a6db18a --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/client/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@coralproject/eslint-config-talk/client" +} diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/client/index.js b/plugins/talk-plugin-notifications-category-moderation-actions/client/index.js new file mode 100644 index 000000000..b00b6cadd --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/client/index.js @@ -0,0 +1,14 @@ +import translations from './translations.yml'; +import { t } from 'plugin-api/beta/client/services'; +import { createSettingsToggle } from 'talk-plugin-notifications/client/api/factories'; + +const SettingsToggle = createSettingsToggle('onModeration', () => + t('talk-plugin-notifications-category-moderation-actions.toggle_description') +); + +export default { + slots: { + notificationSettings: [SettingsToggle], + }, + translations, +}; diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml b/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml new file mode 100644 index 000000000..aa1cea3ac --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml @@ -0,0 +1,3 @@ +en: + talk-plugin-notifications-category-moderation-actions: + toggle_description: My pending comments have been reviewed diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/config.js b/plugins/talk-plugin-notifications-category-moderation-actions/config.js new file mode 100644 index 000000000..be850bbc8 --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/config.js @@ -0,0 +1,8 @@ +const MODERATION_NOTIFICATION_TYPES = + (process.env.TALK_MODERATION_NOTIFICATION_TYPES && + process.env.TALK_MODERATION_NOTIFICATION_TYPES.split(',')) || + []; + +module.exports = { + MODERATION_NOTIFICATION_TYPES, +}; diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/index.js b/plugins/talk-plugin-notifications-category-moderation-actions/index.js new file mode 100644 index 000000000..92406550a --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/index.js @@ -0,0 +1,153 @@ +const { get } = require('lodash'); +const path = require('path'); + +const { MODERATION_NOTIFICATION_TYPES } = require('./config'); + +const PENDING_STATUS_TYPES = ['PREMOD', 'SYSTEM_WITHHELD']; +const AVAILABLE_NOTIFICATION_TYPES = ['APPROVED', 'REJECTED']; + +const handle = async (ctx, comment) => { + const commentID = get(comment, 'id', null); + if (commentID === null) { + ctx.log.info('could not get comment id'); + return; + } + + // Check to see if this was a pending comment. + const commentHistory = get(comment, 'status_history', []); + let wasPending = false; + + // Check for last status before current one + if (commentHistory.length >= 2) { + const previousStatus = commentHistory[commentHistory.length - 2]; + if (PENDING_STATUS_TYPES.includes(previousStatus.type)) { + wasPending = true; + } + } + + if (!wasPending) { + ctx.log.info('comment was not pending'); + return; + } + + // Execute the graph request. + const commentQl = await ctx.graphql( + ` + query GetAuthorUserMetadata($comment_id: ID!) { + comment(id: $comment_id) { + id + user { + id + notificationSettings { + onModeration + } + } + } + } + `, + { comment_id: commentID } + ); + if (commentQl.errors) { + ctx.log.error( + { err: commentQl.errors }, + 'could not query for author metadata' + ); + return; + } + + // Check if the user has notifications enabled. + const enabled = get( + commentQl, + 'data.comment.user.notificationSettings.onModeration', + false + ); + if (!enabled) { + return; + } + + const userID = get(commentQl, 'data.comment.user.id', null); + if (!userID) { + ctx.log.info('could not get comment user id'); + return; + } + + // The user does have notifications for moderated comments enabled, queue the + // notification to be sent. + return { userID, date: comment.created_at, context: comment.id }; +}; + +const hydrate = async (ctx, category, context) => { + const comment = await ctx.graphql( + ` + query GetNotificationData($context: ID!) { + comment(id: $context) { + id + asset { + title + url + } + status_history { + type + } + } + } + `, + { context } + ); + if (comment.errors) { + throw comment.errors; + } + + const commentData = get(comment, 'data.comment'); + + const headline = get(commentData, 'asset.title', null); + const assetURL = get(commentData, 'asset.url', null); + const permalink = `${assetURL}?commentId=${commentData.id}`; + return [headline, permalink]; +}; + +const handlers = { + approved: { + handle, + category: 'moderation-actions.approved', + event: 'commentAccepted', + hydrate, + digestOrder: 10, + }, + rejected: { + handle, + category: 'moderation-actions.rejected', + event: 'commentRejected', + hydrate, + digestOrder: 10, + }, +}; + +const notifications = []; +MODERATION_NOTIFICATION_TYPES.forEach(type => { + if (AVAILABLE_NOTIFICATION_TYPES.includes(type)) { + notifications.push(handlers[type.toLowerCase()]); + } else { + console.error(`Unkown moderation notification type: ${type}`); + } +}); + +module.exports = { + typeDefs: ` + type NotificationSettings { + onModeration: Boolean! + } + + input NotificationSettingsInput { + onModeration: Boolean + } + `, + resolvers: { + NotificationSettings: { + // onModeration returns false by default if not specified. + onModeration: settings => get(settings, 'onModeration', false), + }, + }, + translations: path.join(__dirname, 'translations.yml'), + notifications, +}; diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml b/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml new file mode 100644 index 000000000..2f967e4b9 --- /dev/null +++ b/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml @@ -0,0 +1,10 @@ +en: + talk-plugin-notifications: + categories: + moderation-actions: + approved: + subject: "Your comment on {0} has been published" + body: "{0}\nThank you for submitting your comment. Your comment has now been published: {1}" + rejected: + subject: "Your comment on {0} was not published" + body: "{0}\nThe language used in one of your comments did not comply with our community guidelines, and so the comment has been removed." From 17a05059d92745814a2bb06e1f1c1074106c0ee6 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 8 Feb 2019 10:31:57 -0500 Subject: [PATCH 106/116] Add working close button and style --- client/coral-embed/src/SnackBar.js | 46 ++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/client/coral-embed/src/SnackBar.js b/client/coral-embed/src/SnackBar.js index e71676f28..c07872555 100644 --- a/client/coral-embed/src/SnackBar.js +++ b/client/coral-embed/src/SnackBar.js @@ -5,35 +5,48 @@ const DEFAULT_STYLE = { backgroundColor: '#323232', zIndex: 3, willChange: 'transform, opacity', - transition: 'transform .35s cubic-bezier(.55,0,.1,1), opacity .35s', pointerEvents: 'none', - padding: '12px 18px', + transition: 'transform .35s cubic-bezier(.55,0,.1,1), opacity .35s', + padding: '12px 18px 0', color: '#fff', - borderRadius: '3px 3px 0 0', - textAlign: 'center', + borderRadius: '4px', maxWidth: '400px', left: '50%', opacity: 0, transform: 'translate(-50%, 20px)', - bottom: 0, + bottom: '20px', boxSizing: 'border-box', fontFamily: 'Helvetica, "Helvetica Neue", Verdana, sans-serif', + display: 'flex', +}; + +const CLOSE_STYLE = { + fontSize: '20px', + cursor: 'pointer', + marginLeft: '10px', + position: 'relative', + top: '-4px', }; export default class Snackbar { constructor(customStyle = {}) { this.timeout = null; this.el = document.createElement('div'); - this.el.id = 'coral-notif-tat'; + this.el.id = 'coral-notif'; - const closeButton = document.createElement('i'); - closeButton.className = 'material-icons'; - closeButton.textContent = 'close'; - closeButton.onclick = function() { - this.el.style.opacity = 0; - }; + const closeButton = document.createElement('div'); + closeButton.className = 'snackbar-close'; + for (let key in CLOSE_STYLE) { + closeButton.style[key] = CLOSE_STYLE[key]; + } + closeButton.textContent = '×'; + closeButton.onclick = () => this.clear(); + + this.snackbarText = document.createElement('div'); + this.snackbarText.className = 'snackbar-text'; + this.snackbarText.style.paddingBottom = '12px'; + this.el.appendChild(this.snackbarText); this.el.appendChild(closeButton); - // message overrides contents. need to fix. // Apply custom styles to the snackbar. const style = Object.assign({}, DEFAULT_STYLE, customStyle); @@ -44,6 +57,7 @@ export default class Snackbar { clear() { this.el.style.opacity = 0; + this.el.style.pointerEvents = 'none'; } alert(message) { @@ -51,7 +65,7 @@ export default class Snackbar { this.el.style.transform = 'translate(-50%, 20px)'; this.el.style.opacity = 0; this.el.className = `coral-notif-${type}`; - this.el.textContent = text; + this.snackbarText.textContent = text; if (this.timeout) { clearTimeout(this.timeout); @@ -60,10 +74,12 @@ export default class Snackbar { this.timeout = setTimeout(() => { this.el.style.transform = 'translate(-50%, 0)'; this.el.style.opacity = 1; + this.el.style.pointerEvents = 'auto'; this.timeout = setTimeout(() => { this.el.style.opacity = 0; - }, 7000); + this.el.style.pointerEvents = 'none'; + }, 15000); }, 0); } From 174a80c377c295e7dc8207604a0ece37a8ce6122 Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 8 Feb 2019 10:34:40 -0500 Subject: [PATCH 107/116] Reorder style as previous --- client/coral-embed/src/SnackBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/coral-embed/src/SnackBar.js b/client/coral-embed/src/SnackBar.js index c07872555..2799a01c5 100644 --- a/client/coral-embed/src/SnackBar.js +++ b/client/coral-embed/src/SnackBar.js @@ -5,8 +5,8 @@ const DEFAULT_STYLE = { backgroundColor: '#323232', zIndex: 3, willChange: 'transform, opacity', - pointerEvents: 'none', transition: 'transform .35s cubic-bezier(.55,0,.1,1), opacity .35s', + pointerEvents: 'none', padding: '12px 18px 0', color: '#fff', borderRadius: '4px', From c6ee54c2f55890b4aac0241c0b1499b06d89e9ba Mon Sep 17 00:00:00 2001 From: Mendel Konikov Date: Fri, 8 Feb 2019 10:46:32 -0500 Subject: [PATCH 108/116] Rename classes to match id --- client/coral-embed/src/SnackBar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/coral-embed/src/SnackBar.js b/client/coral-embed/src/SnackBar.js index 2799a01c5..ca9c813d4 100644 --- a/client/coral-embed/src/SnackBar.js +++ b/client/coral-embed/src/SnackBar.js @@ -35,7 +35,7 @@ export default class Snackbar { this.el.id = 'coral-notif'; const closeButton = document.createElement('div'); - closeButton.className = 'snackbar-close'; + closeButton.className = 'coral-notif-close'; for (let key in CLOSE_STYLE) { closeButton.style[key] = CLOSE_STYLE[key]; } @@ -43,7 +43,7 @@ export default class Snackbar { closeButton.onclick = () => this.clear(); this.snackbarText = document.createElement('div'); - this.snackbarText.className = 'snackbar-text'; + this.snackbarText.className = 'coral-notif-text'; this.snackbarText.style.paddingBottom = '12px'; this.el.appendChild(this.snackbarText); this.el.appendChild(closeButton); From b3412a46cfad90bbe948fdda022544dbf1894b4a Mon Sep 17 00:00:00 2001 From: Javier Barrios Date: Mon, 11 Feb 2019 14:08:31 -0300 Subject: [PATCH 109/116] Spanish (es) translations for talk notifications plugins --- .../client/translations.yml | 3 +++ .../translations.yml | 10 ++++++++++ .../server/translations.yml | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml b/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml index aa1cea3ac..e9e982949 100644 --- a/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml +++ b/plugins/talk-plugin-notifications-category-moderation-actions/client/translations.yml @@ -1,3 +1,6 @@ en: talk-plugin-notifications-category-moderation-actions: toggle_description: My pending comments have been reviewed +es: + talk-plugin-notifications-category-moderation-actions: + toggle_description: Mis comentarios pendientes han sido revisados diff --git a/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml b/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml index 2f967e4b9..858c6049c 100644 --- a/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml +++ b/plugins/talk-plugin-notifications-category-moderation-actions/translations.yml @@ -8,3 +8,13 @@ en: rejected: subject: "Your comment on {0} was not published" body: "{0}\nThe language used in one of your comments did not comply with our community guidelines, and so the comment has been removed." +es: + talk-plugin-notifications: + categories: + moderation-actions: + approved: + subject: "Tu comentario sobre {0} ha sido publicado" + body: "{0}\nGracias por enviar tu comentario. Tu comentario se ha publicado: {1}" + rejected: + subject: "Tu comentario en {0} no fue publicado" + body: "{0}\nEl lenguaje utilizado en uno de tus comentarios no cumple con las pautas de nuestra comunidad, por lo que el comentario se eliminó." diff --git a/plugins/talk-plugin-notifications/server/translations.yml b/plugins/talk-plugin-notifications/server/translations.yml index e3d06c9c6..c84523327 100644 --- a/plugins/talk-plugin-notifications/server/translations.yml +++ b/plugins/talk-plugin-notifications/server/translations.yml @@ -40,6 +40,20 @@ en: confirm: "Confirm" are_unsubscribed: "You are now unsubscribed from all notifications." token_invalid: "Unsubscribe link is invalid, click the link from a more recent email or visit a comment stream and login to change your notification preferences" +es: + talk-plugin-notifications: + templates: + digest: + subject: "Tu última actividad de comentarios en {0}" + footer: "Recibiste esta notificación porque eres un comentarista en {0} y aceptaste recibir notificaciones." + links: + unsubscribe: "Darse de baja de las notificaciones de comentarios" + unsubscribe_page: + unsubscribe: "Darse de baja de las notificaciones de comentarios" + click_to_confirm: "Haga clic a continuación para confirmar que desea cancelar la suscripción de todas las notificaciones" + confirm: "Confirmar" + are_unsubscribed: "Se ha cancelado la suscripción a todas las notificaciones." + token_invalid: "El enlace para cancelar la suscripción no es válido, haga clic en el enlace de un correo electrónico más reciente o visite un flujo de comentarios e inicie sesión para cambiar sus preferencias de notificación" he: talk-plugin-notifications: templates: From 657bf388cf13bda59a2383bdb03fe932195329ae Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 13 Feb 2019 00:12:29 +0800 Subject: [PATCH 110/116] fix: rename devToolsExtension (#2192) Note that starting from v2.7, window.devToolsExtension was renamed to window.__REDUX_DEVTOOLS_EXTENSION__ / window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__. --- client/coral-framework/services/store.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/coral-framework/services/store.js b/client/coral-framework/services/store.js index b3a470170..ea23eb1f4 100644 --- a/client/coral-framework/services/store.js +++ b/client/coral-framework/services/store.js @@ -14,9 +14,9 @@ import { export function createStore(reducers, middlewares = []) { const enhancers = [applyMiddleware(...middlewares)]; - if (window.devToolsExtension) { + if (window.__REDUX_DEVTOOLS_EXTENSION__) { // we can't have the last argument of compose() be undefined - enhancers.push(window.devToolsExtension()); + enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__()); } return reduxCreateStore(combineReducers(reducers), {}, compose(...enhancers)); From 8163b523015aa70db5c5b7c715a604e5e5dcfcfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20G=C3=A1lvez?= Date: Wed, 13 Feb 2019 13:08:22 -0600 Subject: [PATCH 111/116] Flag users as "Always premoderate" (#2145) * Flag users as "Always premoderate" Status can be set using the action dropdown in the People tab and in User Details. Users flagged as "Always premoderate" will have their comments sent to the premod queue. Users can be filtered with the Always Premoderate status. Include Always Premoderate status changes in User History. Add spanish translations. * Reorder CSS as per cvle's suggestion * Address second comment --- bin/cli-users | 3 +- .../src/actions/alwaysPremodUserDialog.js | 14 ++++ client/coral-admin/src/actions/community.js | 11 +++ .../src/components/AlwaysPremodUserDialog.css | 29 +++++++ .../src/components/AlwaysPremodUserDialog.js | 68 ++++++++++++++++ .../coral-admin/src/components/UserDetail.css | 6 ++ .../coral-admin/src/components/UserDetail.js | 30 +++++++ .../coral-admin/src/components/UserHistory.js | 4 + .../src/constants/alwaysPremodUserDialog.js | 2 + client/coral-admin/src/constants/community.js | 3 + .../src/containers/AlwaysPremodUserDialog.js | 66 ++++++++++++++++ client/coral-admin/src/containers/Layout.js | 2 + .../coral-admin/src/containers/UserDetail.js | 16 ++++ client/coral-admin/src/graphql/index.js | 78 +++++++++++++++++++ .../src/reducers/alwaysPremodUserDialog.js | 29 +++++++ client/coral-admin/src/reducers/index.js | 2 + client/coral-admin/src/reducers/ui.js | 14 ++++ .../routes/Community/components/People.css | 6 ++ .../src/routes/Community/components/People.js | 43 +++++++++- .../src/routes/Community/containers/People.js | 19 ++++- .../src/containers/Embed.js | 12 +++ .../src/tabs/stream/containers/Stream.js | 3 + client/coral-framework/graphql/fragments.js | 2 + client/coral-framework/graphql/mutations.js | 42 ++++++++++ client/coral-framework/utils/user.js | 9 +++ graph/loaders/users.js | 8 +- graph/mutators/user.js | 14 ++++ .../resolvers/always_premod_status_history.js | 7 ++ graph/resolvers/index.js | 2 + graph/resolvers/root_mutation.js | 10 +++ graph/typeDefs.graphql | 42 ++++++++++ locales/en.yml | 14 ++++ locales/es.yml | 14 ++++ models/schema/user.js | 45 +++++++++++ perms/constants/mutation.js | 1 + perms/reducers/mutation.js | 1 + services/moderation/phases/premod.js | 6 +- services/users.js | 44 +++++++++++ 38 files changed, 714 insertions(+), 7 deletions(-) create mode 100644 client/coral-admin/src/actions/alwaysPremodUserDialog.js create mode 100644 client/coral-admin/src/components/AlwaysPremodUserDialog.css create mode 100644 client/coral-admin/src/components/AlwaysPremodUserDialog.js create mode 100644 client/coral-admin/src/constants/alwaysPremodUserDialog.js create mode 100644 client/coral-admin/src/containers/AlwaysPremodUserDialog.js create mode 100644 client/coral-admin/src/reducers/alwaysPremodUserDialog.js create mode 100644 graph/resolvers/always_premod_status_history.js diff --git a/bin/cli-users b/bin/cli-users index 743119a0a..3e8bc7741 100755 --- a/bin/cli-users +++ b/bin/cli-users @@ -105,7 +105,8 @@ function printUserAsTable(user) { Suspension: user.suspended ? `Until ${user.status.suspension.until}` : false, - } + }, + { 'Always premod comments': user.alwaysPremod } ); console.log(table.toString()); diff --git a/client/coral-admin/src/actions/alwaysPremodUserDialog.js b/client/coral-admin/src/actions/alwaysPremodUserDialog.js new file mode 100644 index 000000000..5c5cfe7b8 --- /dev/null +++ b/client/coral-admin/src/actions/alwaysPremodUserDialog.js @@ -0,0 +1,14 @@ +import { + SHOW_ALWAYS_PREMOD_USER_DIALOG, + HIDE_ALWAYS_PREMOD_USER_DIALOG, +} from '../constants/alwaysPremodUserDialog.js'; + +export const showAlwaysPremodUserDialog = ({ userId, username }) => ({ + type: SHOW_ALWAYS_PREMOD_USER_DIALOG, + userId, + username, +}); + +export const hideAlwaysPremodUserDialog = () => ({ + type: HIDE_ALWAYS_PREMOD_USER_DIALOG, +}); diff --git a/client/coral-admin/src/actions/community.js b/client/coral-admin/src/actions/community.js index c7c7cf2a3..f3bd6301e 100644 --- a/client/coral-admin/src/actions/community.js +++ b/client/coral-admin/src/actions/community.js @@ -9,6 +9,8 @@ import { SET_SEARCH_VALUE, SHOW_BANUSER_DIALOG, HIDE_BANUSER_DIALOG, + SHOW_ALWAYS_PREMOD_USER_DIALOG, + HIDE_ALWAYS_PREMOD_USER_DIALOG, SHOW_REJECT_USERNAME_DIALOG, HIDE_REJECT_USERNAME_DIALOG, SET_INDICATOR_TRACK, @@ -61,6 +63,15 @@ export const setSearchValue = value => ({ export const showBanUserDialog = user => ({ type: SHOW_BANUSER_DIALOG, user }); export const hideBanUserDialog = () => ({ type: HIDE_BANUSER_DIALOG }); +// Always premod User Dialog +export const showAlwaysPremodUserDialog = user => ({ + type: SHOW_ALWAYS_PREMOD_USER_DIALOG, + user, +}); +export const hideAlwaysPremodUserDialog = () => ({ + type: HIDE_ALWAYS_PREMOD_USER_DIALOG, +}); + // Reject Username Dialog export const showRejectUsernameDialog = user => ({ type: SHOW_REJECT_USERNAME_DIALOG, diff --git a/client/coral-admin/src/components/AlwaysPremodUserDialog.css b/client/coral-admin/src/components/AlwaysPremodUserDialog.css new file mode 100644 index 000000000..5bf1beeb7 --- /dev/null +++ b/client/coral-admin/src/components/AlwaysPremodUserDialog.css @@ -0,0 +1,29 @@ +.dialog { + border: none; + box-shadow: 0 9px 46px 8px rgba(0, 0, 0, 0.14), 0 11px 15px -7px rgba(0, 0, 0, 0.12), 0 24px 38px 3px rgba(0, 0, 0, 0.2); + width: 400px; + top: 50%; + transform: translateY(-50%); + padding: 20px; + border-radius: 4px; +} + +.header { + color: black; + font-size: 1.5em; + font-weight: 500; + margin: 0 0 8px 0; +} + +.subheader { + color: black; + font-size: 1.3em; + font-weight: 500; + margin: 0 0 8px 0; +} + +.buttons { + margin-top: 8px; + margin-bottom: 6px; + text-align: right; +} diff --git a/client/coral-admin/src/components/AlwaysPremodUserDialog.js b/client/coral-admin/src/components/AlwaysPremodUserDialog.js new file mode 100644 index 000000000..7d01d6259 --- /dev/null +++ b/client/coral-admin/src/components/AlwaysPremodUserDialog.js @@ -0,0 +1,68 @@ +import React from 'react'; +import cn from 'classnames'; +import PropTypes from 'prop-types'; +import { Dialog } from 'coral-ui'; +import styles from './AlwaysPremodUserDialog.css'; + +import Button from 'coral-ui/components/Button'; +import t from 'coral-framework/services/i18n'; + +class AlwaysPremodUserDialog extends React.Component { + handlePerform = () => { + this.props.onPerform(); + }; + + render() { + const { open, onCancel, username, info } = this.props; + return ( +

+ + × + +
+

+ {t('alwayspremoddialog.always_premod_user')} +

+

+ {t('alwayspremoddialog.are_you_sure', username)} +

+

{info}

+
+ + +
+
+
+ ); + } +} + +AlwaysPremodUserDialog.propTypes = { + open: PropTypes.bool, + onPerform: PropTypes.func.isRequired, + onCancel: PropTypes.func.isRequired, + username: PropTypes.string, + info: PropTypes.string, +}; + +export default AlwaysPremodUserDialog; diff --git a/client/coral-admin/src/components/UserDetail.css b/client/coral-admin/src/components/UserDetail.css index c35e4776f..eb379c00f 100644 --- a/client/coral-admin/src/components/UserDetail.css +++ b/client/coral-admin/src/components/UserDetail.css @@ -137,6 +137,12 @@ display: inline-block; } +.actionsMenuAlwaysPremod { + background-color: #F0B50B; + border-color: #F0B50B; + color: white; +} + .actionsMenuSuspended { background-color: #F29336; border-color: #F29336; diff --git a/client/coral-admin/src/components/UserDetail.js b/client/coral-admin/src/components/UserDetail.js index 9bde04f96..f6806915d 100644 --- a/client/coral-admin/src/components/UserDetail.js +++ b/client/coral-admin/src/components/UserDetail.js @@ -12,6 +12,7 @@ import { isUsernameRejected, isUsernameChanged, isBanned, + isAlwaysPremod, getKarma, } from 'coral-framework/utils/user'; @@ -45,6 +46,7 @@ function getUserStatusArray(user) { const statusMap = { suspended: isSuspended, banned: isBanned, + alwaysPremod: isAlwaysPremod, usernameRejected: isUsernameRejected, usernameChanged: isUsernameChanged, }; @@ -68,6 +70,12 @@ class UserDetail extends React.Component { username: this.props.root.user.username, }); + showAlwaysPremodUserDialog = () => + this.props.showAlwaysPremodUserDialog({ + userId: this.props.root.user.id, + username: this.props.root.user.username, + }); + showRejectUsernameDialog = () => this.props.showRejectUsernameDialog({ userId: this.props.root.user.id, @@ -107,6 +115,8 @@ class UserDetail extends React.Component { return t('user_detail.suspended'); case 'banned': return t('user_detail.banned'); + case 'alwaysPremod': + return t('user_detail.always_premoded'); case 'usernameRejected': return ( @@ -153,6 +163,7 @@ class UserDetail extends React.Component { toggleSelectAll, unbanUser, unsuspendUser, + removeAlwaysPremodUser, modal, acceptComment, rejectComment, @@ -169,6 +180,7 @@ class UserDetail extends React.Component { const banned = isBanned(user); const suspended = isSuspended(user); + const alwaysPremod = isAlwaysPremod(user); const usernameRejected = isUsernameRejected(user); const usernameChanged = isUsernameChanged(user); @@ -200,6 +212,7 @@ class UserDetail extends React.Component { { [styles.actionsMenuSuspended]: suspended, [styles.actionsMenuBanned]: banned, + [styles.actionsMenuAlwaysPremod]: alwaysPremod, }, 'talk-admin-user-detail-actions-button' )} @@ -231,6 +244,21 @@ class UserDetail extends React.Component { )} + {alwaysPremod ? ( + removeAlwaysPremodUser({ id: user.id })} + > + {t('user_detail.remove_always_premod')} + + ) : ( + + {t('user_detail.always_premod')} + + )} + {usernameChanged && ( {t('user_detail.username_needs_approval')} @@ -476,8 +504,10 @@ UserDetail.propTypes = { showRejectUsernameDialog: PropTypes.func, showSuspendUserDialog: PropTypes.func, showBanUserDialog: PropTypes.func, + showAlwaysPremodUserDialog: PropTypes.func, unbanUser: PropTypes.func.isRequired, unsuspendUser: PropTypes.func.isRequired, + removeAlwaysPremodUser: PropTypes.func.isRequired, modal: PropTypes.bool, rejectUsername: PropTypes.func.isRequired, }; diff --git a/client/coral-admin/src/components/UserHistory.js b/client/coral-admin/src/components/UserHistory.js index 3a3472c86..fb797c1cd 100644 --- a/client/coral-admin/src/components/UserHistory.js +++ b/client/coral-admin/src/components/UserHistory.js @@ -48,6 +48,10 @@ const buildActionResponse = (typename, created_at, until, status) => { return status ? t('user_history.user_banned') : t('user_history.ban_removed'); + case 'AlwaysPremodStatusHistory': + return status + ? t('user_history.user_always_premoded') + : t('user_history.always_premod_removed'); case 'SuspensionStatusHistory': return until ? t('user_history.suspended', readableDuration(created_at, until)) diff --git a/client/coral-admin/src/constants/alwaysPremodUserDialog.js b/client/coral-admin/src/constants/alwaysPremodUserDialog.js new file mode 100644 index 000000000..0728bbc43 --- /dev/null +++ b/client/coral-admin/src/constants/alwaysPremodUserDialog.js @@ -0,0 +1,2 @@ +export const SHOW_ALWAYS_PREMOD_USER_DIALOG = 'SHOW_ALWAYS_PREMOD_USER_DIALOG'; +export const HIDE_ALWAYS_PREMOD_USER_DIALOG = 'HIDE_ALWAYS_PREMOD_USER_DIALOG'; diff --git a/client/coral-admin/src/constants/community.js b/client/coral-admin/src/constants/community.js index 1ffe3f8d6..b47ec0455 100644 --- a/client/coral-admin/src/constants/community.js +++ b/client/coral-admin/src/constants/community.js @@ -14,6 +14,9 @@ export const FETCH_FLAGGED_COMMENTERS_FAILURE = `${prefix}_FETCH_FLAGGED_COMMENT export const SHOW_BANUSER_DIALOG = `${prefix}_SHOW_BANUSER_DIALOG`; export const HIDE_BANUSER_DIALOG = `${prefix}_HIDE_BANUSER_DIALOG`; +export const SHOW_ALWAYS_PREMOD_USER_DIALOG = `${prefix}_SHOW_ALWAYS_PREMOD_USER_DIALOG`; +export const HIDE_ALWAYS_PREMOD_USER_DIALOG = `${prefix}_HIDE_ALWAYS_PREMOD_USER_DIALOG`; + export const SHOW_REJECT_USERNAME_DIALOG = `${prefix}_SHOW_REJECT_USERNAME_DIALOG`; export const HIDE_REJECT_USERNAME_DIALOG = `${prefix}_HIDE_REJECT_USERNAME_DIALOG`; diff --git a/client/coral-admin/src/containers/AlwaysPremodUserDialog.js b/client/coral-admin/src/containers/AlwaysPremodUserDialog.js new file mode 100644 index 000000000..e6e195810 --- /dev/null +++ b/client/coral-admin/src/containers/AlwaysPremodUserDialog.js @@ -0,0 +1,66 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import AlwaysPremodUserDialog from '../components/AlwaysPremodUserDialog'; +import { hideAlwaysPremodUserDialog } from '../actions/alwaysPremodUserDialog'; +import { withAlwaysPremodUser } from 'coral-framework/graphql/mutations'; +import { compose } from 'react-apollo'; +import t from 'coral-framework/services/i18n'; + +class AlwaysPremodUserDialogContainer extends Component { + alwaysPremodUser = async () => { + const { userId, alwaysPremodUser, hideAlwaysPremodUserDialog } = this.props; + await alwaysPremodUser({ id: userId }); + hideAlwaysPremodUserDialog(); + }; + + getInfo() { + let note = t('alwayspremoddialog.note_always_premod_user'); + return t('alwayspremoddialog.note', note); + } + + render() { + return ( + + ); + } +} + +AlwaysPremodUserDialogContainer.propTypes = { + alwaysPremodUser: PropTypes.func.isRequired, + hideAlwaysPremodUserDialog: PropTypes.func, + open: PropTypes.bool, + username: PropTypes.string, +}; + +const mapStateToProps = ({ + alwaysPremodUserDialog: { open, userId, username }, +}) => ({ + open, + userId, + username, +}); + +const mapDispatchToProps = dispatch => ({ + ...bindActionCreators( + { + hideAlwaysPremodUserDialog, + }, + dispatch + ), +}); + +export default compose( + connect( + mapStateToProps, + mapDispatchToProps + ), + withAlwaysPremodUser +)(AlwaysPremodUserDialogContainer); diff --git a/client/coral-admin/src/containers/Layout.js b/client/coral-admin/src/containers/Layout.js index 22c624b7d..10e4666f8 100644 --- a/client/coral-admin/src/containers/Layout.js +++ b/client/coral-admin/src/containers/Layout.js @@ -5,6 +5,7 @@ import Layout from '../components/Layout'; import Login from '../containers/Login'; import { FullLoading } from '../components/FullLoading'; import BanUserDialog from './BanUserDialog'; +import AlwaysPremodUserDialog from './AlwaysPremodUserDialog'; import SuspendUserDialog from './SuspendUserDialog'; import RejectUsernameDialog from './RejectUsernameDialog'; import { toggleModal as toggleShortcutModal } from '../actions/moderation'; @@ -40,6 +41,7 @@ class LayoutContainer extends React.Component { toggleShortcutModal={toggleShortcutModal} currentUser={this.props.currentUser} > + diff --git a/client/coral-admin/src/containers/UserDetail.js b/client/coral-admin/src/containers/UserDetail.js index e9ffea4d1..7053f6c0b 100644 --- a/client/coral-admin/src/containers/UserDetail.js +++ b/client/coral-admin/src/containers/UserDetail.js @@ -22,12 +22,14 @@ import { withSetCommentStatus, withUnbanUser, withUnsuspendUser, + withRemoveAlwaysPremodUser, withRejectUsername, withPostFlag, } from 'coral-framework/graphql/mutations'; import UserDetailComment from './UserDetailComment'; import update from 'immutability-helper'; import { showBanUserDialog } from 'actions/banUserDialog'; +import { showAlwaysPremodUserDialog } from 'actions/alwaysPremodUserDialog'; import { showSuspendUserDialog } from 'actions/suspendUserDialog'; import { showRejectUsernameDialog } from 'actions/rejectUsernameDialog'; @@ -153,6 +155,7 @@ UserDetailContainer.propTypes = { selectedCommentIds: PropTypes.array, unbanUser: PropTypes.func.isRequired, unsuspendUser: PropTypes.func.isRequired, + removeAlwaysPremodUser: PropTypes.func.isRequired, rejectUsername: PropTypes.func.isRequired, userId: PropTypes.string, }; @@ -218,6 +221,17 @@ export const withUserDetailQuery = withQuery( created_at } } + alwaysPremod { + status + history { + status + assigned_by { + id + username + } + created_at + } + }, username { status history { @@ -280,6 +294,7 @@ const mapDispatchToProps = dispatch => ({ ...bindActionCreators( { showBanUserDialog, + showAlwaysPremodUserDialog, showSuspendUserDialog, showRejectUsernameDialog, changeTab, @@ -302,6 +317,7 @@ export default compose( withSetCommentStatus, withUnbanUser, withUnsuspendUser, + withRemoveAlwaysPremodUser, withRejectUsername, withPostFlag, withRouter diff --git a/client/coral-admin/src/graphql/index.js b/client/coral-admin/src/graphql/index.js index 9fca9f497..11eea3d18 100644 --- a/client/coral-admin/src/graphql/index.js +++ b/client/coral-admin/src/graphql/index.js @@ -10,6 +10,9 @@ const userStatusFragment = gql` banned { status } + alwaysPremod { + status + } suspension { until } @@ -125,6 +128,64 @@ export default { }); }, }), + AlwaysPremodUser: ({ + variables: { + input: { id }, + }, + }) => ({ + update: proxy => { + const fragmentId = `User_${id}`; + const data = proxy.readFragment({ + fragment: userStatusFragment, + id: fragmentId, + }); + + const updated = update(data, { + state: { + status: { + alwaysPremod: { + status: { $set: true }, + }, + }, + }, + }); + + proxy.writeFragment({ + fragment: userStatusFragment, + id: fragmentId, + data: updated, + }); + }, + }), + RemoveAlwaysPremodUser: ({ + variables: { + input: { id }, + }, + }) => ({ + update: proxy => { + const fragmentId = `User_${id}`; + const data = proxy.readFragment({ + fragment: userStatusFragment, + id: fragmentId, + }); + + const updated = update(data, { + state: { + status: { + alwaysPremod: { + status: { $set: false }, + }, + }, + }, + }); + + proxy.writeFragment({ + fragment: userStatusFragment, + id: fragmentId, + data: updated, + }); + }, + }), BanUser: ({ variables: { input: { id }, @@ -154,6 +215,23 @@ export default { }); }, }), + SetUserAlwaysPremodStatus: ({ variables: { status, id } }) => ({ + updateQueries: { + TalkAdmin_Community: prev => { + if (!status) { + return prev; + } + const updated = update(prev, { + users: { + nodes: { + $apply: nodes => nodes.filter(node => node.id !== id), + }, + }, + }); + return updated; + }, + }, + }), UnbanUser: ({ variables: { input: { id }, diff --git a/client/coral-admin/src/reducers/alwaysPremodUserDialog.js b/client/coral-admin/src/reducers/alwaysPremodUserDialog.js new file mode 100644 index 000000000..a5da4c54b --- /dev/null +++ b/client/coral-admin/src/reducers/alwaysPremodUserDialog.js @@ -0,0 +1,29 @@ +import { + SHOW_ALWAYS_PREMOD_USER_DIALOG, + HIDE_ALWAYS_PREMOD_USER_DIALOG, +} from '../constants/alwaysPremodUserDialog'; + +const initialState = { + open: false, + userId: null, + username: '', +}; + +export default function alwaysPremodUserDialog(state = initialState, action) { + switch (action.type) { + case SHOW_ALWAYS_PREMOD_USER_DIALOG: + return { + ...state, + open: true, + userId: action.userId, + username: action.username, + }; + case HIDE_ALWAYS_PREMOD_USER_DIALOG: + return { + ...state, + open: false, + }; + default: + return state; + } +} diff --git a/client/coral-admin/src/reducers/index.js b/client/coral-admin/src/reducers/index.js index e806f5d11..cded51943 100644 --- a/client/coral-admin/src/reducers/index.js +++ b/client/coral-admin/src/reducers/index.js @@ -5,6 +5,7 @@ import moderation from './moderation'; import install from './install'; import banUserDialog from './banUserDialog'; import suspendUserDialog from './suspendUserDialog'; +import alwaysPremodUserDialog from './alwaysPremodUserDialog'; import rejectUsernameDialog from './rejectUsernameDialog'; import userDetail from './userDetail'; import ui from './ui'; @@ -14,6 +15,7 @@ export default { banUserDialog, configure, suspendUserDialog, + alwaysPremodUserDialog, userDetail, stories, community, diff --git a/client/coral-admin/src/reducers/ui.js b/client/coral-admin/src/reducers/ui.js index dcb9ddbe0..263ae4ddd 100644 --- a/client/coral-admin/src/reducers/ui.js +++ b/client/coral-admin/src/reducers/ui.js @@ -6,6 +6,10 @@ import { SHOW_SUSPEND_USER_DIALOG, HIDE_SUSPEND_USER_DIALOG, } from '../constants/suspendUserDialog'; +import { + SHOW_ALWAYS_PREMOD_USER_DIALOG, + HIDE_ALWAYS_PREMOD_USER_DIALOG, +} from '../constants/alwaysPremodUserDialog'; const initialState = { modal: false, @@ -23,6 +27,11 @@ export default function config(state = initialState, action) { ...state, modal: true, }; + case SHOW_ALWAYS_PREMOD_USER_DIALOG: + return { + ...state, + modal: true, + }; case HIDE_BAN_USER_DIALOG: return { ...state, @@ -33,6 +42,11 @@ export default function config(state = initialState, action) { ...state, modal: false, }; + case HIDE_ALWAYS_PREMOD_USER_DIALOG: + return { + ...state, + modal: false, + }; default: return state; } diff --git a/client/coral-admin/src/routes/Community/components/People.css b/client/coral-admin/src/routes/Community/components/People.css index aea321cd7..4b7cfd4a8 100644 --- a/client/coral-admin/src/routes/Community/components/People.css +++ b/client/coral-admin/src/routes/Community/components/People.css @@ -130,6 +130,12 @@ th.header:nth-child(2), th.header:nth-child(3) { font-size: 0.98em; } +.actionsMenuAlwaysPremod { + background-color: #F0B50B; + border-color: #F0B50B; + color: white; +} + .actionsMenuSuspended { background-color: #F29336; border-color: #F29336; diff --git a/client/coral-admin/src/routes/Community/components/People.js b/client/coral-admin/src/routes/Community/components/People.js index e40b6cca4..cbcb74bc9 100644 --- a/client/coral-admin/src/routes/Community/components/People.js +++ b/client/coral-admin/src/routes/Community/components/People.js @@ -8,7 +8,11 @@ import LoadMore from '../../../components/LoadMore'; import PropTypes from 'prop-types'; import ActionsMenu from 'coral-admin/src/components/ActionsMenu'; import ActionsMenuItem from 'coral-admin/src/components/ActionsMenuItem'; -import { isSuspended, isBanned } from 'coral-framework/utils/user'; +import { + isSuspended, + isBanned, + isAlwaysPremod, +} from 'coral-framework/utils/user'; import { RadioGroup, Radio } from 'react-mdl'; import moment from 'moment'; import { @@ -43,6 +47,8 @@ class People extends React.Component { return 'Banned'; } else if (isSuspended(user)) { return 'Suspended'; + } else if (isAlwaysPremod(user)) { + return 'Always premoderated'; } return ''; }; @@ -55,6 +61,10 @@ class People extends React.Component { this.props.unbanUser(input); }; + removeAlwaysPremodUser = input => { + this.props.removeAlwaysPremodUser(input); + }; + showBanUserDialog = input => { this.props.showBanUserDialog(input); }; @@ -63,6 +73,10 @@ class People extends React.Component { this.props.showSuspendUserDialog(input); }; + showAlwaysPremodUserDialog = input => { + this.props.showAlwaysPremodUserDialog(input); + }; + render() { const { onFilterChange, @@ -109,6 +123,7 @@ class People extends React.Component { {t('community.active')} {t('community.suspended')} {t('community.banned')} + {t('community.always_premod')}
{t('community.filter_role')} @@ -188,6 +203,9 @@ class People extends React.Component { user ), [styles.actionsMenuBanned]: isBanned(user), + [styles.actionsMenuAlwaysPremod]: isAlwaysPremod( + user + ), }, 'talk-admin-user-detail-actions-button' )} @@ -232,6 +250,27 @@ class People extends React.Component { {t('modqueue.ban_user_actions')} )} + + {isAlwaysPremod(user) ? ( + + this.removeAlwaysPremodUser({ id: user.id }) + } + > + Remove Always Premoderate + + ) : ( + + this.showAlwaysPremodUserDialog({ + userId: user.id, + username: user.username, + }) + } + > + {t('modqueue.always_premod_user_actions')} + + )} @@ -294,8 +333,10 @@ People.propTypes = { viewUserDetail: PropTypes.func.isRequired, unbanUser: PropTypes.func.isRequired, unsuspendUser: PropTypes.func.isRequired, + removeAlwaysPremodUser: PropTypes.func.isRequired, showSuspendUserDialog: PropTypes.func, showBanUserDialog: PropTypes.func, + showAlwaysPremodUserDialog: PropTypes.func, loadMore: PropTypes.func.isRequired, }; diff --git a/client/coral-admin/src/routes/Community/containers/People.js b/client/coral-admin/src/routes/Community/containers/People.js index 7f47795b4..57fb7fa8e 100644 --- a/client/coral-admin/src/routes/Community/containers/People.js +++ b/client/coral-admin/src/routes/Community/containers/People.js @@ -8,9 +8,11 @@ import { withUnbanUser, withUnsuspendUser, withSetUserRole, + withRemoveAlwaysPremodUser, } from 'coral-framework/graphql/mutations'; import { showBanUserDialog } from 'actions/banUserDialog'; import { showSuspendUserDialog } from 'actions/suspendUserDialog'; +import { showAlwaysPremodUserDialog } from 'actions/alwaysPremodUserDialog'; import { viewUserDetail } from '../../../actions/userDetail'; import { appendNewNodes } from 'plugin-api/beta/client/utils'; import update from 'immutability-helper'; @@ -30,6 +32,7 @@ class PeopleContainer extends React.PureComponent { active: { suspended: false, banned: false }, suspended: { suspended: true }, banned: { banned: true }, + alwaysPremod: { alwaysPremod: true }, }; onFilterChange = filter => e => @@ -40,7 +43,6 @@ class PeopleContainer extends React.PureComponent { getFilterState = () => { const { role, status } = this.state; - return { status: this.statusToQuery[status] || null, role: role || null, @@ -106,8 +108,10 @@ class PeopleContainer extends React.PureComponent { setUserRole={this.props.setUserRole} showSuspendUserDialog={this.props.showSuspendUserDialog} showBanUserDialog={this.props.showBanUserDialog} + showAlwaysPremodUserDialog={this.props.showAlwaysPremodUserDialog} unbanUser={this.props.unbanUser} unsuspendUser={this.props.unsuspendUser} + removeAlwaysPremodUser={this.props.removeAlwaysPremodUser} data={this.props.data} root={this.props.root} users={this.props.root.users} @@ -122,9 +126,11 @@ PeopleContainer.propTypes = { setUserRole: PropTypes.func.isRequired, unbanUser: PropTypes.func.isRequired, unsuspendUser: PropTypes.func.isRequired, + removeAlwaysPremodUser: PropTypes.func.isRequired, viewUserDetail: PropTypes.func.isRequired, showSuspendUserDialog: PropTypes.func, showBanUserDialog: PropTypes.func, + showAlwaysPremodUserDialog: PropTypes.func, data: PropTypes.object, root: PropTypes.object, }; @@ -153,6 +159,9 @@ const LOAD_MORE_QUERY = gql` banned { status } + alwaysPremod { + status + } suspension { until } @@ -187,6 +196,9 @@ const FILTER_QUERY = gql` banned { status } + alwaysPremod { + status + } suspension { until } @@ -203,6 +215,7 @@ const mapDispatchToProps = dispatch => viewUserDetail, showSuspendUserDialog, showBanUserDialog, + showAlwaysPremodUserDialog, }, dispatch ); @@ -215,6 +228,7 @@ export default compose( withSetUserRole, withUnsuspendUser, withUnbanUser, + withRemoveAlwaysPremodUser, withQuery( gql` query TalkAdmin_Community_People { @@ -236,6 +250,9 @@ export default compose( banned { status } + alwaysPremod { + status + } suspension { until } diff --git a/client/coral-embed-stream/src/containers/Embed.js b/client/coral-embed-stream/src/containers/Embed.js index 836def259..ef7c361a5 100644 --- a/client/coral-embed-stream/src/containers/Embed.js +++ b/client/coral-embed-stream/src/containers/Embed.js @@ -175,6 +175,9 @@ const USER_BANNED_SUBSCRIPTION = gql` banned { status } + alwaysPremod { + status + } suspension { until } @@ -196,6 +199,9 @@ const USER_SUSPENDED_SUBSCRIPTION = gql` banned { status } + alwaysPremod { + status + } suspension { until } @@ -217,6 +223,9 @@ const USERNAME_REJECTED_SUBSCRIPTION = gql` banned { status } + alwaysPremod { + status + } suspension { until } @@ -253,6 +262,9 @@ const EMBED_QUERY = gql` banned { status } + alwaysPremod { + status + } suspension { until } diff --git a/client/coral-embed-stream/src/tabs/stream/containers/Stream.js b/client/coral-embed-stream/src/tabs/stream/containers/Stream.js index 1f32fcedf..a379e6dbd 100644 --- a/client/coral-embed-stream/src/tabs/stream/containers/Stream.js +++ b/client/coral-embed-stream/src/tabs/stream/containers/Stream.js @@ -398,6 +398,9 @@ const fragments = { banned { status } + alwaysPremod { + status + } suspension { until } diff --git a/client/coral-framework/graphql/fragments.js b/client/coral-framework/graphql/fragments.js index 778214b8b..976776933 100644 --- a/client/coral-framework/graphql/fragments.js +++ b/client/coral-framework/graphql/fragments.js @@ -3,6 +3,7 @@ import { createDefaultResponseFragments } from '../utils'; // fragments defined here are automatically registered. export default { ...createDefaultResponseFragments( + 'AlwaysPremodUserResponse', 'BanUsersResponse', 'ChangeUsernameResponse', 'CloseAssetResponse', @@ -14,6 +15,7 @@ export default { 'IgnoreUserResponse', 'ModifyTagResponse', 'PostFlagResponse', + 'RemoveAlwaysPremodUserResponse', 'SetCommentStatusResponse', 'SetUsernameResponse', 'SetUsernameStatusResponse', diff --git a/client/coral-framework/graphql/mutations.js b/client/coral-framework/graphql/mutations.js index 8191c2cd0..78c044270 100644 --- a/client/coral-framework/graphql/mutations.js +++ b/client/coral-framework/graphql/mutations.js @@ -412,6 +412,48 @@ export const withSetUsername = withMutation( } ); +export const withAlwaysPremodUser = withMutation( + gql` + mutation AlwaysPremodUser($input: AlwaysPremodUserInput!) { + alwaysPremodUser(input: $input) { + ...AlwaysPremodUserResponse + } + } + `, + { + props: ({ mutate }) => ({ + alwaysPremodUser: input => { + return mutate({ + variables: { + input, + }, + }); + }, + }), + } +); + +export const withRemoveAlwaysPremodUser = withMutation( + gql` + mutation RemoveAlwaysPremodUser($input: RemoveAlwaysPremodUserInput!) { + removeAlwaysPremodUser(input: $input) { + ...RemoveAlwaysPremodUserResponse + } + } + `, + { + props: ({ mutate }) => ({ + removeAlwaysPremodUser: input => { + return mutate({ + variables: { + input, + }, + }); + }, + }), + } +); + export const withBanUser = withMutation( gql` mutation BanUser($input: BanUserInput!) { diff --git a/client/coral-framework/utils/user.js b/client/coral-framework/utils/user.js index cdc0884d5..174815bfb 100644 --- a/client/coral-framework/utils/user.js +++ b/client/coral-framework/utils/user.js @@ -35,6 +35,15 @@ export const isBanned = user => { return get(user, 'state.status.banned.status'); }; +/** + * isAlwaysPremod + * retrieves boolean based on the user premod status + */ + +export const isAlwaysPremod = user => { + return get(user, 'state.status.alwaysPremod.status'); +}; + /** * isUsernameRejected * retrieves boolean based on the username status diff --git a/graph/loaders/users.js b/graph/loaders/users.js index 11d35ac95..cc91af340 100644 --- a/graph/loaders/users.js +++ b/graph/loaders/users.js @@ -11,7 +11,7 @@ const mergeState = (query, state) => { } if (status) { - const { username, banned, suspended } = status; + const { username, banned, suspended, alwaysPremod } = status; if (typeof username !== 'undefined' && username && username.length > 0) { query.merge({ @@ -27,6 +27,12 @@ const mergeState = (query, state) => { }); } + if (typeof alwaysPremod !== 'undefined' && alwaysPremod !== null) { + query.merge({ + 'status.alwaysPremod.status': alwaysPremod, + }); + } + if (typeof suspended !== 'undefined' && suspended !== null) { if (suspended) { query.merge({ diff --git a/graph/mutators/user.js b/graph/mutators/user.js index fa6a18ee5..3732ee0de 100644 --- a/graph/mutators/user.js +++ b/graph/mutators/user.js @@ -10,6 +10,7 @@ const { SET_USERNAME, SET_USER_USERNAME_STATUS, SET_USER_BAN_STATUS, + SET_USER_ALWAYS_PREMOD_STATUS, SET_USER_SUSPENSION_STATUS, UPDATE_USER_ROLES, DELETE_OTHER_USER, @@ -32,6 +33,13 @@ const setUserBanStatus = async (ctx, id, status = false, message = null) => { } }; +const setUserAlwaysPremodStatus = async (ctx, id, status = false) => { + const user = await Users.setAlwaysPremodStatus(id, status, ctx.user.id); + if (user.alwaysPremod) { + ctx.pubsub.publish('userAlwaysPremod', user); + } +}; + const setUserSuspensionStatus = async ( ctx, id, @@ -220,6 +228,7 @@ module.exports = ctx => { setRole: () => Promise.reject(new ErrNotAuthorized()), setUserBanStatus: () => Promise.reject(new ErrNotAuthorized()), setUserSuspensionStatus: () => Promise.reject(new ErrNotAuthorized()), + setUserAlwaysPremodStatus: () => Promise.reject(new ErrNotAuthorized()), setUserUsernameStatus: () => Promise.reject(new ErrNotAuthorized()), setUsername: () => Promise.reject(new ErrNotAuthorized()), stopIgnoringUser: () => Promise.reject(new ErrNotAuthorized()), @@ -256,6 +265,11 @@ module.exports = ctx => { setUserBanStatus(ctx, id, status, message); } + if (ctx.user.can(SET_USER_ALWAYS_PREMOD_STATUS)) { + mutators.User.setUserAlwaysPremodStatus = (id, status) => + setUserAlwaysPremodStatus(ctx, id, status); + } + if (ctx.user.can(SET_USER_SUSPENSION_STATUS)) { mutators.User.setUserSuspensionStatus = (id, until, message) => setUserSuspensionStatus(ctx, id, until, message); diff --git a/graph/resolvers/always_premod_status_history.js b/graph/resolvers/always_premod_status_history.js new file mode 100644 index 000000000..9fccae1d7 --- /dev/null +++ b/graph/resolvers/always_premod_status_history.js @@ -0,0 +1,7 @@ +const { decorateUserField } = require('./util'); + +const AlwaysPremodStatusHistory = {}; + +decorateUserField(AlwaysPremodStatusHistory, 'assigned_by'); + +module.exports = AlwaysPremodStatusHistory; diff --git a/graph/resolvers/index.js b/graph/resolvers/index.js index 4bc9d9624..7dc9d24c8 100644 --- a/graph/resolvers/index.js +++ b/graph/resolvers/index.js @@ -3,6 +3,7 @@ const debug = require('debug')('talk:graph:resolvers'); const Action = require('./action'); const ActionSummary = require('./action_summary'); +const AlwaysPremodStatusHistory = require('./always_premod_status_history'); const Asset = require('./asset'); const AssetActionSummary = require('./asset_action_summary'); const BannedStatusHistory = require('./banned_status_history'); @@ -37,6 +38,7 @@ const plugins = require('../../services/plugins'); let resolvers = { Action, ActionSummary, + AlwaysPremodStatusHistory, Asset, AssetActionSummary, BannedStatusHistory, diff --git a/graph/resolvers/root_mutation.js b/graph/resolvers/root_mutation.js index d2c2965e0..6572cdca2 100644 --- a/graph/resolvers/root_mutation.js +++ b/graph/resolvers/root_mutation.js @@ -74,6 +74,16 @@ const RootMutation = { unbanUser: async (obj, { input: { id } }, { mutators: { User } }) => { await User.setUserBanStatus(id, false); }, + alwaysPremodUser: async (obj, { input: { id } }, { mutators: { User } }) => { + await User.setUserAlwaysPremodStatus(id, true); + }, + removeAlwaysPremodUser: async ( + obj, + { input: { id } }, + { mutators: { User } } + ) => { + await User.setUserAlwaysPremodStatus(id, false); + }, ignoreUser: async (_, { id }, { mutators: { User } }) => { await User.ignoreUser({ id }); }, diff --git a/graph/typeDefs.graphql b/graph/typeDefs.graphql index ebbf8203d..d1f2ca5a5 100644 --- a/graph/typeDefs.graphql +++ b/graph/typeDefs.graphql @@ -142,6 +142,10 @@ input UserStatusInput { # suspended will restrict the returned users to only those that are, or are not # suspended. If not provided, no filtering will be performed. suspended: Boolean + + # alwaysPremod will restrict the returned users to only those that are, or are not + # marked as always premoderate. If not provided, no filtering will be performed. + alwaysPremod: Boolean } type UsernameStatusHistory { @@ -166,6 +170,17 @@ type BannedStatus { history: [BannedStatusHistory!] } +type AlwaysPremodStatusHistory { + status: Boolean! + assigned_by: User + created_at: Date! +} + +type AlwaysPremodStatus { + status: Boolean! + history: [AlwaysPremodStatusHistory!] +} + type SuspensionStatusHistory { until: Date assigned_by: User @@ -184,6 +199,9 @@ type UserStatus { # banned is the bool that determines if the user is banned or not. banned: BannedStatus! + # alwaysPremod is the bool that determines if the user comments are always pushed to the premod queue or not + alwaysPremod: AlwaysPremodStatus! + # suspension is the date that the user is suspended until. suspension: SuspensionStatus! } @@ -1446,6 +1464,22 @@ type UnbanUserResponse implements Response { errors: [UserError!] } +input AlwaysPremodUserInput { + id: ID! +} + +input RemoveAlwaysPremodUserInput { + id: ID! +} + +type AlwaysPremodUserResponse implements Response { + errors: [UserError!] +} + +type RemoveAlwaysPremodUserResponse implements Response { + errors: [UserError!] +} + input SuspendUserInput { id: ID! message: String! @@ -1545,6 +1579,14 @@ type RootMutation { # Mutation is restricted. unsuspendUser(input: UnsuspendUserInput!): UnsuspendUserResponse + # Sets the always premod status on a given user. Requires the `MODERATOR` role. + # Mutation is restricted. + alwaysPremodUser(input: AlwaysPremodUserInput!): AlwaysPremodUserResponse + + # Sets the always premod status on a given user. Requires the `MODERATOR` role. + # Mutation is restricted. + removeAlwaysPremodUser(input: RemoveAlwaysPremodUserInput!): RemoveAlwaysPremodUserResponse + # Sets the ban status on a given user. Requires the `MODERATOR` role. # Mutation is restricted. banUser(input: BanUserInput!): BanUsersResponse diff --git a/locales/en.yml b/locales/en.yml index ad831f5a3..dc5653ed1 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -3,6 +3,13 @@ en: sort_comments: 'Sort Comments' view_options: 'View Options' already_flagged_username: 'You have already flagged this username.' + alwayspremoddialog: + are_you_sure: 'Are you sure you would like to always premoderate {0}?' + always_premod_user: 'Always premoderate user?' + cancel: Cancel + note: 'Note: {0}' + note_always_premod_user: 'Always premoderating this user will place all of their comments in the Pre-Moderate queue.' + yes_always_premod_user: 'Yes, always premoderate user' bandialog: are_you_sure: 'Are you sure you would like to ban {0}?' ban_user: 'Ban User?' @@ -64,6 +71,7 @@ en: admin: Administrator ads_marketing: 'This looks like an ad/marketing' all: 'All' + always_premod: 'Always premoderated' are_you_sure: 'Are you sure you would like to ban {0}?' ban_user: 'Ban User?' banned: Banned @@ -382,6 +390,7 @@ en: actions: Actions all: all all_streams: 'All Streams' + always_premod_user_actions: 'Always Premod User' approve: Approve approved: Approved ban_user: Ban @@ -528,6 +537,8 @@ en: username_flags: 'flags for this username' user_detail: all: All + always_premod: 'Always Premod User' + always_premoded: 'Always premoderated' ban: 'Ban User' banned: Banned email: Email @@ -539,6 +550,7 @@ en: reject_rate: 'Reject Rate' reject_username: 'Reject Username' rejected: Rejected + remove_always_premod: 'Remove Always Premoderate' remove_ban: 'Remove Ban' remove_suspension: 'Remove Suspension' suspend: 'Suspend User' @@ -552,12 +564,14 @@ en: username_rejected: 'Username rejected' user_history: action: Action + always_premod_removed: 'Always premoderate removed' ban_removed: 'Ban removed' date: Date suspended: 'Suspended, {0}' suspension_removed: 'Suspension removed' system: System taken_by: 'Taken By' + user_always_premoded: 'User always premoderated' user_banned: 'User banned' username_status: 'Username {0}' user_impersonating: 'This user is impersonating' diff --git a/locales/es.yml b/locales/es.yml index cff505cbd..57a789510 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -3,6 +3,13 @@ es: sort_comments: 'Ordenar comentarios' view_options: 'Ver opciones' already_flagged_username: 'Usted ya reportó a este usuario.' + alwayspremoddialog: + are_you_sure: '¿Estás seguro que quieres pre-moderar a {0}?' + always_premod_user: '¿Pre-moderar al Usuario?' + cancel: Cancelar + note: 'Nota: {0}' + note_always_premod_user: 'Pre-moderar a un usuario pondrá todos sus comentarios en la fila de Pre-Moderación.' + yes_always_premod_user: 'Sí, pre-moderar al usuario.' bandialog: are_you_sure: '¿Estás seguro que quieres suspender a {0}?' ban_user: '¿Quieres suspender al Usuario?' @@ -62,6 +69,7 @@ es: admin: Administrator ads_marketing: 'Esto parece ser un publicidad/acción de comercialización' all: 'Todos' + always_premod: 'Pre-moderado' are_you_sure: '¿Estás seguro que quieres suspender a {0}?' ban_user: '¿Quieres suspender al Usuario?' banned: Suspendido @@ -355,6 +363,7 @@ es: actions: Acciones all: todos all_streams: 'Todos los Hilos' + always_premod_user_actions: 'Siempre Pre-moderar Usuario' approve: Aprobar approved: Aprobado ban_user: Bloquear @@ -486,12 +495,15 @@ es: username_flags: 'reportes para este nombre de usuario' user_detail: all: Todos + always_premod: 'Siempre pre-moderar usuario' + always_premoded: 'Siempre pre-moderado' ban: 'Bloquear usuario' banned: Baneado email: 'Correo electrónico' member_since: 'Miembro desde' reject_rate: 'Promedio de rechazo' rejected: Rechazado + remove_always_premod: 'Cancelar siempre pre-moderar' remove_ban: 'Cancelar bloqueo' remove_suspension: 'Cancelar suspensión' suspend: 'Suspender usuario' @@ -503,12 +515,14 @@ es: username_rejected: 'Usuario rechazado' user_history: action: Acción + always_premod_removed: 'Siempre pre-moderar cancelado' ban_removed: 'Bloqueo cancelado' date: Fecha suspended: 'Suspendido, {0}' suspension_removed: 'Suspensión cancelada' system: Sistema taken_by: 'Está en uso' + user_always_premoded: 'Usuario siempre pre-moderado' user_banned: 'Usuario bloqueado' username_status: 'Nombre de usuario {0}' user_impersonating: 'Este usuario suplanta a alguien' diff --git a/models/schema/user.js b/models/schema/user.js index 40dcd5ec8..d4dca3a1c 100644 --- a/models/schema/user.js +++ b/models/schema/user.js @@ -180,6 +180,30 @@ const User = new Schema( }, ], }, + + // alwaysPremod stores the current user premod status as well as the history of + // changes. + alwaysPremod: { + // Status stores the current user premod status. + status: { + type: Boolean, + required: true, + default: false, + index: true, + }, + history: [ + { + // Status stores the historical premod status. + status: Boolean, + + // assigned_by stores the user id of the user who assigned this status. + assigned_by: { type: String, default: null }, + + // created_at stores the date when this status was assigned. + created_at: { type: Date, default: Date.now }, + }, + ], + }, }, // IgnoresUsers is an array of user id's that the current user is ignoring. @@ -359,6 +383,27 @@ User.virtual('banned') }); }); +/** + * alwaysPremod returns true when the user is currently in always premod, and sets the alwaysPremod + * status locally. + */ +User.virtual('alwaysPremod') + .get(function() { + return this.status.alwaysPremod.status; + }) + .set(function(status) { + this.status.alwaysPremod.status = status; + + if (!this.status.alwaysPremod.history) { + this.status.alwaysPremod.history = []; + } + + this.status.alwaysPremod.history.push({ + status, + created_at: new Date(), + }); + }); + /** * suspended returns true when the user is currently suspended, and sets the * suspension status locally. diff --git a/perms/constants/mutation.js b/perms/constants/mutation.js index 2d4ae04cb..54b92e00b 100644 --- a/perms/constants/mutation.js +++ b/perms/constants/mutation.js @@ -7,6 +7,7 @@ module.exports = { EDIT_COMMENT: 'EDIT_COMMENT', SET_USER_USERNAME_STATUS: 'SET_USER_USERNAME_STATUS', SET_USER_BAN_STATUS: 'SET_USER_BAN_STATUS', + SET_USER_ALWAYS_PREMOD_STATUS: 'SET_USER_ALWAYS_PREMOD_STATUS', SET_USER_SUSPENSION_STATUS: 'SET_USER_SUSPENSION_STATUS', SET_COMMENT_STATUS: 'SET_COMMENT_STATUS', ADD_COMMENT_TAG: 'ADD_COMMENT_TAG', diff --git a/perms/reducers/mutation.js b/perms/reducers/mutation.js index 8133fcd47..93cb0ab24 100644 --- a/perms/reducers/mutation.js +++ b/perms/reducers/mutation.js @@ -47,6 +47,7 @@ module.exports = (user, perm) => { case types.SET_USER_USERNAME_STATUS: case types.SET_USER_BAN_STATUS: case types.SET_USER_SUSPENSION_STATUS: + case types.SET_USER_ALWAYS_PREMOD_STATUS: case types.UPDATE_ASSET_SETTINGS: case types.UPDATE_ASSET_STATUS: return check(user, ['ADMIN', 'MODERATOR']); diff --git a/services/moderation/phases/premod.js b/services/moderation/phases/premod.js index db1a3fd1b..36aba634e 100644 --- a/services/moderation/phases/premod.js +++ b/services/moderation/phases/premod.js @@ -9,9 +9,9 @@ module.exports = ( }, } ) => { - // If the settings say that we're in premod mode, then the comment is in - // premod status. - if (moderation === 'PRE') { + // If the settings say that we're in premod mode, or the user is flagged as + // always premod, then the comment is in premod status. + if (moderation === 'PRE' || ctx.user.status.alwaysPremod.status === true) { return { status: 'PREMOD', }; diff --git a/services/users.js b/services/users.js index 2ce0b7c15..e85ed67a2 100644 --- a/services/users.js +++ b/services/users.js @@ -207,6 +207,50 @@ class Users { return user; } + static async setAlwaysPremodStatus(id, status, assignedBy = null) { + let user = await User.findOneAndUpdate( + { + id, + 'status.alwaysPremod.status': { + $ne: status, + }, + }, + { + $set: { + 'status.alwaysPremod.status': status, + }, + $push: { + 'status.alwaysPremod.history': { + status, + assigned_by: assignedBy, + created_at: Date.now(), + }, + }, + }, + { + new: true, + runValidators: true, + } + ); + + if (!user) { + user = await User.findOne({ id }); + if (!user) { + throw new ErrNotFound(); + } + + if (user.status.alwaysPremod.status === status) { + return user; + } + + throw new Error( + 'always premod status change edit failed for an unknown reason' + ); + } + + return user; + } + static async setBanStatus(id, status, assignedBy = null, message) { let user = await User.findOneAndUpdate( { From 2998db46add8c71e706022e0b8d0b657274cb9f0 Mon Sep 17 00:00:00 2001 From: Lautaro Mazzitelli Date: Fri, 22 Feb 2019 16:21:02 -0300 Subject: [PATCH 112/116] fix: three different typos were fixed on spanish translation file. --- locales/es.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locales/es.yml b/locales/es.yml index 57a789510..c35b60f86 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -66,7 +66,7 @@ es: community: account_creation_date: 'Fecha de creación de la cuenta' active: Activa - admin: Administrator + admin: Administrador ads_marketing: 'Esto parece ser un publicidad/acción de comercialización' all: 'Todos' always_premod: 'Pre-moderado' @@ -77,13 +77,13 @@ es: cancel: Cancelar commenter: Comentarista dont_like_username: 'No me gusta este nombre de usuario' - filter_users: 'Filtrarr usuarios' + filter_users: 'Filtrar usuarios' filter_role: Rol flaggedaccounts: 'Nombres de usuario reportados' flags: Reportes impersonating: Impersonando loading: 'Cargando resultados' - moderator: Moderator + moderator: Moderador newsroom_role: 'Rol en la redacción' no_flagged_accounts: 'No hay ningún nombre de usuario reportado en este momento.' no_results: 'No se encontraron usuarios con ese nombre o correo.' From 75f2f05534c4bdd255d17f89081c223a161e3788 Mon Sep 17 00:00:00 2001 From: Lautaro Mazzitelli Date: Fri, 22 Feb 2019 17:21:56 -0300 Subject: [PATCH 113/116] fix: Suspended vs. Banned. Fixed in spanish translations. --- locales/es.yml | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/locales/es.yml b/locales/es.yml index c35b60f86..492607f98 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -11,25 +11,25 @@ es: note_always_premod_user: 'Pre-moderar a un usuario pondrá todos sus comentarios en la fila de Pre-Moderación.' yes_always_premod_user: 'Sí, pre-moderar al usuario.' bandialog: - are_you_sure: '¿Estás seguro que quieres suspender a {0}?' - ban_user: '¿Quieres suspender al Usuario?' - banned_user: 'Usuario Suspendido' + are_you_sure: '¿Estás seguro que quieres prohibir a {0}?' + ban_user: '¿Quieres prohibir al Usuario?' + banned_user: 'Usuario prohibido' cancel: Cancelar - email_message_ban: "Estimado/a {0},\n\nUsted o alguien con acceso a su cuenta ha violado los lineamientos de nuestra comunidad. Como consecuencia de esto, su cuenta fue bloqueada. No podrá realizar ni reportar más comentarios. Si usted piensa que esto ha sido un error, por favor contáctese con nosotros." + email_message_ban: "Estimado/a {0},\n\nUsted o alguien con acceso a su cuenta ha violado los lineamientos de nuestra comunidad. Como consecuencia de esto, su cuenta fue prohibida. No podrá realizar ni reportar más comentarios. Si usted piensa que esto ha sido un error, por favor contáctese con nosotros." note: 'Nota: {0}' - note_ban_user: 'Suspender a este usuario no le va a permitir (al usuario) borrar ni editar ni comentar.' - note_reject_comment: 'Suspender a este usuario también va a colocar este comentario en la cola de Rechazados.' - notify_ban_description: 'Esto notificará al usuario por correo electrónico que fueron suspendidos de la comunidad' - notify_ban_headline: 'Notificar al usuario de la suspensión' + note_ban_user: 'Prohibir a este usuario no le va a permitir (al usuario) borrar ni editar ni comentar.' + note_reject_comment: 'Prohibir a este usuario también va a colocar este comentario en la cola de Rechazados.' + notify_ban_description: 'Esto notificará al usuario por correo electrónico que fue prohibido de la comunidad' + notify_ban_headline: 'Notificar al usuario de la prohibición' send: Enviar write_a_message: 'Escribe un mensaje' - yes_ban_user: 'Si, suspender al usuario' + yes_ban_user: 'Si, prohibir al usuario' bio_offensive: 'Esta biografia es ofensiva' cancel: Cancelar characters_remaining: 'caracteres restantes' comment: anon: Anónimo - ban_user: 'Usuario Suspendido' + ban_user: 'Usuario prohibido' comment: 'Publicar un comentario' edited: Editado flagged: Reportado @@ -71,9 +71,9 @@ es: all: 'Todos' always_premod: 'Pre-moderado' are_you_sure: '¿Estás seguro que quieres suspender a {0}?' - ban_user: '¿Quieres suspender al Usuario?' - banned: Suspendido - banned_user: 'Usuario suspendido' + ban_user: '¿Quieres prohibir al Usuario?' + banned: 'Prohibido' + banned_user: 'Usuario prohibido' cancel: Cancelar commenter: Comentarista dont_like_username: 'No me gusta este nombre de usuario' @@ -97,7 +97,7 @@ es: status: Estado suspended: Suspendido username_and_email: 'Usuario y Correo' - yes_ban_user: 'Sí, suspendan el usuario' + yes_ban_user: 'Sí, prohiban el usuario' configure: access_message: 'Usted debe ser un administrador para acceder a esta página. Encuentre a otro administrador y actualice los permisos de su cuenta!' apply: Aplicar @@ -208,8 +208,8 @@ es: seconds_plural: segundos email: banned: - body: 'De acuerdo con las guías de comunidad de The Coral Project, su cuenta a sido bloqueada. No podrá hacer comentarios, reportar o entrar en contacto con nuestra comunidad.' - subject: 'Su cuenta ha sido bloqueada' + body: 'De acuerdo con las guías de comunidad de The Coral Project, su cuenta a sido prohibida. No podrá hacer comentarios, reportar o entrar en contacto con nuestra comunidad.' + subject: 'Su cuenta ha sido prohibida' confirm: confirm_email: 'Confirmar Correo' has_been_requested: 'Un correo de confirmación ha sido pedido para la siguiente cuenta:' @@ -291,7 +291,7 @@ es: username_spam: 'Contiene spam' framework: banned_account_body: 'Esto significa que no puedes gustar, marcar o escribir comentarios.' - banned_account_header: 'Tu cuenta se encuentra suspendida.' + banned_account_header: 'Tu cuenta se encuentra prohibida.' changed_name: msg: 'El cambio en su nombre de usuario está siendo revisado por nuestro equipo de moderación.' comment: comentario @@ -366,7 +366,7 @@ es: always_premod_user_actions: 'Siempre Pre-moderar Usuario' approve: Aprobar approved: Aprobado - ban_user: Bloquear + ban_user: Prohibir billion: B close: Cerrar empty_queue: '¡No hay más comentarios para moderar! Tiempo para un ☕️' @@ -497,14 +497,14 @@ es: all: Todos always_premod: 'Siempre pre-moderar usuario' always_premoded: 'Siempre pre-moderado' - ban: 'Bloquear usuario' - banned: Baneado + ban: 'Prohibir usuario' + banned: Prohibido email: 'Correo electrónico' member_since: 'Miembro desde' reject_rate: 'Promedio de rechazo' rejected: Rechazado remove_always_premod: 'Cancelar siempre pre-moderar' - remove_ban: 'Cancelar bloqueo' + remove_ban: 'Cancelar prohibición' remove_suspension: 'Cancelar suspensión' suspend: 'Suspender usuario' suspended: Suspendido @@ -516,14 +516,14 @@ es: user_history: action: Acción always_premod_removed: 'Siempre pre-moderar cancelado' - ban_removed: 'Bloqueo cancelado' + ban_removed: 'Prohibición cancelada' date: Fecha suspended: 'Suspendido, {0}' suspension_removed: 'Suspensión cancelada' system: Sistema taken_by: 'Está en uso' user_always_premoded: 'Usuario siempre pre-moderado' - user_banned: 'Usuario bloqueado' + user_banned: 'Usuario prohibido' username_status: 'Nombre de usuario {0}' user_impersonating: 'Este usuario suplanta a alguien' user_no_comment: 'No has dejado aún ningún comentario. ¡Únete a la conversación!' @@ -537,6 +537,6 @@ es: verify_password: 'La contraseña debe tener por lo menos 8 caracteres' verify_username: 'Los nombres pueden contener letras números y _' view_conversation: 'Ver Conversación' - your_account_has_been_banned: 'Su cuenta ha sido suspendida.' - your_account_has_been_suspended: 'Su cuenta ha sido temporalmente suspendida.' + your_account_has_been_banned: 'Su cuenta ha sido prohibida.' + your_account_has_been_suspended: 'Su cuenta ha sido suspendida.' your_username_has_been_rejected: 'Su cuenta ha sido suspendida porque tu nombre de usuario ha sido considerado no apropiado para el espacio. Para recuperar la cuenta, por favor ingresar un nuevo nombre de usuario.' From 927a34a579a9c4b487c8a1152d656838bc108d90 Mon Sep 17 00:00:00 2001 From: Lautaro Mazzitelli Date: Fri, 22 Feb 2019 17:37:38 -0300 Subject: [PATCH 114/116] ci: quotation not needed --- locales/es.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/es.yml b/locales/es.yml index 492607f98..83a4632ec 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -72,7 +72,7 @@ es: always_premod: 'Pre-moderado' are_you_sure: '¿Estás seguro que quieres suspender a {0}?' ban_user: '¿Quieres prohibir al Usuario?' - banned: 'Prohibido' + banned: Prohibido banned_user: 'Usuario prohibido' cancel: Cancelar commenter: Comentarista From 14f13439303ff7f36e29191a3a339595e882cea8 Mon Sep 17 00:00:00 2001 From: David Burke Date: Tue, 26 Feb 2019 11:18:55 -0500 Subject: [PATCH 115/116] Additional Replies Increment (#2203) * added ADDTL_REPLIES_ON_LOAD_MORE variable * feat: added docs and onbuild ref --- Dockerfile.onbuild | 1 + client/coral-embed-stream/src/constants/stream.js | 3 +++ .../src/tabs/stream/containers/Stream.js | 5 ++++- docs/source/02-02-advanced-configuration.md | 10 ++++++++++ webpack.config.js | 1 + 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Dockerfile.onbuild b/Dockerfile.onbuild index ac88bd509..3b05ec90b 100644 --- a/Dockerfile.onbuild +++ b/Dockerfile.onbuild @@ -4,6 +4,7 @@ FROM coralproject/talk:latest ONBUILD ARG TALK_ADDTL_COMMENTS_ON_LOAD_MORE=10 ONBUILD ARG TALK_ASSET_COMMENTS_LOAD_DEPTH=10 ONBUILD ARG TALK_REPLY_COMMENTS_LOAD_DEPTH=3 +ONBUILD ARG TALK_ADDTL_REPLIES_ON_LOAD_MORE=999999 ONBUILD ARG TALK_THREADING_LEVEL=3 ONBUILD ARG TALK_DEFAULT_STREAM_TAB=all ONBUILD ARG TALK_DISABLE_EMBED_POLYFILL=FALSE diff --git a/client/coral-embed-stream/src/constants/stream.js b/client/coral-embed-stream/src/constants/stream.js index 64d4e64d3..3de1453cb 100644 --- a/client/coral-embed-stream/src/constants/stream.js +++ b/client/coral-embed-stream/src/constants/stream.js @@ -5,6 +5,9 @@ const prefix = 'TALK_EMBED_STREAM'; export const ADDTL_COMMENTS_ON_LOAD_MORE = parseInt( defaultTo(process.env.TALK_ADDTL_COMMENTS_ON_LOAD_MORE, '10') ); +export const ADDTL_REPLIES_ON_LOAD_MORE = parseInt( + defaultTo(process.env.TALK_ADDTL_REPLIES_ON_LOAD_MORE, '999999') +); export const ASSET_COMMENTS_LOAD_DEPTH = parseInt( defaultTo(process.env.TALK_ASSET_COMMENTS_LOAD_DEPTH, '10') ); diff --git a/client/coral-embed-stream/src/tabs/stream/containers/Stream.js b/client/coral-embed-stream/src/tabs/stream/containers/Stream.js index a379e6dbd..4390797f9 100644 --- a/client/coral-embed-stream/src/tabs/stream/containers/Stream.js +++ b/client/coral-embed-stream/src/tabs/stream/containers/Stream.js @@ -6,6 +6,7 @@ import { bindActionCreators } from 'redux'; import { ADDTL_COMMENTS_ON_LOAD_MORE, ASSET_COMMENTS_LOAD_DEPTH, + ADDTL_REPLIES_ON_LOAD_MORE, THREADING_LEVEL, } from '../../../constants/stream'; import { @@ -152,7 +153,9 @@ class StreamContainer extends React.Component { return this.props.data.fetchMore({ query: LOAD_MORE_QUERY, variables: { - limit: parent_id ? 999999 : ADDTL_COMMENTS_ON_LOAD_MORE, + limit: parent_id + ? ADDTL_REPLIES_ON_LOAD_MORE + : ADDTL_COMMENTS_ON_LOAD_MORE, cursor: comment.replies.endCursor, parent_id, asset_id: this.props.asset.id, diff --git a/docs/source/02-02-advanced-configuration.md b/docs/source/02-02-advanced-configuration.md index 1a60ac98b..0c70fad91 100644 --- a/docs/source/02-02-advanced-configuration.md +++ b/docs/source/02-02-advanced-configuration.md @@ -593,3 +593,13 @@ can be used to set an authorization header, or change the user agent. (Default ## TALK_SCRAPER_PROXY_URL Sets a specific HTTP/S proxy to be used by the Asset Scraper using [https-proxy-agent](https://www.npmjs.com/package/https-proxy-agent). (Default `null`) + +## TALK_ADDTL_REPLIES_ON_LOAD_MORE + +This is a **Build Variable** and must be consumed during build. If using the +[Docker-onbuild](/talk/installation-from-docker/#onbuild) +image you can specify it with `--build-arg TALK_ADDTL_REPLIES_ON_LOAD_MORE=3`. + +Specifies the number of replies to load for a comment when clicking "Load More". +It is defaulted quite high to sort of support "loading the rest of the replies". +(Default `999999`) diff --git a/webpack.config.js b/webpack.config.js index e23aa1e2a..322ad8317 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -169,6 +169,7 @@ const config = { TALK_THREADING_LEVEL: '3', TALK_ADDTL_COMMENTS_ON_LOAD_MORE: '10', TALK_ASSET_COMMENTS_LOAD_DEPTH: '10', + TALK_ADDTL_REPLIES_ON_LOAD_MORE: '999999', TALK_REPLY_COMMENTS_LOAD_DEPTH: '3', TALK_DEFAULT_STREAM_TAB: 'all', TALK_DEFAULT_LANG: 'en', From f0ead66f683585802e439b04ec8711c14909989c Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Tue, 26 Feb 2019 14:30:35 -0500 Subject: [PATCH 116/116] v4.8.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fce56b057..ee7b68e44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "talk", - "version": "4.7.0", + "version": "4.8.0", "description": "A better commenting experience from Mozilla, The New York Times, and the Washington Post. https://coralproject.net", "main": "app.js", "private": true,