From ccaf5413f25d882a454b499af7fb1d137b18835e Mon Sep 17 00:00:00 2001
From: Pitstopper <18574776+Pitstopper@users.noreply.github.com>
Date: Wed, 25 Jul 2018 16:14:12 +0300
Subject: [PATCH] [I18N] Russian translation (#381)

[I18N] Russian translation file
---
 app/i18n/index.js               |   3 +-
 app/i18n/locales/ru.js          | 320 ++++++++++++++++++++++++++++++++
 app/views/SettingsView/index.js |  17 +-
 3 files changed, 332 insertions(+), 8 deletions(-)
 create mode 100644 app/i18n/locales/ru.js

diff --git a/app/i18n/index.js b/app/i18n/index.js
index b130a36bd..30ce0ffc5 100644
--- a/app/i18n/index.js
+++ b/app/i18n/index.js
@@ -1,10 +1,11 @@
 import I18n from 'react-native-i18n';
 import en from './locales/en';
+import ru from './locales/ru';
 
 I18n.fallbacks = true;
 
 I18n.translations = {
-	en
+	en, ru
 };
 
 export default I18n;
diff --git a/app/i18n/locales/ru.js b/app/i18n/locales/ru.js
new file mode 100644
index 000000000..52183f0f0
--- /dev/null
+++ b/app/i18n/locales/ru.js
@@ -0,0 +1,320 @@
+export default {
+	'1_online_member': '1 участник онлайн',
+	'1_person_reacted': '1 человек отреагировал',
+	'error-action-not-allowed': '{{action}} не допускается',
+	'error-application-not-found': 'Приложение не найдено',
+	'error-archived-duplicate-name': 'Есть архивный канал с именем {{room_name}}',
+	'error-avatar-invalid-url': 'Недопустимый URL-адрес аватара: {{url}}',
+	'error-avatar-url-handling': 'Ошибка при обработке настроек аватара с URL-адреса ({{url}}) для {{username}}',
+	'error-cant-invite-for-direct-room': 'Невозможно пригласить пользователя в личную переписку',
+	'error-could-not-change-email': 'Не удалось изменить адрес электронной почты',
+	'error-could-not-change-name': 'Не удалось изменить имя',
+	'error-could-not-change-username': 'Не удалось изменить имя пользователя',
+	'error-delete-protected-role': 'Не удается удалить защищенную роль',
+	'error-department-not-found': 'Отдел не найден',
+	'error-direct-message-file-upload-not-allowed': 'Общий доступ к файлам не разрешен в личных сообщениях',
+	'error-duplicate-channel-name': 'Канал с именем {{channel_name}} существует',
+	'error-email-domain-blacklisted': 'Домен электронной почты включен в черный список',
+	'error-email-send-failed': 'Ошибка при попытке отправить электронное письмо: {{message}}',
+	'error-field-unavailable': '{{field}} уже используется :(',
+	'error-file-too-large': 'Файл слишком большой',
+	'error-importer-not-defined': 'Импортер не был определен правильно, ему не хватает класса Import.',
+	'error-input-is-not-a-valid-field': '{{input}} недействительно {{field}}',
+	'error-invalid-actionlink': 'Недействительная ссылка действия',
+	'error-invalid-arguments': 'Недопустимые аргументы',
+	'error-invalid-asset': 'Недопустимый актив',
+	'error-invalid-channel': 'Недействительный канал.',
+	'error-invalid-channel-start-with-chars': 'Недействительный канал. Начните с @ или #',
+	'error-invalid-custom-field': 'Неверное настраиваемое поле',
+	'error-invalid-custom-field-name': 'Неверное имя настраиваемого поля. Используйте только буквы, цифры, дефисы и символы подчеркивания.',
+	'error-invalid-date': 'Указана недопустимая дата.',
+	'error-invalid-description': 'Недопустимое описание',
+	'error-invalid-domain': 'Недопустимый домен',
+	'error-invalid-email': 'Неверный адрес электронной почты {{emai}}',
+	'error-invalid-email-address': 'Неверный адрес электронной почты',
+	'error-invalid-file-height': 'Недопустимая высота файла',
+	'error-invalid-file-type': 'Неверный тип файла',
+	'error-invalid-file-width': 'Недопустимая ширина файла',
+	'error-invalid-from-address': 'Вы указали неверный адрес FROM.',
+	'error-invalid-integration': 'Недопустимая интеграция',
+	'error-invalid-message': 'Недопустимое сообщение',
+	'error-invalid-method': 'Недопустимый метод',
+	'error-invalid-name': 'Недопустимое имя',
+	'error-invalid-password': 'Неверный пароль',
+	'error-invalid-redirectUri': 'Недопустимый redirectUri',
+	'error-invalid-role': 'Недопустимая роль',
+	'error-invalid-room': 'Недопустимый канал',
+	'error-invalid-room-name': '{{room_name}} не является допустимым именем канала',
+	'error-invalid-room-type': '{{type}} не является допустимым типом канала.',
+	'error-invalid-settings': 'Недопустимые параметры',
+	'error-invalid-subscription': 'Недействительная подписка',
+	'error-invalid-token': 'Недопустимый токен',
+	'error-invalid-triggerWords': 'Недопустимые triggerWords',
+	'error-invalid-urls': 'Недопустимые URL-адреса',
+	'error-invalid-user': 'Недопустимый пользователь',
+	'error-invalid-username': 'Неверное имя пользователя',
+	'error-invalid-webhook-response': 'URL-адрес ответил статусом, отличным от 200',
+	'error-message-deleting-blocked': 'Удаление сообщений заблокировано',
+	'error-message-editing-blocked': 'Редактирование сообщений заблокировано',
+	'error-message-size-exceeded': 'Размер сообщения превышает Message_MaxAllowedSize',
+	'error-missing-unsubscribe-link': 'Вы должны указать ссылку [отписаться].',
+	'error-no-tokens-for-this-user': 'Для этого пользователя нет токенов',
+	'error-not-allowed': 'Не допускается',
+	'error-not-authorized': 'Не разрешено',
+	'error-push-disabled': 'Push отключен',
+	'error-remove-last-owner': 'Это последний владелец. Прежде чем удалить его, установите нового владельца.',
+	'error-role-in-use': 'Невозможно удалить роль, потому что она используется',
+	'error-role-name-required': 'Требуется имя роли',
+	'error-the-field-is-required': 'Требуется поле {{field}}.',
+	'error-too-many-requests': 'Ошибка, слишком много запросов. Пожалуйста, помедленнее. Вы должны подождать {{seconds}} секунд, прежде чем повторять попытку.',
+	'error-user-is-not-activated': 'Пользователь не активирован',
+	'error-user-has-no-roles': 'Пользователь не имеет ролей',
+	'error-user-limit-exceeded': 'Количество пользователей, которых вы пытаетесь пригласить на #channel_name, превышает лимит, установленный администратором',
+	'error-user-not-in-room': 'Пользователя нет на этом канале',
+	'error-user-registration-custom-field': 'error-user-registration-custom-field',
+	'error-user-registration-disabled': 'Регистрация пользователей отключена',
+	'error-user-registration-secret': 'Регистрация пользователей разрешена только через секретный URL',
+	'error-you-are-last-owner': 'Вы последний владелец. Пожалуйста, установите нового владельца, прежде чем покинуть комнату.',
+	Actions: 'Действия',
+	Add_Reaction: 'Добавить реакцию',
+	Add_Server: 'Добавить сервер',
+	Add_user: 'Добавить пользователя',
+	Alert: 'Оповещение',
+	alert: 'оповещение',
+	alerts: 'оповещения',
+	All_users_in_the_channel_can_write_new_messages: 'Все пользователи канала могут писать новые сообщения',
+	All: 'Все',
+	Allow_Reactions: 'Разрешить реакции',
+	and_more: 'и более',
+	and: 'и',
+	announcement: 'объявление',
+	Announcement: 'Объявление',
+	ARCHIVE: 'АРХИВ',
+	archive: 'архив',
+	are_typing: 'печатают',
+	Are_you_sure_question_mark: 'Вы уверены?',
+	Are_you_sure_you_want_to_leave_the_room: 'Вы действительно хотите покинуть канал {{room}}?',
+	Authenticating: 'Аутентификация',
+	Avatar_changed_successfully: 'Аватар успешно изменен!',
+	Avatar_Url: 'URL аватара',
+	Away: 'Отошел',
+	Block_user: 'Блокировать пользователя',
+	Broadcast_channel_Description: 'Только авторизованные пользователи могут писать новые сообщения, но другие пользователи смогут ответить',
+	Broadcast_Channel: 'Широковещательный канал',
+	Busy: 'Занят',
+	By_proceeding_you_are_agreeing: 'Продолжая, вы соглашаетесь с нашими',
+	Cancel_editing: 'Отменить редактирование',
+	Cancel_recording: 'Отменить запись',
+	Cancel: 'Отмена',
+	changing_avatar: 'изменение аватара',
+	Channel_Name: 'Название канала',
+	Chats: 'Чаты',
+	Close: 'Закрыть',
+	Close_emoji_selector: 'Закрыть селектор emoji',
+	Choose: 'Выбрать',
+	Choose_from_library: 'Выбрать из библиотеки',
+	Code: 'Код',
+	Colaborative: 'Совместный',
+	Connect: 'Соединение',
+	Connected_to: 'Подключен к',
+	Connecting: 'Соединение',
+	Copied_to_clipboard: 'Скопировано в буфер обмена!',
+	Copy_Message: 'Копировать сообщение',
+	Copy_Permalink: 'Копировать постоянную ссылку',
+	Create_account: 'Создать аккаунт',
+	Create_Channel: 'Создать канал',
+	Create: 'Создать',
+	Delete_Room_Warning: 'Удаление канала приведет к удалению всех сообщений, размещенных в нем. Это не может быть отменено.',
+	delete: 'удалить',
+	Delete: 'Удалить',
+	DELETE: 'УДАЛИТЬ',
+	description: 'описание',
+	Description: 'Описание',
+	Disable_notifications: 'Отключить уведомления',
+	Do_you_really_want_to_key_this_room_question_mark: 'Вы действительно хотите {{key}} этот канал?',
+	edit: 'редактировать',
+	Edit: 'Редактировать',
+	Email_or_password_field_is_empty: 'Поле электронной почты или пароля пусты',
+	Email: 'Электронная почта',
+	Enable_notifications: 'Включить уведомления',
+	Everyone_can_access_this_channel: 'Каждый может получить доступ к этому каналу',
+	Error_uploading: 'Ошибка при загрузке',
+	Files: 'Файлы',
+	Finish_recording: 'Завершить запись',
+	For_your_security_you_must_enter_your_current_password_to_continue: 'В целях вашей безопасности вы должны ввести свой текущий пароль для продолжения',
+	Forgot_my_password: 'Забыл свой пароль',
+	Forgot_password_If_this_email_is_registered: 'Если эта электронная почта зарегистрирована, мы отправим инструкции о том, как сбросить пароль. Если вы не получите письмо в ближайшее время, вернитесь и повторите попытку.',
+	Forgot_password: 'Забыли пароль',
+	Forgot_Password: 'Забыли Пароль',
+	Has_joined_the_channel: 'Присоединился к каналу',
+	Has_left_the_channel: 'Покинул канал',
+	I_have_an_account: 'У меня есть аккаунт',
+	Invisible: 'Невидимый',
+	is_a_valid_RocketChat_instance: 'является действительным сервером Rocket.Chat',
+	is_not_a_valid_RocketChat_instance: 'не является действительным сервером Rocket.Chat',
+	is_typing: 'печатает',
+	Just_invited_people_can_access_this_channel: 'Только приглашенные люди могут получить доступ к этому каналу',
+	Language: 'Язык',
+	last_message: 'последнее сообщение',
+	Leave_channel: 'Покинуть канал',
+	leave: 'покинуть',
+	Loading_messages_ellipsis: 'Загрузка сообщений ...',
+	Login: 'Вход',
+	Logout: 'Выйти',
+	Members: 'Пользователи',
+	Mentioned_Messages: 'Упомянутые сообщения',
+	mentioned: 'упомянутые',
+	Mentions: 'Упоминания',
+	Message_accessibility: 'Сообщение от {{user}} в {{time}}: {{message}}',
+	Message_actions: 'Действия с сообщением',
+	Message_pinned: 'Сообщение прикреплено',
+	Message_removed: 'Сообщение удалено',
+	Messages: 'Сообщения',
+	Microphone_Permission_Message: 'Rocket Chat нуждается в доступе к вашему микрофону, чтобы вы могли отправлять аудиосообщения.',
+	Microphone_Permission: 'Разрешение на использование микрофона',
+	Mute: 'Заглушить',
+	muted: 'Заглушен',
+	My_servers: 'Мои серверы',
+	N_online_members: '{{n}} пользователей онлайн',
+	N_person_reacted: '{{n}} людей отреагировало',
+	Name: 'Имя',
+	New_in_RocketChat_question_mark: 'Новичок в Rocket.Chat?',
+	New_Message: 'Новое Сообщение',
+	New_Password: 'Новый Пароль',
+	New_Server: 'Новый Сервер',
+	No_files: 'Нет файлов',
+	No_mentioned_messages: 'Нет упоминаний',
+	No_pinned_messages: 'Нет прикрепленных сообщений',
+	No_snippeted_messages: 'Нет сообщений со сниппетом',
+	No_starred_messages: 'Нет отмеченных сообщений',
+	No_announcement_provided: 'Нет объявлений.',
+	No_description_provided: 'Нет описания.',
+	No_topic_provided: 'Нет темы.',
+	No_Message: 'Нет сообщения',
+	No_Reactions: 'Нет реакций',
+	Not_logged: 'Не зарегистрирован',
+	Nothing_to_save: 'Нечего сохранять!',
+	Notify_active_in_this_room: 'Уведомить всех активных пользователей в этом чате',
+	Notify_all_in_this_room: 'Уведомить всех в этом чате',
+	Offline: 'Офлайн',
+	Online: 'Онлайн',
+	Only_authorized_users_can_write_new_messages: 'Только авторизованные пользователи могут писать новые сообщения',
+	Open_emoji_selector: 'Открыть селектор emoji',
+	Or_continue_using_social_accounts: 'Или продолжить, используя социальные учетные записи',
+	Password: 'Пароль',
+	Permalink_copied_to_clipboard: 'Постоянная ссылка скопирована в буфер обмена!',
+	Pin: 'Прикрепить сообщение',
+	Pinned_Messages: 'Прикрепленные сообщения',
+	pinned: 'прикреплено',
+	Pinned: 'Прикреплено',
+	Please_enter_your_password: 'Пожалуйста введите ваш пароль',
+	Preferences_saved: 'Настройки сохранены!',
+	Privacy_Policy: ' Политика Конфиденциальности',
+	Private_Channel: 'Приватный канал',
+	Private: 'Приватный',
+	Profile_saved_successfully: 'Профиль успешно сохранен!',
+	Profile: 'Профиль',
+	Public_Channel: 'Публичный канал',
+	Public: 'Публичный',
+	Quote: 'Цитата',
+	Reactions_are_disabled: 'Реакции отключены',
+	Reactions_are_enabled: 'Реакции активированы',
+	Reactions: 'Реакции',
+	Read_Only_Channel: 'Канал только для чтения',
+	Read_Only: 'Только для чтения',
+	Register: 'Зарегистрировать',
+	Repeat_Password: 'Повторите пароль',
+	Reply: 'Ответить',
+	Resend: 'Отправить повторно',
+	Reset_password: 'Сброс пароля',
+	RESET: 'СБРОС',
+	Roles: 'Роли',
+	Room_actions: 'Действия с каналом',
+	Room_changed_announcement: 'Объявление канала было изменено на: {{объявление}} пользователем {{userBy}}',
+	Room_changed_description: 'Описание комнаты было изменено на: {{объявление}} пользователем {{userBy}}',
+	Room_changed_privacy: 'Тип канала был изменен на: {{type}} пользователем {{userBy}}',
+	Room_changed_topic: 'Топик канала был изменен на: {{topic}} пользователем {{userBy}}',
+	Room_Files: 'Файлы',
+	Room_Info_Edit: 'Редактировать информацию о канале',
+	Room_Info: 'Информация о канале',
+	Room_Members: 'Пользователи',
+	Room_name_changed: 'Название канала было изменено на: {{name}} пользователем {{userBy}}',
+	SAVE: 'СОХРАНИТЬ',
+	Save_Changes: 'Сохранить изменения',
+	Save: 'Сохранить',
+	saving_preferences: 'сохранение персональных настроек',
+	saving_profile: 'сохранение профиля',
+	saving_settings: 'сохранение настроек',
+	Search_Messages: 'Поиск сообщений',
+	Search: 'Поиск',
+	Select_Avatar: 'Выбор аватара',
+	Select_Users: 'Выбор пользователей',
+	Send: 'Отправить',
+	Send_audio_message: 'Отправить аудиосообщение',
+	Send_message: 'Отправить сообщение',
+	Servers: 'Серверы',
+	Settings: 'Настройки',
+	Settings_succesfully_changed: 'Настройки успешно изменены!',
+	Share_Message: 'Поделиться сообщением',
+	Share: 'Поделиться',
+	Sign_in_your_server: 'Войдите на ваш сервер',
+	Sign_Up: 'Регистрация',
+	Snippet_Messages: 'Сообщения со сниппетом',
+	snippeted: 'сниппет добавлен',
+	Snippets: 'Сниппеты',
+	Some_field_is_invalid_or_empty: 'Некоторые поля недопустимы или пусты',
+	Star_room: 'Star room',
+	Star: 'Звезда',
+	Starred_Messages: 'Помеченные сообщения',
+	starred: 'отмечено',
+	Starred: 'Отмечено',
+	Start_of_conversation: 'Начало разговора',
+	Submit: 'Отправить',
+	Take_a_photo: 'Сфотографировать',
+	tap_to_change_status: 'нажмите для изменения статуса',
+	Tap_to_view_servers_list: 'Нажмите, чтобы просмотреть список серверов',
+	Terms_of_Service: ' Условия использования ',
+	There_was_an_error_while_action: 'Произошла ошибка в процессе {{action}}!',
+	This_room_is_blocked: 'Этот канал заблокирован',
+	This_room_is_read_only: 'Этот канал доступен только для чтения',
+	Timezone: 'Часовой пояс',
+	Toggle_Drawer: 'Toggle_Drawer',
+	topic: 'топик',
+	Topic: 'Топик',
+	Try_again: 'Попробуйте еще раз',
+	Type_the_channel_name_here: 'Введите название канала здесь',
+	unarchive: 'разархивировать',
+	UNARCHIVE: 'РАЗАРХИВИРОВАТЬ',
+	Unblock_user: 'Разблокировать пользователя',
+	Unmute: 'Отменить заглушивание',
+	unmuted: 'Заглушивание отменено',
+	Unpin: 'Открепить',
+	unread_messages: 'непрочитанные сообщения',
+	Unstar: 'Снять отметку',
+	Uploading: 'Выгрузка',
+	User_added_by: 'Пользователь {{userAdded}} добавлен по решению {{userBy}}',
+	User_has_been_key: 'Пользователь был {{key}}!',
+	User_is_no_longer_role_by_: '{{user}} больше не {{role}} по решению {{userBy}}',
+	User_muted_by: 'Пользователь {{userMuted}} заглушен по решению {{userBy}}',
+	User_removed_by: 'Пользователь {{userRemoved}} удален по решению {{userBy}}',
+	User_unmuted_by: 'Пользователь {{userUnmuted}} перестал быть заглушенным по решению {{userBy}}',
+	User_was_set_role_by_: '{{user}} был назначен {{role}} пользователем {{userBy}}',
+	Username_is_empty: 'Имя пользователя пусто',
+	Username: 'Имя пользователя',
+	Validating: 'Проверка',
+	Video_call: 'Видеозвонок',
+	Voice_call: 'Голосовой вызов',
+	Welcome: 'Добро пожаловать',
+	Welcome_title_pt_1: 'Приготовьтесь к взлету с',
+	Welcome_title_pt_2: 'передовой чат-платформой',
+	Yes_action_it: 'Да, {{action}} это!',
+	Yesterday: 'Вчера',
+	You_are_in_preview_mode: 'Вы находитесь в режиме предварительного просмотра',
+	You_are_offline: 'Вы не в сети',
+	You_can_search_using_RegExp_eg: 'Вы можете выполнить поиск с помощью регулярных выражений, например `/^text$/i`',
+	You_colon: 'Ð’Ñ‹: ',
+	you_were_mentioned: 'вы были упомянуты',
+	You_will_not_be_able_to_recover_this_message: 'Вы не сможете восстановить это сообщение!',
+	you: 'вы',
+	Your_server: 'Ваш сервер'
+};
diff --git a/app/views/SettingsView/index.js b/app/views/SettingsView/index.js
index 200506e47..f647c036f 100644
--- a/app/views/SettingsView/index.js
+++ b/app/views/SettingsView/index.js
@@ -19,7 +19,7 @@ import { setUser } from '../../actions/login';
 import { iconsMap } from '../../Icons';
 
 @connect(state => ({
-	language: state.login.user.language
+	userLanguage: state.login.user && state.login.user.language
 }), dispatch => ({
 	setUser: params => dispatch(setUser(params))
 }))
@@ -27,7 +27,7 @@ import { iconsMap } from '../../Icons';
 export default class SettingsView extends LoggedView {
 	static propTypes = {
 		navigator: PropTypes.object,
-		language: PropTypes.string,
+		userLanguage: PropTypes.string,
 		setUser: PropTypes.func
 	}
 
@@ -35,10 +35,13 @@ export default class SettingsView extends LoggedView {
 		super('SettingsView', props);
 		this.state = {
 			placeholder: {},
-			language: props.language ? props.language : 'en',
+			language: props.userLanguage ? props.userLanguage : 'en',
 			languages: [{
 				label: 'English',
 				value: 'en'
+			}, {
+				label: 'Russian',
+				value: 'ru'
 			}],
 			saving: false
 		};
@@ -75,7 +78,7 @@ export default class SettingsView extends LoggedView {
 
 	formIsChanged = () => {
 		const { language } = this.state;
-		return !(this.props.language === language);
+		return !(this.props.userLanguage === language);
 	}
 
 	submit = async() => {
@@ -84,7 +87,7 @@ export default class SettingsView extends LoggedView {
 		const {
 			language
 		} = this.state;
-		const { user } = this.props;
+		const { userLanguage } = this.props;
 
 		if (!this.formIsChanged()) {
 			return;
@@ -93,7 +96,7 @@ export default class SettingsView extends LoggedView {
 		const params = {};
 
 		// language
-		if (user.language !== language) {
+		if (userLanguage !== language) {
 			params.language = language;
 		}
 
@@ -142,7 +145,7 @@ export default class SettingsView extends LoggedView {
 								inputRef={(e) => { this.name = e; }}
 								label={I18n.t('Language')}
 								placeholder={I18n.t('Language')}
-								value={language}
+								value={languages.find(i => i.value === language).label}
 								testID='settings-view-language'
 							/>
 						</RNPickerSelect>
-- 
GitLab