Unverified Commit 38c960d8 authored by Ergashev Adizbek's avatar Ergashev Adizbek Committed by GitHub

Merge branch 'develop' into swipe-to-reply

parents 3b355afd 521f0a8b
......@@ -18,8 +18,8 @@ android {
applicationId "chat.rocket.android"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk
versionCode 2060
versionName "3.3.0"
versionCode 2061
versionName "3.4.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
......
......@@ -27,4 +27,5 @@ sealed class ScreenViewEvent(val screenName: String) {
object Preferences : ScreenViewEvent("PreferencesFragment")
object Profile : ScreenViewEvent("ProfileFragment")
object Settings : ScreenViewEvent("SettingsFragment")
object Directory : ScreenViewEvent("DirectoryFragment")
}
......@@ -4,7 +4,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.common.model.UserStatus
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
......
......@@ -24,7 +24,7 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.SITE_URL
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO
import chat.rocket.android.util.setupFabric
import chat.rocket.common.RocketChatException
......
package chat.rocket.android.authentication.infraestructure
package chat.rocket.android.authentication.infrastructure
import chat.rocket.android.authentication.domain.model.TokenModel
import chat.rocket.android.dagger.scope.PerActivity
......
package chat.rocket.android.authentication.infraestructure
package chat.rocket.android.authentication.infrastructure
import android.content.SharedPreferences
import androidx.core.content.edit
......
......@@ -16,7 +16,7 @@ import chat.rocket.android.server.domain.isLdapAuthenticationEnabled
import chat.rocket.android.server.domain.isPasswordResetEnabled
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.isEmail
......
......@@ -15,7 +15,7 @@ import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.serverLogoUrl
......
......@@ -25,18 +25,18 @@ interface LoginOptionsView : LoadingView, MessageView {
fun setupFacebookButtonListener(facebookOauthUrl: String, state: String)
/**
* Shows the "login by Github" view if it is enabled by the server settings.
* Shows the "login by GitHub" view if it is enabled by the server settings.
*
* REMARK: We must set up the Github button listener before enabling it
* REMARK: We must set up the GitHub button listener before enabling it
* [setupGithubButtonListener].
* @see [showAccountsView]
*/
fun enableLoginByGithub()
/**
* Setups the Github button.
* Setups the GitHub button.
*
* @param githubUrl The Github OAuth URL to authenticate with.
* @param githubUrl The GitHub OAuth URL to authenticate with.
* @param state A random string generated by the app, which you'll verify later
* (to protect against forgery attacks).
*/
......@@ -61,36 +61,36 @@ interface LoginOptionsView : LoadingView, MessageView {
fun setupGoogleButtonListener(googleUrl: String, state: String)
/**
* Shows the "login by Linkedin" view if it is enabled by the server settings.
* Shows the "login by LinkedIn" view if it is enabled by the server settings.
*
* REMARK: We must set up the Linkedin button listener before enabling it
* REMARK: We must set up the LinkedIn button listener before enabling it
* [setupLinkedinButtonListener].
* @see [showAccountsView]
*/
fun enableLoginByLinkedin()
/**
* Setups the Linkedin button.
* Setups the LinkedIn button.
*
* @param linkedinUrl The Linkedin OAuth URL to authenticate with.
* @param linkedinUrl The LinkedIn OAuth URL to authenticate with.
* @param state A random string generated by the app, which you'll verify later
* (to protect against forgery attacks).
*/
fun setupLinkedinButtonListener(linkedinUrl: String, state: String)
/**
* Shows the "login by Gitlab" view if it is enabled by the server settings.
* Shows the "login by GitLab" view if it is enabled by the server settings.
*
* REMARK: We must set up the Gitlab button listener before enabling it
* REMARK: We must set up the GitLab button listener before enabling it
* [setupGitlabButtonListener].
* @see [showAccountsView]
*/
fun enableLoginByGitlab()
/**
* Setups the Gitlab button.
* Setups the GitLab button.
*
* @param gitlabUrl The Gitlab OAuth URL to authenticate with.
* @param gitlabUrl The GitLab OAuth URL to authenticate with.
* @param state A random string generated by the app, which you'll verify later
* (to protect against forgery attacks).
*/
......@@ -99,7 +99,7 @@ interface LoginOptionsView : LoadingView, MessageView {
/**
* Shows the "login by WordPress" view if it is enabled by the server settings.
*
* REMARK: We must set up the Gitlab button listener before enabling it [setupWordpressButtonListener].
* REMARK: We must set up the GitLab button listener before enabling it [setupWordpressButtonListener].
*/
fun enableLoginByWordpress()
......
package chat.rocket.android.authentication.loginoptions.ui
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.app.Activity
import android.content.Intent
import android.graphics.PorterDuff
......@@ -7,10 +10,13 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.widget.Button
import android.widget.LinearLayout
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.view.isVisible
import androidx.core.view.marginTop
import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager
......@@ -28,6 +34,7 @@ import chat.rocket.android.webview.sso.ui.ssoWebViewIntent
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.app_bar.*
import kotlinx.android.synthetic.main.fragment_authentication_login_options.*
import timber.log.Timber
import javax.inject.Inject
private const val SERVER_NAME = "server_name"
......@@ -61,6 +68,8 @@ internal const val REQUEST_CODE_FOR_OAUTH = 1
internal const val REQUEST_CODE_FOR_CAS = 2
internal const val REQUEST_CODE_FOR_SAML = 3
private const val DEFAULT_ANIMATION_DURATION = 400L
fun newInstance(
serverName: String,
state: String? = null,
......@@ -238,7 +247,6 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
enableLoginByLinkedin()
}
if (gitlabOauthUrl != null && state != null) {
setupGitlabButtonListener(gitlabOauthUrl.toString(), state.toString())
enableLoginByGitlab()
......@@ -390,11 +398,11 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
var isAccountsCollapsed = true
button_expand_collapse_accounts.setOnClickListener {
isAccountsCollapsed = if (isAccountsCollapsed) {
button_expand_collapse_accounts.rotateBy(180F, 400)
button_expand_collapse_accounts.rotateBy(180F, DEFAULT_ANIMATION_DURATION)
expandAccountsView()
false
} else {
button_expand_collapse_accounts.rotateBy(180F, 400)
button_expand_collapse_accounts.rotateBy(180F, DEFAULT_ANIMATION_DURATION)
collapseAccountsView()
true
}
......@@ -532,17 +540,73 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
}
private fun expandAccountsView() {
(0..accounts_container.childCount)
val buttons = (0..accounts_container.childCount)
.mapNotNull { accounts_container.getChildAt(it) as? Button }
.filter { it.isClickable && !it.isVisible }
.forEach { it.isVisible = true }
val optionHeight = accounts_container.getChildAt(1).height +
accounts_container.getChildAt(1).marginTop
val collapsedHeight = accounts_container.height
val expandedHeight = collapsedHeight + optionHeight * buttons.size
with(ValueAnimator.ofInt(collapsedHeight, expandedHeight)) {
addUpdateListener {
val params = accounts_container.layoutParams
params.height = animatedValue as Int
accounts_container.layoutParams = params
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
buttons.forEach {
it.isVisible = true
val anim = AlphaAnimation(0.0f, 1.0f)
anim.duration = DEFAULT_ANIMATION_DURATION
it.startAnimation(anim)
}
}
})
setDuration(DEFAULT_ANIMATION_DURATION).start()
}
}
private fun collapseAccountsView() {
(0..accounts_container.childCount)
val buttons = (0..accounts_container.childCount)
.mapNotNull { accounts_container.getChildAt(it) as? Button }
.filter { it.isClickable && it.isVisible }
.drop(3)
.forEach { it.isVisible = false }
val optionHeight = accounts_container.getChildAt(1).height +
accounts_container.getChildAt(1).marginTop
val expandedHeight = accounts_container.height
val collapsedHeight = expandedHeight - optionHeight * buttons.size
with(ValueAnimator.ofInt(expandedHeight, collapsedHeight)) {
addUpdateListener {
val params = accounts_container.layoutParams
params.height = animatedValue as Int
accounts_container.layoutParams = params
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
buttons.forEach {
val anim = AlphaAnimation(1.0f, 0.0f)
anim.duration = DEFAULT_ANIMATION_DURATION
anim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {
Timber.d("Animation starts: $animation")
}
override fun onAnimationEnd(animation: Animation) {
it.isVisible = false
}
override fun onAnimationRepeat(animation: Animation) {
Timber.d("Animation repeats: $animation")
}
})
it.startAnimation(anim)
}
}
})
setDuration(DEFAULT_ANIMATION_DURATION).start()
}
}
}
......@@ -7,7 +7,7 @@ import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.domain.SaveConnectingServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.launchUI
import kotlinx.coroutines.Dispatchers
......
......@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.serverLogoUrl
......
......@@ -3,7 +3,7 @@ package chat.rocket.android.authentication.resetpassword.presentation
import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.domain.GetConnectingServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException
......
......@@ -8,7 +8,7 @@ import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.domain.SaveConnectingServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.isValidUrl
......
......@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.SaveCurrentServerInteractor
import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.privacyPolicyUrl
......
......@@ -14,7 +14,7 @@ import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.isEmail
......
......@@ -4,7 +4,7 @@ import chat.rocket.android.chatdetails.domain.ChatDetails
import chat.rocket.android.chatroom.presentation.ChatRoomNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException
......
......@@ -3,7 +3,7 @@ package chat.rocket.android.chatinformation.presentation
import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException
......
......@@ -33,8 +33,8 @@ import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.domain.uploadMaxFileSize
import chat.rocket.android.server.domain.uploadMimeTypeFilter
import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.state
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.state
import chat.rocket.android.util.extension.getByteArray
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
......
......@@ -4,9 +4,9 @@ import android.app.job.JobParameters
import android.app.job.JobService
import chat.rocket.android.db.DatabaseManagerFactory
import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.DatabaseMessageMapper
import chat.rocket.android.server.infraestructure.DatabaseMessagesRepository
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.DatabaseMessageMapper
import chat.rocket.android.server.infrastructure.DatabaseMessagesRepository
import chat.rocket.core.internal.rest.sendMessage
import chat.rocket.core.model.Message
import dagger.android.AndroidInjection
......
......@@ -10,7 +10,7 @@ import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.chatroom.presentation.ChatRoomNavigator
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extensions.addFragment
import chat.rocket.android.util.extensions.textContent
import dagger.android.AndroidInjection
......
......@@ -74,6 +74,7 @@ import chat.rocket.android.helper.AndroidPermissionsHelper.hasCameraPermission
import chat.rocket.android.helper.AndroidPermissionsHelper.hasWriteExternalStoragePermission
import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extension.createImageFile
import chat.rocket.android.util.extension.orFalse
import chat.rocket.android.util.extensions.circularRevealOrUnreveal
import chat.rocket.android.util.extensions.clearLightStatusBar
import chat.rocket.android.util.extensions.fadeIn
......@@ -150,14 +151,10 @@ private const val BUNDLE_CHAT_ROOM_MESSAGE = "chat_room_message"
class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiReactionListener,
ChatRoomAdapter.OnActionSelected, Drawable.Callback {
@Inject
lateinit var presenter: ChatRoomPresenter
@Inject
lateinit var parser: MessageParser
@Inject
lateinit var analyticsManager: AnalyticsManager
@Inject
lateinit var navigator: ChatRoomNavigator
@Inject lateinit var presenter: ChatRoomPresenter
@Inject lateinit var parser: MessageParser
@Inject lateinit var analyticsManager: AnalyticsManager
@Inject lateinit var navigator: ChatRoomNavigator
private lateinit var adapter: ChatRoomAdapter
internal lateinit var chatRoomId: String
private lateinit var chatRoomName: String
......@@ -470,6 +467,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
setupToolbar(roomUiModel.name.toString())
setupMessageComposer(roomUiModel)
isBroadcastChannel = roomUiModel.broadcast
isFavorite = roomUiModel.favorite.orFalse()
if (isBroadcastChannel && !roomUiModel.canModerate) {
disableMenu = true
activity?.invalidateOptionsMenu()
......@@ -606,45 +604,31 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
}
override fun showMessage(message: String) {
ui {
showToast(message)
}
ui { showToast(message) }
}
override fun showMessage(resId: Int) {
ui {
showToast(resId)
}
ui { showToast(resId) }
}
override fun showGenericErrorMessage() {
ui {
showMessage(getString(R.string.msg_generic_error))
}
ui { showMessage(getString(R.string.msg_generic_error)) }
}
override fun populatePeopleSuggestions(members: List<PeopleSuggestionUiModel>) {
ui {
suggestions_view.addItems("@", members)
}
ui { suggestions_view.addItems("@", members) }
}
override fun populateRoomSuggestions(chatRooms: List<ChatRoomSuggestionUiModel>) {
ui {
suggestions_view.addItems("#", chatRooms)
}
ui { suggestions_view.addItems("#", chatRooms) }
}
override fun populateCommandSuggestions(commands: List<CommandSuggestionUiModel>) {
ui {
suggestions_view.addItems("/", commands)
}
ui { suggestions_view.addItems("/", commands) }
}
override fun populateEmojiSuggestions(emojis: List<EmojiSuggestionUiModel>) {
ui {
suggestions_view.addItems(":", emojis)
}
ui { suggestions_view.addItems(":", emojis) }
}
override fun copyToClipboard(message: String) {
......
......@@ -30,7 +30,7 @@ import chat.rocket.android.server.domain.baseUrl
import chat.rocket.android.server.domain.messageReadReceiptEnabled
import chat.rocket.android.server.domain.messageReadReceiptStoreUsers
import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.isImage
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.ifNotNullNorEmpty
......
......@@ -167,7 +167,7 @@ class RoomUiModelMapper(
private fun roomType(type: String): String = with(context.resources) {
when (type) {
RoomType.CHANNEL -> getString(R.string.header_channel)
RoomType.CHANNEL -> getString(R.string.msg_channels)
RoomType.PRIVATE_GROUP -> getString(R.string.header_private_groups)
RoomType.DIRECT_MESSAGE -> getString(R.string.header_direct_messages)
RoomType.LIVECHAT -> getString(R.string.header_live_chats)
......
......@@ -15,9 +15,9 @@ import chat.rocket.android.server.domain.PermissionsInteractor
import chat.rocket.android.server.domain.PublicSettings
import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManager
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.core.RocketChatClient
import dagger.Module
import dagger.Provides
......
......@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.SortingAndGroupingInteractor
import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.domain.useSpecialCharsOnRoom
import chat.rocket.android.server.infraestructure.ConnectionManager
import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryDB
import chat.rocket.android.util.retryIO
......@@ -50,6 +50,8 @@ class ChatRoomsPresenter @Inject constructor(
fun toSettings() = navigator.toSettings()
fun toDirectory() = navigator.toDirectory()
fun getCurrentServerName() = view.setupToolbar(currentServer)
fun getSortingAndGroupingPreferences() {
......
......@@ -9,6 +9,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
......@@ -44,7 +45,6 @@ internal const val TAG_CHAT_ROOMS_FRAGMENT = "ChatRoomsFragment"
private const val BUNDLE_CHAT_ROOM_ID = "BUNDLE_CHAT_ROOM_ID"
fun newInstance(chatRoomId: String?): Fragment = ChatRoomsFragment().apply {
arguments = Bundle(1).apply {
putString(BUNDLE_CHAT_ROOM_ID, chatRoomId)
......@@ -103,6 +103,7 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
with((activity as AppCompatActivity)) {
with(toolbar) {
setSupportActionBar(this)
supportActionBar?.setDisplayShowTitleEnabled(false)
setNavigationOnClickListener { presenter.toSettings() }
}
}
......@@ -122,10 +123,10 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
if (isSortByName) {
text_sort_by.text =
getString(R.string.msg_sort_by, getString(R.string.msg_sort_by_name).toLowerCase())
getString(R.string.msg_sort_by_placeholder, getString(R.string.msg_sort_by_name).toLowerCase())
} else {
text_sort_by.text = getString(
R.string.msg_sort_by,
R.string.msg_sort_by_placeholder,
getString(R.string.msg_sort_by_activity).toLowerCase()
)
}
......@@ -149,12 +150,14 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
// We need to show all the menu items here by invalidating the options to recreate the entire menu.
activity?.invalidateOptionsMenu()
queryChatRoomsByName(null)
hideDirectoryView()
return true
}
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
// We need to hide the all the menu items here.
menu.findItem(R.id.action_new_channel).isVisible = false
showDirectoryView()
return true
}
})
......@@ -282,6 +285,8 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
chat.rocket.android.sortingandgrouping.ui.TAG
)
}
text_directory.setOnClickListener { presenter.toDirectory() }
}
fun sortChatRoomsList(
......@@ -305,7 +310,7 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
}
private fun changeSortByTitle(text: String) {
text_sort_by.text = getString(R.string.msg_sort_by, text.toLowerCase())
text_sort_by.text = getString(R.string.msg_sort_by_placeholder, text.toLowerCase())
}
private fun queryChatRoomsByName(name: String?): Boolean {
......@@ -324,4 +329,14 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
viewModel.setQuery(Query.ByActivity(isGroupByType))
}
}
private fun showDirectoryView() {
text_directory.isVisible = true
text_sort_by.isGone = true
}
private fun hideDirectoryView() {
text_directory.isGone = true
text_sort_by.isVisible = true
}
}
......@@ -9,7 +9,7 @@ import chat.rocket.android.chatrooms.adapter.LoadingItemHolder
import chat.rocket.android.chatrooms.adapter.RoomUiModelMapper
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
import chat.rocket.android.chatrooms.infrastructure.ChatRoomsRepository
import chat.rocket.android.server.infraestructure.ConnectionManager
import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.util.livedata.transform
import chat.rocket.android.util.livedata.wrap
import chat.rocket.android.util.retryIO
......
......@@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModelProvider
import chat.rocket.android.chatrooms.adapter.RoomUiModelMapper
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
import chat.rocket.android.chatrooms.infrastructure.ChatRoomsRepository
import chat.rocket.android.server.infraestructure.ConnectionManager
import chat.rocket.android.server.infrastructure.ConnectionManager
import javax.inject.Inject
class ChatRoomsViewModelFactory @Inject constructor(
......
package chat.rocket.android.core.behaviours
interface AppLanguageView {
/**
* Updates the app language
*
* @param language The app language to be updated.
* @param country Opcional. The country code to be updated.
*/
fun updateLanguage(language: String, country: String? = null)
}
\ No newline at end of file
......@@ -4,7 +4,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.members.uimodel.MemberUiModelMapper
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException
import chat.rocket.common.model.RoomType
......
......@@ -14,9 +14,15 @@ import dagger.android.support.AndroidSupportInjectionModule
import javax.inject.Singleton
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class,
AppModule::class, ActivityBuilder::class, ServiceBuilder::class, ReceiverBuilder::class,
AndroidWorkerInjectionModule::class])
@Component(
modules = [
AndroidSupportInjectionModule::class,
AppModule::class,
ActivityBuilder::class,
ServiceBuilder::class,
ReceiverBuilder::class,
AndroidWorkerInjectionModule::class]
)
interface AppComponent {
@Component.Builder
......
......@@ -19,6 +19,7 @@ import chat.rocket.android.chatroom.ui.ChatRoomActivity
import chat.rocket.android.chatrooms.di.ChatRoomsFragmentProvider
import chat.rocket.android.createchannel.di.CreateChannelProvider
import chat.rocket.android.dagger.scope.PerActivity
import chat.rocket.android.directory.di.DirectoryFragmentProvider
import chat.rocket.android.draw.main.di.DrawModule
import chat.rocket.android.draw.main.ui.DrawingActivity
import chat.rocket.android.favoritemessages.di.FavoriteMessagesFragmentProvider
......@@ -70,7 +71,8 @@ abstract class ActivityBuilder {
CreateChannelProvider::class,
ProfileFragmentProvider::class,
SettingsFragmentProvider::class,
AdminPanelWebViewFragmentProvider::class
AdminPanelWebViewFragmentProvider::class,
DirectoryFragmentProvider::class
]
)
abstract fun bindMainActivity(): MainActivity
......
......@@ -12,8 +12,8 @@ import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.analytics.AnswersAnalytics
import chat.rocket.android.analytics.GoogleAnalyticsForFirebase
import chat.rocket.android.authentication.infraestructure.SharedPreferencesMultiServerTokenRepository
import chat.rocket.android.authentication.infraestructure.SharedPreferencesTokenRepository
import chat.rocket.android.authentication.infrastructure.SharedPreferencesMultiServerTokenRepository
import chat.rocket.android.authentication.infrastructure.SharedPreferencesTokenRepository
import chat.rocket.android.chatroom.service.MessageService
import chat.rocket.android.dagger.qualifier.ForAuthentication
import chat.rocket.android.dagger.qualifier.ForMessages
......@@ -44,19 +44,21 @@ import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.SortingAndGroupingRepository
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.infraestructure.DatabaseMessageMapper
import chat.rocket.android.server.infraestructure.DatabaseMessagesRepository
import chat.rocket.android.server.infraestructure.JobSchedulerInteractorImpl
import chat.rocket.android.server.infraestructure.MemoryChatRoomsRepository
import chat.rocket.android.server.infraestructure.MemoryUsersRepository
import chat.rocket.android.server.infraestructure.SharedPreferencesAccountsRepository
import chat.rocket.android.server.infraestructure.SharedPreferencesPermissionsRepository
import chat.rocket.android.server.infraestructure.SharedPreferencesSettingsRepository
import chat.rocket.android.server.infraestructure.SharedPrefsAnalyticsTrackingRepository
import chat.rocket.android.server.infraestructure.SharedPrefsBasicAuthRepository
import chat.rocket.android.server.infraestructure.SharedPrefsConnectingServerRepository
import chat.rocket.android.server.infraestructure.SharedPrefsCurrentServerRepository
import chat.rocket.android.server.infraestructure.SharedPrefsSortingAndGroupingRepository
import chat.rocket.android.server.infrastructure.CurrentLanguageRepository
import chat.rocket.android.server.infrastructure.SharedPrefsCurrentLanguageRepository
import chat.rocket.android.server.infrastructure.DatabaseMessageMapper
import chat.rocket.android.server.infrastructure.DatabaseMessagesRepository
import chat.rocket.android.server.infrastructure.JobSchedulerInteractorImpl
import chat.rocket.android.server.infrastructure.MemoryChatRoomsRepository
import chat.rocket.android.server.infrastructure.MemoryUsersRepository
import chat.rocket.android.server.infrastructure.SharedPreferencesAccountsRepository
import chat.rocket.android.server.infrastructure.SharedPreferencesPermissionsRepository
import chat.rocket.android.server.infrastructure.SharedPreferencesSettingsRepository
import chat.rocket.android.server.infrastructure.SharedPrefsAnalyticsTrackingRepository
import chat.rocket.android.server.infrastructure.SharedPrefsBasicAuthRepository
import chat.rocket.android.server.infrastructure.SharedPrefsConnectingServerRepository
import chat.rocket.android.server.infrastructure.SharedPrefsCurrentServerRepository
import chat.rocket.android.server.infrastructure.SharedPrefsSortingAndGroupingRepository
import chat.rocket.android.util.AppJsonAdapterFactory
import chat.rocket.android.util.BasicAuthenticatorInterceptor
import chat.rocket.android.util.HttpLoggingInterceptor
......@@ -175,7 +177,6 @@ class AppModule {
fun provideSharedPreferences(context: Application) =
context.getSharedPreferences("rocket.chat", Context.MODE_PRIVATE)
@Provides
@ForMessages
fun provideMessagesSharedPreferences(context: Application) =
......@@ -211,6 +212,12 @@ class AppModule {
return SharedPrefsConnectingServerRepository(prefs)
}
@Provides
@Singleton
fun provideCurrentLanguageRepository(prefs: SharedPreferences): CurrentLanguageRepository {
return SharedPrefsCurrentLanguageRepository(prefs)
}
@Provides
@Singleton
fun provideSettingsRepository(localRepository: LocalRepository): SettingsRepository {
......
......@@ -6,7 +6,7 @@ import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.infrastructure.SharedPreferencesLocalRepository
import chat.rocket.android.server.domain.CurrentServerRepository
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.SharedPrefsCurrentServerRepository
import chat.rocket.android.server.infrastructure.SharedPrefsCurrentServerRepository
import chat.rocket.android.util.AppJsonAdapterFactory
import chat.rocket.android.util.TimberLogger
import chat.rocket.common.internal.FallbackSealedClassJsonAdapter
......
......@@ -69,7 +69,7 @@ abstract class ChatRoomDao : BaseDao<ChatRoomEntity> {
@Query("""
$BASE_QUERY
$FILTER_NOT_OPENED
ORDER BY name
ORDER BY name COLLATE NOCASE
""")
abstract fun getAllAlphabetically(): LiveData<List<ChatRoom>>
......@@ -79,7 +79,7 @@ abstract class ChatRoomDao : BaseDao<ChatRoomEntity> {
$FILTER_NOT_OPENED
ORDER BY
$TYPE_ORDER,
name
name COLLATE NOCASE
""")
abstract fun getAllAlphabeticallyGrouped(): LiveData<List<ChatRoom>>
......
package chat.rocket.android.directory.adapter
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.R
import chat.rocket.android.directory.uimodel.DirectoryUiModel
import chat.rocket.android.util.extensions.inflate
private const val VIEW_TYPE_CHANNELS = 0
private const val VIEW_TYPE_USERS = 1
private const val VIEW_TYPE_GLOBAL_USERS = 2
class DirectoryAdapter(private val selector: Selector) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var isSortByChannels: Boolean = true
private var isSearchForGlobalUsers: Boolean = true
private var dataSet: List<DirectoryUiModel> = ArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder =
when (viewType) {
VIEW_TYPE_CHANNELS -> DirectoryChannelViewHolder(
parent.inflate(R.layout.item_directory_channel)
)
VIEW_TYPE_USERS -> DirectoryUsersViewHolder(
parent.inflate(R.layout.item_directory_user)
)
VIEW_TYPE_GLOBAL_USERS -> DirectoryGlobalUsersViewHolder(
parent.inflate(R.layout.item_directory_user)
)
else -> throw IllegalStateException("viewType must be either VIEW_TYPE_CHANNELS, VIEW_TYPE_USERS or VIEW_TYPE_GLOBAL_USERS")
}
override fun getItemCount(): Int = dataSet.size
override fun getItemViewType(position: Int): Int {
return if (isSortByChannels) {
VIEW_TYPE_CHANNELS
} else {
if (isSearchForGlobalUsers) {
VIEW_TYPE_GLOBAL_USERS
} else {
VIEW_TYPE_USERS
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) =
when (holder) {
is DirectoryChannelViewHolder -> bindDirectoryChannelViewHolder(holder, position)
is DirectoryUsersViewHolder -> bindDirectoryUsersViewHolder(holder, position)
is DirectoryGlobalUsersViewHolder -> bindDirectoryGlobalUsersViewHolder(
holder,
position
)
else -> throw IllegalStateException("Unable to bind ViewHolder. ViewHolder must be either DirectoryChannelViewHolder, DirectoryUsersViewHolder or DirectoryGlobalUsersViewHolder")
}
private fun bindDirectoryChannelViewHolder(holder: DirectoryChannelViewHolder, position: Int) {
with(dataSet[position]) {
holder.bind(this)
holder.itemView.setOnClickListener { selector.onChannelSelected(id, name) }
}
}
private fun bindDirectoryUsersViewHolder(holder: DirectoryUsersViewHolder, position: Int) {
with(dataSet[position]) {
holder.bind(this)
holder.itemView.setOnClickListener { selector.onUserSelected(username, name) }
}
}
private fun bindDirectoryGlobalUsersViewHolder(
holder: DirectoryGlobalUsersViewHolder,
position: Int
) {
with(dataSet[position]) {
holder.bind(this)
holder.itemView.setOnClickListener { selector.onGlobalUserSelected(username, name) }
}
}
fun clearData() {
dataSet = emptyList()
notifyDataSetChanged()
}
fun setSorting(isSortByChannels: Boolean, isSearchForGlobalUsers: Boolean) {
this.isSortByChannels = isSortByChannels
this.isSearchForGlobalUsers = isSearchForGlobalUsers
}
fun prependData(dataSet: List<DirectoryUiModel>) {
this.dataSet = dataSet
notifyItemRangeInserted(0, dataSet.size)
}
fun appendData(dataSet: List<DirectoryUiModel>) {
val previousDataSetSize = this.dataSet.size
this.dataSet += dataSet
notifyItemRangeInserted(previousDataSetSize, dataSet.size)
}
}
interface Selector {
fun onChannelSelected(channelId: String, channelName: String)
fun onUserSelected(username: String, name: String)
fun onGlobalUserSelected(username: String, name: String)
}
\ No newline at end of file
package chat.rocket.android.directory.adapter
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.directory.uimodel.DirectoryUiModel
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_directory_channel.view.*
class DirectoryChannelViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(directoryChannelUiModel: DirectoryUiModel) = with(itemView) {
Glide.with(image_avatar).load(directoryChannelUiModel.channelAvatarUri).into(image_avatar)
text_channel_name.text = directoryChannelUiModel.name
text_channel_description.text = directoryChannelUiModel.description
text_channel_total_members.text = directoryChannelUiModel.totalMembers
}
}
\ No newline at end of file
package chat.rocket.android.directory.adapter
import android.view.View
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.directory.uimodel.DirectoryUiModel
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_directory_user.view.*
class DirectoryGlobalUsersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(directoryChannelUiModel: DirectoryUiModel) = with(itemView) {
Glide.with(image_avatar).load(directoryChannelUiModel.userAvatarUri).into(image_avatar)
text_user_name.text = directoryChannelUiModel.name
text_user_username.text = directoryChannelUiModel.username
with(text_server_url) {
text = directoryChannelUiModel.serverUrl
isVisible = true
}
}
}
\ No newline at end of file
package chat.rocket.android.directory.adapter
import android.view.View
import androidx.core.view.isGone
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.directory.uimodel.DirectoryUiModel
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_directory_user.view.*
class DirectoryUsersViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(directoryChannelUiModel: DirectoryUiModel) = with(itemView) {
Glide.with(image_avatar).load(directoryChannelUiModel.userAvatarUri).into(image_avatar)
text_user_name.text = directoryChannelUiModel.name
text_user_username.text = directoryChannelUiModel.username
text_server_url.isGone = true
}
}
\ No newline at end of file
package chat.rocket.android.directory.di
import chat.rocket.android.dagger.scope.PerFragment
import chat.rocket.android.directory.presentation.DirectoryView
import chat.rocket.android.directory.ui.DirectoryFragment
import dagger.Module
import dagger.Provides
@Module
class DirectoryFragmentModule {
@Provides
@PerFragment
fun directoryView(frag: DirectoryFragment): DirectoryView = frag
}
\ No newline at end of file
package chat.rocket.android.directory.di
import chat.rocket.android.dagger.scope.PerFragment
import chat.rocket.android.directory.ui.DirectoryFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
@Module
abstract class DirectoryFragmentProvider {
@ContributesAndroidInjector(modules = [DirectoryFragmentModule::class])
@PerFragment
abstract fun provideDirectoryFragment(): DirectoryFragment
}
\ No newline at end of file
package chat.rocket.android.directory.presentation
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.db.model.ChatRoomEntity
import chat.rocket.android.directory.uimodel.DirectoryUiModelMapper
import chat.rocket.android.helper.UserHelper
import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.model.RoomType
import chat.rocket.common.model.roomTypeOf
import chat.rocket.common.util.ifNull
import chat.rocket.core.RocketChatClient
import chat.rocket.core.internal.rest.DirectoryRequestType
import chat.rocket.core.internal.rest.DirectoryWorkspaceType
import chat.rocket.core.internal.rest.createDirectMessage
import chat.rocket.core.internal.rest.directory
import chat.rocket.core.internal.rest.getInfo
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Named
class DirectoryPresenter @Inject constructor(
private val view: DirectoryView,
private val navigator: MainNavigator,
private val strategy: CancelStrategy,
@Named("currentServer") private val currentServer: String,
private val dbManager: DatabaseManager,
private val userHelper: UserHelper,
val factory: RocketChatClientFactory,
private val mapper: DirectoryUiModelMapper
) {
private val client: RocketChatClient = factory.get(currentServer)
private var offset: Long = 0
fun loadAllDirectoryChannels(query: String? = null) {
launchUI(strategy) {
try {
view.showLoading()
val directoryResult = client.directory(
text = query,
directoryRequestType = DirectoryRequestType.Channels(),
offset = offset,
count = 60
)
val directoryUiModels = mapper.mapToUiModelList(directoryResult.result)
view.showChannels(directoryUiModels)
offset += 1 * 60L
} catch (exception: Exception) {
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
}
}
}
fun loadAllDirectoryUsers(isSearchForGlobalUsers: Boolean, query: String? = null) {
launchUI(strategy) {
try {
view.showLoading()
val directoryResult = client.directory(
text = query,
directoryRequestType = DirectoryRequestType.Users(),
directoryWorkspaceType = if (isSearchForGlobalUsers) {
DirectoryWorkspaceType.All()
} else {
DirectoryWorkspaceType.Local()
},
offset = offset,
count = 60
)
val directoryUiModels = mapper.mapToUiModelList(directoryResult.result)
view.showUsers(directoryUiModels)
offset += 1 * 60L
} catch (exception: Exception) {
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
}
}
}
fun updateSorting(
isSortByChannels: Boolean,
isSearchForGlobalUsers: Boolean,
query: String? = null
) {
resetOffset()
if (isSortByChannels) {
loadAllDirectoryChannels(query)
} else {
loadAllDirectoryUsers(isSearchForGlobalUsers, query)
}
}
fun toChannel(channelId: String, name: String) {
launchUI(strategy) {
try {
view.showLoading()
withContext(Dispatchers.Default) {
val chatRoom = client.getInfo(channelId, name, roomTypeOf(RoomType.CHANNEL))
navigator.toChatRoom(
chatRoomId = channelId,
chatRoomName = name,
chatRoomType = RoomType.CHANNEL,
isReadOnly = chatRoom.readonly,
chatRoomLastSeen = -1,
isSubscribed = false,
isCreator = false,
isFavorite = false
)
}
} catch (ex: Exception) {
Timber.e(ex)
ex.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
}
}
}
fun tiDirectMessage(username: String, name: String) {
launchUI(strategy) {
try {
view.showLoading()
withContext(Dispatchers.Default) {
val directMessage = client.createDirectMessage(username)
val chatRoomEntity = ChatRoomEntity(
id = directMessage.id,
name = username,
description = null,
type = RoomType.DIRECT_MESSAGE,
fullname = name,
subscriptionId = "",
updatedAt = directMessage.updatedAt
)
dbManager.insertOrReplaceRoom(chatRoomEntity)
FetchChatRoomsInteractor(client, dbManager).refreshChatRooms()
navigator.toChatRoom(
chatRoomId = chatRoomEntity.id,
chatRoomName = chatRoomEntity.name,
chatRoomType = chatRoomEntity.type,
isReadOnly = false,
chatRoomLastSeen = -1,
isSubscribed = chatRoomEntity.open,
isCreator = true,
isFavorite = false
)
}
} catch (ex: Exception) {
Timber.e(ex)
ex.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
}
}
}
private fun resetOffset() {
offset = 0
}
}
\ No newline at end of file
package chat.rocket.android.directory.presentation
import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView
import chat.rocket.android.directory.uimodel.DirectoryUiModel
interface DirectoryView : MessageView, LoadingView {
/**
* Shows the list of directory channels.
*
* @param dataSet The data set to show.
*/
fun showChannels(dataSet: List<DirectoryUiModel>)
/**
* Shows the list of directory users.
*
* @param dataSet The data set to show.
*/
fun showUsers(dataSet: List<DirectoryUiModel>)
}
\ No newline at end of file
package chat.rocket.android.directory.ui
import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.analytics.event.ScreenViewEvent
import chat.rocket.android.directory.adapter.DirectoryAdapter
import chat.rocket.android.directory.adapter.Selector
import chat.rocket.android.directory.presentation.DirectoryPresenter
import chat.rocket.android.directory.presentation.DirectoryView
import chat.rocket.android.directory.uimodel.DirectoryUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.util.extension.onQueryTextListener
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.isNotNullNorBlank
import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.app_bar.*
import kotlinx.android.synthetic.main.fragment_directory.*
import kotlinx.android.synthetic.main.fragment_settings.view_loading
import javax.inject.Inject
internal const val TAG_DIRECTORY_FRAGMENT = "DirectoryFragment"
fun newInstance(): Fragment = DirectoryFragment()
class DirectoryFragment : Fragment(), DirectoryView {
@Inject lateinit var analyticsManager: AnalyticsManager
@Inject lateinit var presenter: DirectoryPresenter
private var isSortByChannels: Boolean = true
private var isSearchForGlobalUsers: Boolean = false
private val linearLayoutManager = LinearLayoutManager(context)
private val directoryAdapter = DirectoryAdapter(object : Selector {
override fun onChannelSelected(channelId: String, channelName: String) {
presenter.toChannel(channelId, channelName)
}
override fun onUserSelected(username: String, name: String) {
presenter.tiDirectMessage(username, name)
}
override fun onGlobalUserSelected(username: String, name: String) {
presenter.tiDirectMessage(username, name)
}
})
private val hashtagDrawable by lazy {
DrawableHelper.getDrawableFromId(R.drawable.ic_hashtag_16dp, text_sort_by.context)
}
private val userDrawable by lazy {
DrawableHelper.getDrawableFromId(R.drawable.ic_user_16dp, text_sort_by.context)
}
private val arrowDownDrawable by lazy {
DrawableHelper.getDrawableFromId(R.drawable.ic_arrow_down, text_sort_by.context)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this)
setHasOptionsMenu(true)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = container?.inflate(R.layout.fragment_directory)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupToolbar()
setupRecyclerView()
setupListeners()
presenter.loadAllDirectoryChannels()
analyticsManager.logScreenView(ScreenViewEvent.Directory)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.directory, menu)
val searchMenuItem = menu.findItem(R.id.action_search)
val searchView = searchMenuItem?.actionView as SearchView
with(searchView) {
setIconifiedByDefault(false)
maxWidth = Integer.MAX_VALUE
onQueryTextListener { updateSorting(isSortByChannels, isSearchForGlobalUsers, it) }
}
searchMenuItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
updateSorting(isSortByChannels, isSearchForGlobalUsers, reload = true)
return true
}
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
return true
}
})
}
override fun showChannels(dataSet: List<DirectoryUiModel>) {
ui {
if (directoryAdapter.itemCount == 0) {
directoryAdapter.prependData(dataSet)
if (dataSet.size >= 60) {
recycler_view.addOnScrollListener(object :
EndlessRecyclerViewScrollListener(linearLayoutManager) {
override fun onLoadMore(
page: Int,
totalItemsCount: Int,
recyclerView: RecyclerView
) {
presenter.loadAllDirectoryChannels()
}
})
}
} else {
directoryAdapter.appendData(dataSet)
}
}
}
override fun showUsers(dataSet: List<DirectoryUiModel>) {
ui {
if (directoryAdapter.itemCount == 0) {
directoryAdapter.prependData(dataSet)
if (dataSet.size >= 60) {
recycler_view.addOnScrollListener(object :
EndlessRecyclerViewScrollListener(linearLayoutManager) {
override fun onLoadMore(
page: Int,
totalItemsCount: Int,
recyclerView: RecyclerView
) {
presenter.loadAllDirectoryUsers(isSearchForGlobalUsers)
}
})
}
} else {
directoryAdapter.appendData(dataSet)
}
}
}
override fun showMessage(resId: Int) {
ui { showToast(resId) }
}
override fun showMessage(message: String) {
ui { showToast(message) }
}
override fun showGenericErrorMessage() = showMessage(getString(R.string.msg_generic_error))
override fun showLoading() {
view_loading.isVisible = true
}
override fun hideLoading() {
view_loading.isVisible = false
}
fun updateSorting(
isSortByChannels: Boolean,
isSearchForGlobalUsers: Boolean,
query: String? = null,
reload: Boolean = false
) {
if (query.isNotNullNorBlank() || reload) {
directoryAdapter.clearData()
presenter.updateSorting(isSortByChannels, isSearchForGlobalUsers, query)
}
if (this.isSortByChannels != isSortByChannels ||
this.isSearchForGlobalUsers != isSearchForGlobalUsers
) {
this.isSortByChannels = isSortByChannels
this.isSearchForGlobalUsers = isSearchForGlobalUsers
updateSortByTitle()
with(directoryAdapter) {
clearData()
setSorting(isSortByChannels, isSearchForGlobalUsers)
}
presenter.updateSorting(isSortByChannels, isSearchForGlobalUsers, query)
}
}
private fun setupToolbar() {
with((activity as AppCompatActivity)) {
with(toolbar) {
setSupportActionBar(this)
title = getString(R.string.msg_directory)
setNavigationIcon(R.drawable.ic_arrow_back_white_24dp)
setNavigationOnClickListener { activity?.onBackPressed() }
}
}
}
private fun setupRecyclerView() {
ui {
with(recycler_view) {
layoutManager = linearLayoutManager
addItemDecoration(DividerItemDecoration(it, DividerItemDecoration.HORIZONTAL))
adapter = directoryAdapter
}
}
}
private fun setupListeners() {
text_sort_by.setOnClickListener {
activity?.supportFragmentManager?.let {
showDirectorySortingBottomSheetFragment(isSortByChannels, isSearchForGlobalUsers, it)
}
}
}
private fun updateSortByTitle() {
if (isSortByChannels) {
text_sort_by.text = getString(R.string.msg_channels)
DrawableHelper.compoundLeftAndRightDrawable(
text_sort_by,
hashtagDrawable,
arrowDownDrawable
)
} else {
text_sort_by.text = getString(R.string.msg_users)
DrawableHelper.compoundLeftAndRightDrawable(
text_sort_by,
userDrawable,
arrowDownDrawable
)
}
}
}
\ No newline at end of file
package chat.rocket.android.directory.ui
import DrawableHelper
import android.content.DialogInterface
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.FragmentManager
import chat.rocket.android.R
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.android.synthetic.main.bottom_seet_fragment_directory_sorting.*
fun showDirectorySortingBottomSheetFragment(
isSortByChannels: Boolean,
isSearchForGlobalUsers: Boolean,
supportFragmentManager: FragmentManager
) = DirectorySortingBottomSheetFragment().apply {
arguments = Bundle(2).apply {
putBoolean(BUNDLE_IS_SORT_BY_CHANNELS, isSortByChannels)
putBoolean(BUNDLE_IS_SEARCH_FOR_GLOBAL_USERS, isSearchForGlobalUsers)
}
}.show(supportFragmentManager, TAG)
internal const val TAG = "DirectorySortingBottomSheetFragment"
private const val BUNDLE_IS_SORT_BY_CHANNELS = "is_sort_by_channels"
private const val BUNDLE_IS_SEARCH_FOR_GLOBAL_USERS = "is_search_for_global_users"
class DirectorySortingBottomSheetFragment : BottomSheetDialogFragment() {
private var isSortByChannels = true
private var isSearchForGlobalUsers = false
private val hashtagDrawable by lazy {
DrawableHelper.getDrawableFromId(R.drawable.ic_hashtag_16dp, requireContext())
}
private val userDrawable by lazy {
DrawableHelper.getDrawableFromId(R.drawable.ic_user_16dp, requireContext())
}
private val checkDrawable by lazy {
DrawableHelper.getDrawableFromId(R.drawable.ic_check, requireContext())
}
private val directoryFragment by lazy {
activity?.supportFragmentManager?.findFragmentByTag(TAG_DIRECTORY_FRAGMENT) as DirectoryFragment
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.run {
isSortByChannels = getBoolean(BUNDLE_IS_SORT_BY_CHANNELS)
isSearchForGlobalUsers = getBoolean(BUNDLE_IS_SEARCH_FOR_GLOBAL_USERS)
}
?: requireNotNull(arguments) { "no arguments supplied when the bottom sheet fragment was instantiated" }
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? =
inflater.inflate(R.layout.bottom_seet_fragment_directory_sorting, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupView()
setupListeners()
}
override fun onCancel(dialog: DialogInterface?) {
super.onCancel(dialog)
directoryFragment.updateSorting(isSortByChannels, isSearchForGlobalUsers)
}
private fun setupView() {
if (isSortByChannels) {
checkSelection(text_channels, hashtagDrawable)
} else {
checkSelection(text_users, userDrawable)
}
switch_global_users.isChecked = isSearchForGlobalUsers
}
private fun setupListeners() {
text_channels.setOnClickListener {
checkSelection(text_channels, hashtagDrawable)
uncheckSelection(text_users, userDrawable)
isSortByChannels = true
}
text_users.setOnClickListener {
checkSelection(text_users, userDrawable)
uncheckSelection(text_channels, hashtagDrawable)
isSortByChannels = false
}
switch_global_users.setOnCheckedChangeListener { _, isChecked ->
isSearchForGlobalUsers = isChecked
}
}
private fun checkSelection(textView: TextView, leftDrawable: Drawable) {
context?.let {
DrawableHelper.compoundLeftAndRightDrawable(
textView,
leftDrawable,
checkDrawable
)
}
}
private fun uncheckSelection(textView: TextView, leftDrawable: Drawable) {
context?.let {
DrawableHelper.compoundLeftDrawable(
textView,
leftDrawable
)
}
}
}
\ No newline at end of file
package chat.rocket.android.directory.uimodel
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.core.model.DirectoryResult
class DirectoryUiModel(
private val directoryResult: DirectoryResult,
private val baseUrl: String?
) {
val id: String = directoryResult.id
val channelAvatarUri: String?
val userAvatarUri: String?
val name: String = directoryResult.name
val username: String = "@${directoryResult.username}"
val serverUrl: String = "" // TODO
val description: String = "" // TODO
val totalMembers: String = "" // TODO
init {
channelAvatarUri = getChannelAvatar()
userAvatarUri = getUserAvatar()
}
private fun getChannelAvatar(): String? {
return baseUrl?.avatarUrl(name, isGroupOrChannel = true)
}
private fun getUserAvatar(): String? {
return directoryResult.username?.let {
baseUrl?.avatarUrl(it)
}
}
}
package chat.rocket.android.directory.uimodel
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.baseUrl
import chat.rocket.core.model.DirectoryResult
import chat.rocket.core.model.Value
import javax.inject.Inject
import javax.inject.Named
class DirectoryUiModelMapper @Inject constructor(
getSettingsInteractor: GetSettingsInteractor,
@Named("currentServer") private val currentServer: String
) {
private var settings: Map<String, Value<Any>> = getSettingsInteractor.get(currentServer)
private val baseUrl = settings.baseUrl()
fun mapToUiModelList(directoryList: List<DirectoryResult>): List<DirectoryUiModel> {
return directoryList.map { DirectoryUiModel(it, baseUrl) }
}
}
\ No newline at end of file
......@@ -3,7 +3,7 @@ package chat.rocket.android.favoritemessages.presentation
import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf
......
......@@ -5,7 +5,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.files.uimodel.FileUiModel
import chat.rocket.android.files.uimodel.FileUiModelMapper
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf
......
......@@ -3,7 +3,7 @@ package chat.rocket.android.helper
object JitsiHelper {
/**
* Returns the for the Jitsi video conferencing URL.
* Returns the Jitsi video conferencing URL.
*
* @param isSecureProtocol True if using SSL, false otherwise - from the public settings.
* @param domain The Jitsi domain - from public settings.
......
......@@ -94,10 +94,16 @@ class MessageParser @Inject constructor(
}
private fun getMention(user: SimpleUser): String {
user.id?.let {
if (SYSTEM_MENTIONS.contains(it)) {
return "@$it"
}
}
return if (settings.useRealName()) {
user.name ?: "@${user.username}"
user.name ?: user.username.orEmpty()
} else {
"@${user.username}"
user.username.orEmpty()
}
}
......@@ -527,5 +533,7 @@ class MessageParser @Inject constructor(
*/
private val WEB_URL = Pattern.compile(
"($WEB_URL_WITH_PROTOCOL|$WEB_URL_WITHOUT_PROTOCOL)")
private val SYSTEM_MENTIONS = arrayOf("all", "here")
}
}
......@@ -15,11 +15,11 @@ object OauthHelper {
"\"isCordova\":true}").encodeToBase64()
/**
* Returns the Github Oauth URL.
* Returns the GitHub Oauth URL.
*
* @param clientId The GitHub client ID.
* @param state An unguessable random string used to protect against forgery attacks.
* @return The Github Oauth URL.
* @return The GitHub Oauth URL.
*/
fun getGithubOauthUrl(clientId: String, state: String): String {
return "https://github.com/login/oauth/authorize" +
......@@ -46,12 +46,12 @@ object OauthHelper {
}
/**
* Returns the Linkedin Oauth URL.
* Returns the LinkedIn Oauth URL.
*
* @param clientId The Linkedin client ID.
* @param clientId The LinkedIn client ID.
* @param serverUrl The server URL.
* @param state An unguessable random string used to protect against forgery attacks.
* @return The Linkedin Oauth URL.
* @return The LinkedIn Oauth URL.
*/
fun getLinkedinOauthUrl(clientId: String, serverUrl: String, state: String): String {
return "https://linkedin.com/oauth/v2/authorization" +
......@@ -62,13 +62,13 @@ object OauthHelper {
}
/**
* Returns the Gitlab Oauth URL.
* Returns the GitLab Oauth URL.
*
* @param host The Gitlab host.
* @param clientId The Gitlab client ID.
* @param host The GitLab host.
* @param clientId The GitLab client ID.
* @param serverUrl The server URL.
* @param state An unguessable random string used to protect against forgery attacks.
* @return The Gitlab Oauth URL.
* @return The GitLab Oauth URL.
*/
fun getGitlabOauthUrl(
host: String? = "https://gitlab.com",
......
package chat.rocket.android.main.di
import androidx.lifecycle.LifecycleOwner
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.dagger.scope.PerActivity
import chat.rocket.android.main.presentation.MainNavigator
......@@ -16,6 +17,12 @@ class MainModule {
@PerActivity
fun provideMainNavigator(activity: MainActivity) = MainNavigator(activity)
@Provides
@PerActivity
fun appLanguageView(activity: MainActivity): AppLanguageView {
return activity
}
@Provides
@PerActivity
fun provideJob() = Job()
......
......@@ -5,6 +5,7 @@ import chat.rocket.android.authentication.ui.newServerIntent
import chat.rocket.android.chatroom.ui.chatRoomIntent
import chat.rocket.android.chatrooms.ui.TAG_CHAT_ROOMS_FRAGMENT
import chat.rocket.android.createchannel.ui.TAG_CREATE_CHANNEL_FRAGMENT
import chat.rocket.android.directory.ui.TAG_DIRECTORY_FRAGMENT
import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.profile.ui.TAG_PROFILE_FRAGMENT
import chat.rocket.android.server.ui.changeServerIntent
......@@ -28,6 +29,12 @@ class MainNavigator(internal val activity: MainActivity) {
}
}
fun toDirectory() {
activity.addFragmentBackStack(TAG_DIRECTORY_FRAGMENT, R.id.fragment_container) {
chat.rocket.android.directory.ui.newInstance()
}
}
fun toCreateChannel() {
activity.addFragmentBackStack(TAG_CREATE_CHANNEL_FRAGMENT, R.id.fragment_container) {
chat.rocket.android.createchannel.ui.newInstance()
......
package chat.rocket.android.main.presentation
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.push.GroupedPush
import chat.rocket.android.server.domain.GetCurrentLanguageInteractor
import chat.rocket.android.server.domain.RefreshPermissionsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import javax.inject.Inject
import javax.inject.Named
class MainPresenter @Inject constructor(
@Named("currentServer") private val currentServerUrl: String,
private val mainNavigator: MainNavigator,
private val appLanguageView: AppLanguageView,
private val refreshSettingsInteractor: RefreshSettingsInteractor,
private val refreshPermissionsInteractor: RefreshPermissionsInteractor,
private val connectionManagerFactory: ConnectionManagerFactory,
private var getLanguageInteractor: GetCurrentLanguageInteractor,
private val groupedPush: GroupedPush
) {
......@@ -31,4 +35,13 @@ class MainPresenter @Inject constructor(
}
fun showChatList(chatRoomId: String? = null) = mainNavigator.toChatList(chatRoomId)
fun getAppLanguage() {
with(getLanguageInteractor) {
getLanguage()?.let { language ->
appLanguageView.updateLanguage(language, getCountry())
}
}
}
}
\ No newline at end of file
......@@ -3,10 +3,14 @@ package chat.rocket.android.main.ui
import android.app.Activity
import android.app.NotificationManager
import android.content.Context
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.os.LocaleList
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.main.presentation.MainPresenter
import chat.rocket.android.push.refreshPushToken
import chat.rocket.android.server.ui.INTENT_CHAT_ROOM_ID
......@@ -15,10 +19,11 @@ import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector
import dagger.android.HasActivityInjector
import dagger.android.support.HasSupportFragmentInjector
import java.util.*
import javax.inject.Inject
class MainActivity : AppCompatActivity(), HasActivityInjector,
HasSupportFragmentInjector {
HasSupportFragmentInjector, AppLanguageView {
@Inject
lateinit var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
@Inject
......@@ -30,11 +35,11 @@ class MainActivity : AppCompatActivity(), HasActivityInjector,
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
refreshPushToken()
with(presenter) {
connect()
getAppLanguage()
intent.getStringExtra(INTENT_CHAT_ROOM_ID).let {
clearNotificationsForChatRoom(it)
showChatList(it)
......@@ -53,6 +58,28 @@ class MainActivity : AppCompatActivity(), HasActivityInjector,
override fun supportFragmentInjector(): AndroidInjector<Fragment> =
fagmentDispatchingAndroidInjector
override fun updateLanguage(language: String, country: String?) {
val locale: Locale = if (country != null) {
Locale(language, country)
} else {
Locale(language)
}
Locale.setDefault(locale)
val config = Configuration()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.locales = LocaleList(locale)
} else {
config.locale = locale
}
// TODO We need to check out a better way to use createConfigurationContext
// instead of updateConfiguration here since it is deprecated.
resources.updateConfiguration(config, resources.displayMetrics)
}
private fun clearAppNotifications() =
(getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).cancelAll()
}
......@@ -15,10 +15,10 @@ class MembersAdapter(
) : RecyclerView.Adapter<MembersAdapter.ViewHolder>() {
private var dataSet: List<MemberUiModel> = ArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MembersAdapter.ViewHolder =
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
ViewHolder(parent.inflate(R.layout.item_member))
override fun onBindViewHolder(holder: MembersAdapter.ViewHolder, position: Int) =
override fun onBindViewHolder(holder: ViewHolder, position: Int) =
holder.bind(dataSet[position], listener)
override fun getItemCount(): Int = dataSet.size
......
......@@ -6,7 +6,7 @@ import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.helper.UserHelper
import chat.rocket.android.members.uimodel.MemberUiModel
import chat.rocket.android.members.uimodel.MemberUiModelMapper
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf
......
......@@ -102,15 +102,11 @@ class MembersFragment : Fragment(), MembersView {
}
override fun showMessage(resId: Int) {
ui {
showToast(resId)
}
ui { showToast(resId) }
}
override fun showMessage(message: String) {
ui {
showToast(message)
}
ui { showToast(message) }
}
override fun showGenericErrorMessage() = showMessage(getString(R.string.msg_generic_error))
......
......@@ -2,7 +2,7 @@ package chat.rocket.android.mentions.presentention
import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException
import chat.rocket.common.util.ifNull
......
......@@ -3,7 +3,7 @@ package chat.rocket.android.pinnedmessages.presentation
import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf
......
......@@ -11,8 +11,8 @@ import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.RemoveAccountInteractor
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.compressImageAndGetByteArray
import chat.rocket.android.util.extension.launchUI
......
......@@ -141,7 +141,7 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
}
override fun showProfileUpdateSuccessfullyMessage() {
showMessage(getString(R.string.msg_profile_update_successfully))
showMessage(getString(R.string.msg_profile_updated_successfully))
}
override fun invalidateToken(token: String) = invalidateFirebaseToken(token)
......@@ -267,8 +267,8 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
text_email.asObservable()
) { text_name, text_username, text_email ->
return@combineLatest (text_name.toString() != currentName ||
text_username.toString() != currentUsername ||
text_email.toString() != currentEmail)
text_username.toString() != currentUsername ||
text_email.toString() != currentEmail)
}.subscribe { isValid ->
activity?.invalidateOptionsMenu()
if (isValid) {
......
......@@ -7,7 +7,7 @@ import android.content.Intent
import androidx.core.app.RemoteInput
import android.widget.Toast
import chat.rocket.android.R
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.common.RocketChatException
import chat.rocket.core.internal.rest.sendMessage
import dagger.android.AndroidInjection
......
package chat.rocket.android.server.domain
import chat.rocket.android.server.infrastructure.CurrentLanguageRepository
import javax.inject.Inject
class GetCurrentLanguageInteractor @Inject constructor(
private val repository: CurrentLanguageRepository
) {
fun getLanguage(): String? = repository.getLanguage()
fun getCountry(): String? = repository.getCountry()
}
\ No newline at end of file
package chat.rocket.android.server.domain
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO
import chat.rocket.core.internal.rest.permissions
import kotlinx.coroutines.Dispatchers
......
package chat.rocket.android.server.domain
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO
import chat.rocket.core.internal.rest.settings
import kotlinx.coroutines.Dispatchers
......
package chat.rocket.android.server.domain
import chat.rocket.android.server.infrastructure.CurrentLanguageRepository
import javax.inject.Inject
class SaveCurrentLanguageInteractor @Inject constructor(
private val repository: CurrentLanguageRepository
) {
fun save(language: String, country: String?) = repository.save(language, country)
}
\ No newline at end of file
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import androidx.lifecycle.MutableLiveData
import chat.rocket.android.db.DatabaseManager
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.db.DatabaseManagerFactory
import timber.log.Timber
......
package chat.rocket.android.server.infrastructure
interface CurrentLanguageRepository {
fun save(language: String, country: String? = null)
fun getLanguage(): String?
fun getCountry(): String?
}
\ No newline at end of file
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.db.model.*
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.db.Operation
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.app.job.JobInfo
import android.app.job.JobScheduler
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.server.domain.ChatRoomsRepository
import chat.rocket.core.model.ChatRoom
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.domain.UsersRepository.Query
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.os.Build
import chat.rocket.android.BuildConfig
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
import androidx.core.content.edit
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.PermissionsRepository
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.infrastructure.LocalRepository.Companion.SETTINGS_KEY
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
import chat.rocket.android.server.domain.AnalyticsTrackingRepository
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
import androidx.core.content.edit
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
import chat.rocket.android.server.domain.CurrentServerRepository
......
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
private const val CURRENT_LANGUAGE = "current_language"
private const val CURRENT_LANGUAGE_COUNTRY = "current_language_country"
class SharedPrefsCurrentLanguageRepository(private val preferences: SharedPreferences) :
CurrentLanguageRepository {
override fun save(language: String, country: String?) {
with(preferences) {
edit().putString(CURRENT_LANGUAGE, language).apply()
edit().putString(CURRENT_LANGUAGE_COUNTRY, country).apply()
}
}
override fun getLanguage(): String? {
return preferences.getString(CURRENT_LANGUAGE, "")
}
override fun getCountry(): String? {
return preferences.getString(CURRENT_LANGUAGE_COUNTRY, "")
}
}
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
import chat.rocket.android.server.domain.CurrentServerRepository
......
package chat.rocket.android.server.infraestructure
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
import chat.rocket.android.server.domain.SortingAndGroupingRepository
......
......@@ -9,7 +9,7 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.SaveCurrentServerInteractor
import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.util.ifNull
import javax.inject.Inject
......
......@@ -26,9 +26,9 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.RemoveAccountInteractor
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.infraestructure.ConnectionManager
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.VersionInfo
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.casUrl
......@@ -452,7 +452,7 @@ abstract class CheckServerPresenter constructor(
/**
* Returns the OAuth client ID of a [serviceMap].
* REMARK: This function works for common OAuth providers (Google, Facebook, Github and so on)
* REMARK: This function works for common OAuth providers (Google, Facebook, GitHub and so on)
* as well as custom OAuth.
*
* @param serviceMap The service map to get the OAuth client ID.
......
......@@ -40,7 +40,6 @@ class ServersAdapter(
}
}
private fun bindServerViewHolder(holder: ServerViewHolder, position: Int) {
val account = servers[position]
holder.bind(account)
......
......@@ -4,7 +4,7 @@ import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.UserHelper
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException
......
......@@ -5,12 +5,14 @@ import chat.rocket.android.db.DatabaseManagerFactory
import chat.rocket.android.helper.UserHelper
import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.server.domain.GetCurrentLanguageInteractor
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.PermissionsInteractor
import chat.rocket.android.server.domain.RemoveAccountInteractor
import chat.rocket.android.server.domain.SaveCurrentLanguageInteractor
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.gethash
import chat.rocket.android.util.extension.launchUI
......@@ -41,7 +43,8 @@ class SettingsPresenter @Inject constructor(
getCurrentServerInteractor: GetCurrentServerInteractor,
removeAccountInteractor: RemoveAccountInteractor,
databaseManagerFactory: DatabaseManagerFactory,
connectionManagerFactory: ConnectionManagerFactory
connectionManagerFactory: ConnectionManagerFactory,
private val saveLanguageInteractor: SaveCurrentLanguageInteractor
) : CheckServerPresenter(
strategy = strategy,
factory = rocketChatClientFactory,
......@@ -123,6 +126,10 @@ class SettingsPresenter @Inject constructor(
}
}
fun saveLocale(language: String, country: String? = null) {
saveLanguageInteractor.save(language, country)
}
fun toProfile() = navigator.toProfile()
fun toAdmin() = tokenRepository.get(currentServer)?.let {
......
......@@ -17,6 +17,7 @@ import chat.rocket.android.BuildConfig
import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.analytics.event.ScreenViewEvent
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.helper.TextHelper.getDeviceAndAppInformation
import chat.rocket.android.settings.presentation.SettingsPresenter
import chat.rocket.android.settings.presentation.SettingsView
......@@ -33,7 +34,7 @@ internal const val TAG_SETTINGS_FRAGMENT = "SettingsFragment"
fun newInstance(): Fragment = SettingsFragment()
class SettingsFragment : Fragment(), SettingsView {
class SettingsFragment : Fragment(), SettingsView, AppLanguageView {
@Inject lateinit var analyticsManager: AnalyticsManager
@Inject lateinit var presenter: SettingsPresenter
......@@ -74,14 +75,14 @@ class SettingsFragment : Fragment(), SettingsView {
text_contact_us.setOnClickListener { contactSupport() }
text_language.setOnClickListener {}
text_language.setOnClickListener { changeLanguage() }
text_review_this_app.setOnClickListener { showAppOnStore() }
text_share_this_app.setOnClickListener { shareApp() }
text_license.setOnClickListener {
presenter.toLicense(getString(R.string.license_url), getString(R.string.title_licence))
presenter.toLicense(getString(R.string.license_url), getString(R.string.title_license))
}
text_app_version.text = getString(R.string.msg_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)
......@@ -109,6 +110,11 @@ class SettingsFragment : Fragment(), SettingsView {
}
}
override fun updateLanguage(language: String, country: String?) {
presenter.saveLocale(language, country)
activity?.recreate()
}
override fun invalidateToken(token: String) = invalidateFirebaseToken(token)
override fun showLoading() {
......@@ -155,6 +161,38 @@ class SettingsFragment : Fragment(), SettingsView {
}
}
private fun changeLanguage() {
context?.let {
AlertDialog.Builder(it)
.setTitle(R.string.title_choose_language)
.setSingleChoiceItems(
resources.getStringArray(R.array.languages), -1
) { dialog, option ->
when (option) {
0 -> updateLanguage("en")
1 -> updateLanguage("ar")
2 -> updateLanguage("de")
3 -> updateLanguage("es")
4 -> updateLanguage("fa")
5 -> updateLanguage("fr")
6 -> updateLanguage("hi", "IN")
7 -> updateLanguage("it")
8 -> updateLanguage("ja")
9 -> updateLanguage("pt", "BR")
10 -> updateLanguage("pt", "PT")
11 -> updateLanguage("ru", "RU")
12 -> updateLanguage("tr")
13 -> updateLanguage("uk")
14 -> updateLanguage("zh", "CN")
15 -> updateLanguage("zh", "TW")
}
dialog.dismiss()
}
.create()
.show()
}
}
private fun showAppOnStore() {
try {
startActivity(Intent(Intent.ACTION_VIEW, getString(R.string.market_link).toUri()))
......
......@@ -140,7 +140,7 @@ class SortingAndGroupingBottomSheetFragment : BottomSheetDialogFragment(), Sorti
}
private fun changeSortByTitle(text: String) {
text_sort_by.text = getString(R.string.msg_sort_by, text.toLowerCase())
text_sort_by.text = getString(R.string.msg_sort_by_placeholder, text.toLowerCase())
}
private fun checkSelection(textView: TextView, @DrawableRes leftDrawable: Int) {
......
......@@ -9,7 +9,7 @@ import chat.rocket.android.db.model.UserEntity
import chat.rocket.android.server.domain.CurrentServerRepository
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.isJitsiEnabled
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.retryIO
......
......@@ -2,7 +2,7 @@ package chat.rocket.android.util.extensions
import chat.rocket.android.db.model.MessageEntity
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO
import chat.rocket.core.internal.rest.registerPushToken
import chat.rocket.core.model.Message
......
......@@ -75,6 +75,8 @@ fun String.lowercaseUrl(): String? = HttpUrl.parse(this)?.run {
fun String?.isNotNullNorEmpty(): Boolean = this != null && this.isNotEmpty()
fun String?.isNotNullNorBlank(): Boolean = this != null && this.isNotBlank()
inline fun String?.ifNotNullNotEmpty(block: (String) -> Unit) {
if (this != null && this.isNotEmpty()) {
block(this)
......
......@@ -6,7 +6,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.JitsiHelper
import chat.rocket.android.helper.UserHelper
import chat.rocket.android.server.domain.*
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.model.RoomType
import chat.rocket.common.model.roomTypeOf
......
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="12dp"
android:height="7dp"
android:viewportWidth="12"
android:viewportHeight="7">
<path
android:fillColor="#EFEFEF"
android:fillType="nonZero"
android:pathData="M6,4.9512L10.4571,0.5122C10.7415,0.229 11.2013,0.229 11.4857,0.5122L11.4857,0.5122C11.7686,0.7939 11.7695,1.2516 11.4878,1.5345C11.4871,1.5352 11.4864,1.5359 11.4857,1.5366L6.7057,6.2972C6.3155,6.6858 5.6845,6.6858 5.2943,6.2972L0.5143,1.5366C0.2314,1.2549 0.2305,0.7972 0.5122,0.5143C0.5129,0.5136 0.5136,0.5129 0.5143,0.5122L0.5143,0.5122C0.7987,0.229 1.2585,0.229 1.5429,0.5122L3.5143,2.4756L6,4.9512Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="#E8F2FF"
android:fillType="evenOdd"
android:pathData="M4,0L44,0A4,4 0,0 1,48 4L48,44A4,4 0,0 1,44 48L4,48A4,4 0,0 1,0 44L0,4A4,4 0,0 1,4 0z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#1D74F5"
android:fillType="nonZero"
android:pathData="M20.4021,27.5L18.3698,27.5C19.0883,28.6535 20.1515,29.57 21.4153,30.1057C20.9935,29.3908 20.6468,28.5043 20.4021,27.5ZM20.126,26C20.0438,25.3608 20,24.6906 20,24C20,23.4873 20.0241,22.9859 20.0702,22.5L17.5419,22.5C17.4304,22.982 17.3714,23.4841 17.3714,24C17.3714,24.697 17.479,25.3689 17.6785,26L20.126,26ZM20.2908,21C20.5358,19.7892 20.9248,18.7257 21.4153,17.8943C19.9739,18.5052 18.7934,19.6117 18.0876,21L20.2908,21ZM27.7092,21L29.9124,21C29.2066,19.6117 28.0261,18.5052 26.5847,17.8943C27.0752,18.7257 27.4642,19.7892 27.7092,21ZM27.9298,22.5C27.9759,22.9859 28,23.4873 28,24C28,24.6906 27.9562,25.3608 27.874,26L30.3215,26C30.521,25.3689 30.6286,24.697 30.6286,24C30.6286,23.4841 30.5696,22.982 30.4581,22.5L27.9298,22.5ZM27.5979,27.5C27.3532,28.5043 27.0065,29.3908 26.5847,30.1057C27.8485,29.57 28.9117,28.6535 29.6302,27.5L27.5979,27.5ZM21.8745,27.5C22.3155,29.3609 23.1025,30.6 24,30.6C24.8975,30.6 25.6845,29.3609 26.1255,27.5L21.8745,27.5ZM21.6127,26L26.3873,26C26.4606,25.3841 26.5,24.7291 26.5,24.05C26.5,23.516 26.4756,22.9969 26.4296,22.5L21.5704,22.5C21.5244,22.9969 21.5,23.516 21.5,24.05C21.5,24.7291 21.5394,25.3841 21.6127,26ZM21.787,21L26.213,21C25.7943,18.9188 24.9604,17.5 24,17.5C23.0396,17.5 22.2057,18.9188 21.787,21ZM24,32C19.5822,32 16,28.4178 16,24C16,19.5813 19.5822,16 24,16C28.4187,16 32,19.5813 32,24C32,28.4178 28.4187,32 24,32Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M3.7143,10.5714L3.7143,5.4286L0.8571,5.4286C0.3838,5.4286 0,5.0448 0,4.5714L0,4.5714C0,4.098 0.3838,3.7143 0.8571,3.7143L3.7143,3.7143L3.7143,0.8571C3.7143,0.3838 4.098,0 4.5714,0L4.5714,0C5.0448,0 5.4286,0.3838 5.4286,0.8571L5.4286,3.7143L10.5714,3.7143L10.5714,0.8571C10.5714,0.3838 10.9552,0 11.4286,0L11.4286,0C11.902,0 12.2857,0.3838 12.2857,0.8571L12.2857,3.7143L15.1429,3.7143C15.6162,3.7143 16,4.098 16,4.5714L16,4.5714C16,5.0448 15.6162,5.4286 15.1429,5.4286L12.2857,5.4286L12.2857,10.5714L15.1429,10.5714C15.6162,10.5714 16,10.9552 16,11.4286L16,11.4286C16,11.902 15.6162,12.2857 15.1429,12.2857L12.2857,12.2857L12.2857,15.1429C12.2857,15.6162 11.902,16 11.4286,16L11.4286,16C10.9552,16 10.5714,15.6162 10.5714,15.1429L10.5714,12.2857L5.4286,12.2857L5.4286,15.1429C5.4286,15.6162 5.0448,16 4.5714,16L4.5714,16C4.098,16 3.7143,15.6162 3.7143,15.1429L3.7143,12.2857L0.8571,12.2857C0.3838,12.2857 0,11.902 0,11.4286L0,11.4286C0,10.9552 0.3838,10.5714 0.8571,10.5714L3.7143,10.5714ZM5.4286,10.5714L10.5714,10.5714L10.5714,5.4286L5.4286,5.4286L5.4286,10.5714Z"
android:strokeWidth="1"
android:fillColor="#CBCBCC"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="15dp"
android:height="16dp"
android:viewportWidth="15"
android:viewportHeight="16">
<path
android:fillColor="#CBCBCC"
android:fillType="nonZero"
android:pathData="M1.5248,13.3289C1.7124,13.3993 1.9453,13.471 2.2276,13.5407C3.3824,13.8259 5.0297,14 7.25,14C9.4703,14 11.1176,13.8259 12.2724,13.5407C12.5547,13.471 12.7876,13.3993 12.9752,13.3289C12.8483,12.2275 12.2304,11.6229 11.0233,11.1185C10.8562,11.0486 10.6821,10.9818 10.4514,10.8975C10.5051,10.9171 10.0041,10.7357 9.8749,10.6871C8.6886,10.2409 8.125,9.817 8.1271,8.9552C8.1257,8.9352 8.1257,8.9352 8.1232,8.8835C8.1089,8.5412 8.1341,8.1482 8.2352,7.7544C8.3357,7.3629 8.5018,7.0212 8.7796,6.7313C9.4429,6.0859 9.75,5.4186 9.75,4.4169C9.75,2.7871 8.6092,1.5 7.25,1.5C5.8908,1.5 4.75,2.7871 4.75,4.4169C4.75,5.4177 5.0499,6.0675 5.7166,6.7436C5.9791,7.0111 6.1513,7.3472 6.2566,7.7298C6.3671,8.1314 6.3941,8.5324 6.3773,8.8838C6.3741,8.9408 6.3741,8.9408 6.375,8.8986C6.375,9.817 5.8114,10.2409 4.6251,10.6871C4.4959,10.7357 3.9949,10.9171 4.0486,10.8975C3.8179,10.9818 3.6438,11.0486 3.4767,11.1185C2.2696,11.6229 1.6517,12.2275 1.5248,13.3289ZM0,13.7878C0,11.6909 1.029,10.5156 2.8983,9.7344C3.0901,9.6543 3.2836,9.58 3.5339,9.4886C3.4888,9.505 3.978,9.3279 4.0971,9.2831C4.7164,9.0502 4.875,8.9309 4.8778,8.834C4.8775,8.8383 4.8775,8.8383 4.879,8.8121C4.8889,8.6053 4.8718,8.351 4.8104,8.1279C4.7676,7.9725 4.7093,7.8588 4.6472,7.7955C3.7195,6.8547 3.25,5.8375 3.25,4.4169C3.25,1.9963 5.0194,0 7.25,0C9.4806,0 11.25,1.9963 11.25,4.4169C11.25,5.8419 10.7679,6.8896 9.8447,7.7872C9.7867,7.8479 9.7298,7.9649 9.6881,8.1274C9.6297,8.3548 9.6132,8.6125 9.6219,8.8209C9.6231,8.8456 9.6231,8.8456 9.625,8.8986C9.625,8.9309 9.7836,9.0502 10.4029,9.2831C10.522,9.3279 11.0112,9.505 10.9661,9.4886C11.2164,9.58 11.4099,9.6543 11.6017,9.7344C13.471,10.5156 14.5,11.6909 14.5,13.7878L14.5,14.1647L14.1975,14.3896C13.9508,14.573 13.4546,14.7939 12.6319,14.997C11.351,15.3133 9.5847,15.5 7.25,15.5C4.9153,15.5 3.149,15.3133 1.8681,14.997C1.0454,14.7939 0.5492,14.573 0.3025,14.3896L0,14.1647L0,13.7878Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".directory.ui.DirectorySortingBottomSheetFragment">
<TextView
android:id="@+id/text_sort_by"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@string/msg_sort_by"
android:textColor="#9EA2A8"
android:textSize="17sp"
android:textStyle="normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view_divider_one"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="16dp"
android:background="#1F000000"
app:layout_constraintTop_toBottomOf="@+id/text_sort_by" />
<TextView
android:id="@+id/text_channels"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_hashtag_16dp"
android:drawablePadding="16dp"
android:paddingStart="16dp"
android:paddingTop="16dp"
android:paddingEnd="16dp"
android:paddingBottom="16dp"
android:text="@string/msg_channels"
android:textColor="#2F343D"
android:textSize="16sp"
android:textStyle="normal"
app:layout_constraintTop_toBottomOf="@+id/view_divider_one" />
<TextView
android:id="@+id/text_users"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_user_16dp"
android:drawablePadding="16dp"
android:paddingStart="16dp"
android:paddingTop="16dp"
android:paddingEnd="16dp"
android:paddingBottom="16dp"
android:text="@string/msg_users"
android:textColor="#2F343D"
android:textSize="16sp"
android:textStyle="normal"
app:layout_constraintTop_toBottomOf="@+id/text_channels" />
<View
android:id="@+id/view_divider_two"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="#1F000000"
app:layout_constraintTop_toBottomOf="@+id/text_users" />
<TextView
android:id="@+id/text_search_for_global_users"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingTop="16dp"
android:paddingEnd="16dp"
android:text="@string/msg_search_for_global_users"
android:textColor="#2F343D"
android:textSize="16sp"
android:textStyle="normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view_divider_two" />
<Switch
android:id="@+id/switch_global_users"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:checked="false"
app:layout_constraintBottom_toBottomOf="@+id/text_search_for_global_users"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/text_search_for_global_users" />
<TextView
android:id="@+id/text_search_for_global_users_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingBottom="16dp"
android:text="@string/msg_search_for_global_users_description"
android:textColor="#9EA2A8"
android:textSize="14sp"
android:textStyle="normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_search_for_global_users" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -13,7 +13,7 @@
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@string/msg_sort_by"
android:text="@string/msg_sort_by_placeholder"
android:textColor="#9EA2A8"
android:textSize="17sp"
android:textStyle="normal" />
......
......@@ -54,7 +54,7 @@
android:id="@+id/button_forgot_your_password"
style="@style/Authentication.Button.Borderless"
android:layout_marginTop="10dp"
android:text="@string/msg_forgot__your_password"
android:text="@string/msg_forgot_your_password"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
......
......@@ -11,6 +11,27 @@
layout="@layout/app_bar_chat_rooms"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_directory"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_directory_48dp"
android:drawablePadding="10dp"
android:fontFamily="sans-serif"
android:gravity="center_vertical"
android:paddingStart="16dp"
android:paddingTop="32dp"
android:paddingEnd="16dp"
android:paddingBottom="32dp"
android:text="@string/msg_directory"
android:textColor="#0c0d0f"
android:textSize="17sp"
android:textStyle="bold"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_app_bar_chat_room" />
<TextView
android:id="@+id/text_sort_by"
android:layout_width="match_parent"
......@@ -21,13 +42,13 @@
android:gravity="center_vertical"
android:paddingStart="@dimen/screen_edge_left_and_right_margins"
android:paddingEnd="@dimen/screen_edge_left_and_right_margins"
android:text="@string/msg_sort_by"
android:text="@string/msg_sort_by_placeholder"
android:textColor="#CBCED1"
android:textSize="14sp"
android:textStyle="normal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_app_bar_chat_room" />
app:layout_constraintTop_toBottomOf="@+id/text_directory" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".directory.ui.DirectoryFragment">
<include
android:id="@+id/layout_app_bar"
layout="@layout/app_bar"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_sort_by"
android:layout_width="match_parent"
android:layout_height="42dp"
android:background="#54585E"
android:drawableStart="@drawable/ic_hashtag_16dp"
android:drawableEnd="@drawable/ic_arrow_down"
android:drawablePadding="10dp"
android:fontFamily="sans-serif-medium"
android:gravity="center_vertical"
android:paddingStart="@dimen/screen_edge_left_and_right_margins"
android:paddingEnd="@dimen/screen_edge_left_and_right_margins"
android:text="@string/msg_channels"
android:textColor="#CBCED1"
android:textSize="14sp"
android:textStyle="normal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_app_bar" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_sort_by" />
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/view_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:indicatorColor="@color/colorBlack"
app:indicatorName="BallPulseIndicator"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_sort_by"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -13,14 +13,15 @@
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="0dp"
android:layout_below="@+id/layout_app_bar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_app_bar">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
android:paddingTop="20dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/profile_container"
......@@ -182,7 +183,7 @@
android:paddingTop="8dp"
android:paddingEnd="16dp"
android:paddingBottom="8dp"
android:text="@string/msg_licence"
android:text="@string/msg_license"
android:textColor="#DE000000"
android:textSize="16sp"
android:textStyle="normal"
......
......@@ -95,7 +95,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/screen_edge_left_and_right_margins"
android:layout_marginTop="20dp"
android:text="@string/status"
android:text="@string/user_detail_status"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_message" />
......
......@@ -63,7 +63,7 @@
app:layout_constraintEnd_toStartOf="@+id/layout_unread_messages_badge"
app:layout_constraintStart_toStartOf="@+id/image_chat_icon"
app:layout_constraintTop_toBottomOf="@+id/text_chat_name"
tools:text="Filipe de Lima Brito: Type something that is very big and need at least to lines, or maybe even more" />
tools:text="Filipe de Lima Brito: Type something that is very long and need at least two lines, or maybe even more" />
<include
android:id="@+id/layout_unread_messages_badge"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:paddingStart="@dimen/screen_edge_left_and_right_padding"
android:paddingTop="8dp"
android:paddingEnd="@dimen/screen_edge_left_and_right_padding"
android:paddingBottom="8dp">
<ImageView
android:id="@+id/image_avatar"
android:layout_width="40dp"
android:layout_height="40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars[6]" />
<TextView
android:id="@+id/text_channel_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="10dp"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
android:textColor="#0c0d0f"
android:textSize="17sp"
android:textStyle="normal"
app:layout_constraintEnd_toStartOf="@+id/text_channel_total_members"
app:layout_constraintLeft_toRightOf="@+id/image_avatar"
app:layout_constraintStart_toEndOf="@+id/image_avatar"
app:layout_constraintTop_toTopOf="@+id/image_avatar"
tools:text="General" />
<TextView
android:id="@+id/text_channel_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:fontFamily="sans-serif"
android:maxLines="1"
android:textColor="#9ea2a8"
android:textSize="15sp"
android:textStyle="normal"
app:layout_constraintEnd_toStartOf="@+id/text_channel_total_members"
app:layout_constraintStart_toStartOf="@+id/text_channel_name"
app:layout_constraintTop_toBottomOf="@+id/text_channel_name"
tools:text="Community support" />
<TextView
android:id="@+id/text_channel_total_members"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:maxLines="1"
android:textColor="#9da2a9"
android:textSize="12sp"
android:textStyle="normal"
app:layout_constraintBottom_toBottomOf="@+id/text_channel_description"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/text_channel_name"
tools:text="230K members" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:paddingStart="@dimen/screen_edge_left_and_right_padding"
android:paddingTop="8dp"
android:paddingEnd="@dimen/screen_edge_left_and_right_padding"
android:paddingBottom="8dp">
<ImageView
android:id="@+id/image_avatar"
android:layout_width="40dp"
android:layout_height="40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars[6]" />
<TextView
android:id="@+id/text_user_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="10dp"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
android:textColor="#0c0d0f"
android:textSize="17sp"
android:textStyle="normal"
app:layout_constraintEnd_toStartOf="@+id/text_server_url"
app:layout_constraintLeft_toRightOf="@+id/image_avatar"
app:layout_constraintStart_toEndOf="@+id/image_avatar"
app:layout_constraintTop_toTopOf="@+id/image_avatar"
tools:text="User" />
<TextView
android:id="@+id/text_user_username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:fontFamily="sans-serif"
android:maxLines="1"
android:textColor="#9ea2a8"
android:textSize="15sp"
android:textStyle="normal"
app:layout_constraintEnd_toStartOf="@+id/text_server_url"
app:layout_constraintStart_toStartOf="@+id/text_user_name"
app:layout_constraintTop_toBottomOf="@+id/text_user_name"
tools:text="Username" />
<!-- We only show the server url if the user is searching for global users-->
<TextView
android:id="@+id/text_server_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:maxLines="1"
android:textColor="#9da2a9"
android:textSize="12sp"
android:textStyle="normal"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/text_user_username"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/text_user_name"
tools:text="230K members" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -46,7 +46,6 @@
android:adjustViewBounds="true"
android:cropToPadding="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/quote_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_close_gray_24dp" />
......@@ -65,4 +64,4 @@
app:layout_constraintStart_toEndOf="@+id/quote_bar"
app:layout_constraintTop_toTopOf="parent"
tools:text="Edit message" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_24dp"
android:title="@string/action_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
</menu>
......@@ -21,7 +21,8 @@
<string name="title_password">تغيير كلمة السر</string>
<string name="title_update_profile">تحديث الملف الشخصي</string>
<string name="title_create_channel">إنشاء قناة</string>
<string name="title_licence">الترخيص</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">الترخيص</string>
<string name="title_are_you_sure">هل أنت متأكد؟</string>
<string name="title_channel_details">تفاصيل القناة</string>
<string name="title_topic">موضوع</string>
......@@ -60,27 +61,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Translate -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Translate -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">نأسف حدث خطأ ما حاول مرة أخرى</string>
<string name="msg_no_data_to_display">لا يوجد بيانات للعرض</string>
<string name="msg_check_this_out">تحقق من هذا</string>
<string name="msg_share_using">نشر بواسطة</string>
<string name="msg_profile_update_successfully">تم تحديث الملف الشخصي بنجاح</string>
<string name="msg_profile_updated_successfully">تم تحديث الملف الشخصي بنجاح</string>
<string name="msg_username">اسم المستخدم</string>
<string name="msg_username_or_email">اسم المستخدم أو عنوان بريد</string>
<string name="msg_password">كلمة السر</string>
......@@ -89,7 +108,7 @@
<string name="msg_avatar_url">رابط الشخصية</string>
<string name="msg_or_continue_using_social_accounts">استمرار باستخدام حساب التواصل الاجتماعي</string>
<string name="msg_new_user">مستخدم جديد؟ %1$s</string>
<string name="msg_forgot__your_password">نسيت كلمة السر؟</string>
<string name="msg_forgot_your_password">نسيت كلمة السر؟</string>
<string name="msg_reset">إعادة تعيين</string>
<string name="msg_check_your_email_to_reset_your_password">تم إرسال الإيميل راجع إيميلك لتحديث كلمة السر</string>
<string name="msg_invalid_email">من فضلك أدخل عنوان بريد صحيح</string>
......@@ -104,12 +123,12 @@
<string name="msg_invalid_file">ملف غير صالح</string>
<string name="msg_invalid_server_url">رابط خادم غير صحيح</string>
<string name="msg_content_description_log_in_using_facebook">تسجيل باستخدام فيسبوك</string>
<string name="msg_content_description_log_in_using_github">تسجيل باستخدام Github</string>
<string name="msg_content_description_log_in_using_github">تسجيل باستخدام GitHub</string>
<string name="msg_content_description_log_in_using_google">تسجيل باستخدام Google</string>
<string name="msg_content_description_log_in_using_linkedin">تسجيل باستخدام LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">تسجيل باستخدام Meteor</string>
<string name="msg_content_description_log_in_using_twitter">تسجيل باستخدام Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">تسجيل باستخدام Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">تسجيل باستخدام GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">تسجيل باستخدام WordPress</string>
<string name="msg_content_description_send_message">ارسال رسالة</string>
<string name="msg_content_description_show_more_login_options">إظهار طرق تسجيل أخرى</string>
......@@ -130,11 +149,8 @@
<string name="msg_no_messages_yet">ليس هناك رسائل بعد</string>
<string name="msg_build">Build %1$d - %2$s - %3$s</string>
<string name="msg_update_app_version_in_order_to_continue">خادم منتهي برجاء التواصل مع مدير الخادم للاستمرار</string>
<string name="msg_ver_not_recommended">
يبدو أن خادمك قديم %1$s يمكنك الاستمرار لكن ليس بكامل الفعالية</string>
<string name="msg_ver_not_minimum">
يبدو أن خادمك قديم %1$s من فضلك حدث الخادم للاستمرار
</string>
<string name="msg_ver_not_recommended">يبدو أن خادمك قديم %1$s يمكنك الاستمرار لكن ليس بكامل الفعالية</string>
<string name="msg_ver_not_minimum">يبدو أن خادمك قديم %1$s من فضلك حدث الخادم للاستمرار</string>
<string name="msg_no_chat_title">لا توجد رسائل</string>
<string name="msg_no_chat_description">إبدأ المحادثة لترى الرسائل هنا</string>
<string name="msg_http_insecure">أنت تستخدم HTTP وهو غير آمن ونحن لا نحبذ ذلك.</string>
......@@ -155,16 +171,16 @@
<string name="msg_sent_attachment">إرسال مرفق</string>
<string name="msg_welcome_to_rocket_chat">أهلا بك في Rocket.Chat</string>
<string name="msg_team_communication">التواصل مع الفريق</string>
<string name="msg_login_with_email">تسجيل ب <b>عنوان البريد </b></string>
<string name="msg_login_with_email">تسجيل ب <b>عنوان البريد</b></string>
<string name="msg_create_account">إنشاء حساب</string>
<string name="msg_continue_with_facebook">استمرار ب <b>Facebook</b></string>
<string name="msg_continue_with_github">استمرار ب <b>Github</b></string>
<string name="msg_continue_with_github">استمرار ب <b>GitHub</b></string>
<string name="msg_continue_with_google">استمرار ب <b>Google</b></string>
<string name="msg_continue_with_linkedin">استمرار ب <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">استمرار ب <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">استمرار ب <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">استمرار ب <b>WordPress</b></string>
<string name="msg_two_factor_authentication">مصادقة مزدوجة</string>
<string name="msg__your_2fa_code">ما هو رمز 2FA?</string>
<string name="msg_your_2fa_code">ما هو رمز 2FA؟</string>
<string name="msg_permalink_copied">الرابط الثابت المنسوخ</string>
<string name="msg_no_topic">لا يوجد موضوع مضاف</string>
<string name="msg_no_announcement">لا يوجد ملف مضاف</string>
......@@ -186,6 +202,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">خاص</string>
......@@ -199,8 +216,8 @@
<string name="msg_member_not_found">عضو غير موجود</string>
<string name="msg_channel_created_successfully">تم انشاء القناة بنجاح</string>
<string name="msg_message_copied">تم نسخ الرسالة</string>
<string name="msg_delete_message">تم حذف الرسالة</string>
<string name="msg_delete_description">هل أنت متأكد من حذف هذه الرسالة</string>
<string name="msg_delete_message">حذف الرسالة</string>
<string name="msg_delete_description">هل أنت متأكد من حذف هذه الرسالة؟</string>
<string name="msg_view_more">رؤية المزيد</string>
<string name="msg_view_less">رؤية أقل</string>
<string name="msg_muted_on_this_channel">لقد جعلت هذه القناة صامتة</string>
......@@ -277,7 +294,7 @@
<string name="msg_all_files_appear_here">الملفات تظهر هنا</string>
<!-- Upload Messages -->
<string name="max_file_size_exceeded">ملف كبير</string>
<string name="max_file_size_exceeded">تجاوز حجم الملف %1$d بايت الحد الأقصى لحجم التحميل وهو %2$d بايت</string>
<!-- Socket status -->
<string name="status_connected">اتصال</string>
......@@ -319,7 +336,8 @@
<string name="alert_title_default_skin_tone">نغمة الجلد الافتراضية</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -328,7 +346,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string> <!-- TODO Translate -->
<string name="header_channel">القنوات</string>
<string name="msg_channels">القنوات</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">المجموعات الخاصة</string>
<string name="header_direct_messages">الرسائل المباشرة</string>
<string name="header_live_chats">محادثات حية</string>
......
......@@ -9,6 +9,7 @@
<string name="title_authentication">Login Daten prüfen</string>
<string name="title_legal_terms">Legal Terms</string>
<string name="title_chats">Chats</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_profile">Profil</string>
<string name="title_members">Benutzer</string>
<string name="title_counted_members">Benutzer (%d)</string>
......@@ -25,14 +26,14 @@
<string name="title_topic">Thema</string>
<string name="title_announcement">Ankündigung</string>
<string name="title_description">Beschreibung</string>
<string name="title_licence">Lizenz</string>
<string name="title_license">Lizenz</string>
<!-- Actions -->
<string name="action_connect">Verbinde</string>
<string name="action_use_this_username">Benutze den Benutzernamen</string>
<string name="action_terms_of_service">Nutzungsbedingungen</string>
<string name="action_privacy_policy">Datenschutz</string>
<string name="action_new_channel">New channel</string> <!-- TODO Translate -->
<string name="action_new_channel">Neuer Kanal</string>
<string name="action_search">Suche</string>
<string name="action_update">Updaten</string>
<string name="action_settings">Einstellungen</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favoriten</string>
<string name="action_remove_favorite">Favoriten entfernen</string>
<!-- Settings messages-->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<!-- Settings messages -->
<string name="msg_contact_us">Kontaktiere uns</string>
<string name="msg_language">Sprache</string>
<string name="msg_review_this_app">Bewerte diese App</string>
<string name="msg_share_this_app">Teile diese App</string>
<string name="msg_administration">Administration</string>
<string name="msg_license">Lizenz</string>
<string name="msg_app_version">Version: %1$s (%2$d)</string>
<string name="msg_server_version">Serverversion: %1$s</string>
<string name="msg_send_analytics">Analysesaten senden</string>
<string name="msg_logout_from_rocket_chat">Logout von Rocket.Chat</string>
<string name="msg_delete_account">Konto löschen</string>
<string name="msg_change_status">Status ändern</string>
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Entschuldigung, ein Fehler ist aufgetreten, bitte versuchen Sie es noch einmal.</string>
<string name="msg_no_data_to_display">Keine Anzeigedaten vorhanden</string>
<string name="msg_check_this_out">Schau dir das an</string>
<string name="msg_share_using">Teilen Sie mit</string>
<string name="msg_profile_update_successfully">Profil update erfolgreich</string>
<string name="msg_profile_updated_successfully">Profil update erfolgreich</string>
<string name="msg_username">Benutzername</string>
<string name="msg_username_or_email">Benutzername oder E-Mail</string>
<string name="msg_password">Passwort</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">Avatar URL</string>
<string name="msg_or_continue_using_social_accounts">Oder weiter mit einem Social Account</string>
<string name="msg_new_user">Neuer Benutzer? %1$s</string>
<string name="msg_forgot__your_password">Passwort vergessen?</string>
<string name="msg_forgot_your_password">Passwort vergessen?</string>
<string name="msg_reset">Zurücksetzen</string>
<string name="msg_check_your_email_to_reset_your_password">E-Mail gesendet! Prüfe dein E-Mail Posteingang um dein Passwort zurückzusetzen.</string>
<string name="msg_invalid_email">Bitte eine korrekte E-Mail Adresse eingeben</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">Falsche Datei</string>
<string name="msg_invalid_server_url">Falsche Server URL</string>
<string name="msg_content_description_log_in_using_facebook">Login mit Facebook</string>
<string name="msg_content_description_log_in_using_github">Login mit Github</string>
<string name="msg_content_description_log_in_using_github">Login mit GitHub</string>
<string name="msg_content_description_log_in_using_google">Login mit Google</string>
<string name="msg_content_description_log_in_using_linkedin">Login mit Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Login mit LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Login mit Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Login mit Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Login mit Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Login mit GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Login mit WordPress</string>
<string name="msg_content_description_send_message">Sende Nachricht</string>
<string name="msg_content_description_show_more_login_options">Zeige mehr Login-Optionen</string>
......@@ -155,13 +174,13 @@
<string name="msg_login_with_email">Mit <b>e-mail</b> einloggen</string>
<string name="msg_create_account">Einen Account erstellen</string>
<string name="msg_continue_with_facebook">Mit <b>Facebook</b> einloggen</string>
<string name="msg_continue_with_github">Mit <b>Github</b> einloggen</string>
<string name="msg_continue_with_github">Mit <b>GitHub</b> einloggen</string>
<string name="msg_continue_with_google">Mit <b>Google</b> einloggen</string>
<string name="msg_continue_with_linkedin">Mit <b>Linkedin</b> einloggen</string>
<string name="msg_continue_with_linkedin">Mit <b>LinkedIn</b> einloggen</string>
<string name="msg_continue_with_gitlab">Mit <b>GitLab</b> einloggen</string>
<string name="msg_continue_with_wordpress">Mit <b>WordPress</b> einloggen</string>
<string name="msg_two_factor_authentication">Zwei-Faktor-Authentifizierung</string>
<string name="msg__your_2fa_code">Wie lautet Ihr F2A Code?</string>
<string name="msg_your_2fa_code">Wie lautet Ihr F2A Code?</string>
<string name="msg_muted_on_this_channel">Sie sind auf diesem Kanal stummgeschaltet</string>
<string name="msg_no_topic">Keine Überschrift</string>
<string name="msg_no_announcement">Keine Ankündigung</string>
......@@ -173,10 +192,11 @@
<item quantity="other">%1$s reagierte mit %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Login-Daten erfolgreich gespeichert</string>
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation -->
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_camera_permission_denied">Zum Öffnen der Kamera ist eine Kamera-Berechtigung erforderlich.</string>
<string name="msg_storage_permission_denied">Zum Öffnen der Zeichnung ist eine Speicher-Berechtigung erforderlich.</string>
<string name="msg_server">Server</string>
<string name="msg_add_new_server">Neuen Server hinzufügen</string>
<string name="msg_directory">Verzeichnis</string>
<!-- Create channel messages -->
<string name="msg_private_channel">Privat</string>
......@@ -314,16 +334,20 @@
<string name="alert_title_default_skin_tone">Standard Hautton</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
<string name="msg_group_by_type">Group by type</string> <!-- TODO Translate -->
<string name="msg_group_by_favorites">Group by favorites</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sortiere nach %1$s</string>
<string name="msg_sort_by">Sortiert nach</string>
<string name="msg_sort_by_activity">Aktivität</string>
<string name="msg_sort_by_name">Name</string>
<string name="msg_group_by_unread_on_top">Ungelesen oben</string>
<string name="msg_group_by_type">Gruppieren nach Typ</string>
<string name="msg_group_by_favorites">Gruppieren nach Favoriten</string>
<!--ChatRooms Headers-->
<string name="header_favorite">Favoriten</string>
<string name="header_channel">Räume</string>
<string name="msg_channels">Räume</string>
<string name="msg_users">Benutzer</string>
<string name="msg_search_for_global_users">Suche nach globalen Benutzern</string>
<string name="msg_search_for_global_users_description">Wenn Sie dies einschalten, können Sie nach Benutzern von anderen Unternehmen oder Servern suchen.</string>
<string name="header_private_groups">Private Räume</string>
<string name="header_direct_messages">Direkt Nachrichten</string>
<string name="header_live_chats">Live Chats</string>
......
......@@ -19,8 +19,9 @@
<string name="title_admin_panel">Admin panel</string> <!-- TODO Add translation -->
<string name="title_password">Cambia la contraseña</string>
<string name="title_update_profile">Actualización del perfil</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_create_channel">Crear canal</string>
<string name="title_licence">Licence</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
<string name="title_topic">Tema</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Lo sentimos, ha ocurrido un error, por favor intente de nuevo</string>
<string name="msg_no_data_to_display">No hay información para mostrar</string>
<string name="msg_check_this_out">Mira esto</string>
<string name="msg_share_using">Compartir usando</string>
<string name="msg_profile_update_successfully">Actualización de perfil con éxito</string>
<string name="msg_profile_updated_successfully">Actualización de perfil con éxito</string>
<string name="msg_username">usuario</string>
<string name="msg_username_or_email">Nombre de usuario o correo electrónico</string>
<string name="msg_password">Contraseña</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">URL del avatar</string>
<string name="msg_or_continue_using_social_accounts">O continuar usando cuentas sociales</string>
<string name="msg_new_user">Nuevo usuario? %1$s</string>
<string name="msg_forgot__your_password">Se te olvidó tu contraseña?</string>
<string name="msg_forgot_your_password">Se te olvidó tu contraseña?</string>
<string name="msg_reset">reiniciar</string>
<string name="msg_check_your_email_to_reset_your_password">¡Email enviado! Verifique su bandeja de entrada para restablecer su contraseña.</string>
<string name="msg_invalid_email">Por favor escriba un correo electrónico válido</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">Archivo inválido</string>
<string name="msg_invalid_server_url">URL del servidor inválido</string>
<string name="msg_content_description_log_in_using_facebook">Inicia sesión usando Facebook</string>
<string name="msg_content_description_log_in_using_github">Inicia sesión usando Github</string>
<string name="msg_content_description_log_in_using_github">Inicia sesión usando GitHub</string>
<string name="msg_content_description_log_in_using_google">Inicia sesión usando Google</string>
<string name="msg_content_description_log_in_using_linkedin">Inicia sesión usando Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Inicia sesión usando LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Inicia sesión usando Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Inicia sesión usando Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Inicia sesión usando Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Inicia sesión usando GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Inicia sesión usando WordPress</string>
<string name="msg_content_description_send_message">Enviar mensaje</string>
<string name="msg_content_description_show_more_login_options">Show more login options</string> <!-- TODO Translate-->
......@@ -148,22 +167,23 @@
<string name="msg_search">Buscar</string>
<string name="msg_message_copied">Mensaje copiado</string>
<string name="msg_delete_message">Borrar mensaje</string>
<string name="msg_delete_description">Seguro que quieres borrar este mensaje</string>
<string name="msg_delete_description">¿Seguro que quieres borrar este mensaje?</string>
<string name="msg_no_search_found">No se han encontrado resultados</string>
<string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation -->
<string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>Github</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>GitHub</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_google">Continue with <b>Google</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>Linkedin</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>LinkedIn</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_gitlab">Continue with <b>GitLab</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string> <!-- TODO Add translation -->
<string name="msg_two_factor_authentication">Two-factor Authentication</string> <!-- TODO Add translation -->
<string name="msg__your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privado</string>
......@@ -196,10 +216,10 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<!-- Preferences messages -->
<string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation -->
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string> <!-- TODO Add translation -->
<string name="msg_analytics_tracking">Seguimiento analítico</string>
<string name="msg_send_analytics_tracking">Envía estadísticas anónimas para ayudar a mejorar esta aplicación</string>
<string name="msg_do_not_send_analytics_tracking">No envíe estadísticas anónimas para ayudar a mejorar esta aplicación</string>
<string name="msg_not_applicable_since_it_is_a_foss_version">No aplica ya que es una versión FOSS</string>
<!-- System messages -->
<string name="message_room_name_changed">Nombre de la sala cambiado para: %1$s por %2$s</string>
......@@ -311,7 +331,8 @@
<string name="alert_title_default_skin_tone">Tono de piel predeterminado</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -320,7 +341,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">Canales</string>
<string name="msg_channels">Canales</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Grupos privados</string>
<string name="header_direct_messages">Mensajes directos</string>
<string name="header_live_chats">Chats en vivo</string>
......
......@@ -18,9 +18,10 @@
<string name="title_rate_us">به ما امتیاز دهید</string>
<string name="title_admin_panel">Admin panel</string> <!-- TODO Add translation -->
<string name="title_password">تغییر گذرواژه</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_update_profile">به روزرسانی نمایه</string>
<string name="title_create_channel">ایجاد کانال</string>
<string name="title_licence">مجوز</string>
<string name="title_license">مجوز</string>
<string name="title_are_you_sure">آیا مطمئن هستید؟</string>
<string name="title_channel_details">جزئیات کانال</string>
<string name="title_topic">موضوع</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">متاسفانه مشکلی رخ داد، لطفا دوباره تلاش کنید</string>
<string name="msg_no_data_to_display">اطلاعاتی برای نمایش وجود نداد</string>
<string name="msg_check_this_out">اینجا را ببینید</string>
<string name="msg_share_using">تغییر کاربری</string>
<string name="msg_profile_update_successfully">نمایه با موفقیت به روزرسانی شد</string>
<string name="msg_profile_updated_successfully">نمایه با موفقیت به روزرسانی شد</string>
<string name="msg_username">شناسه‌ی کاربری</string>
<string name="msg_username_or_email">حساب‌کاربری یا ایمیل</string>
<string name="msg_password">گذرواژه</string>
......@@ -87,8 +106,8 @@
<string name="msg_email">ایمیل</string>
<string name="msg_avatar_url">URL تصویر نمایه</string>
<string name="msg_or_continue_using_social_accounts">یا به استفاده از سرورهای اجتماعی ادامه دهید</string>
<string name="msg_new_user">%1$s کاربر جدید?</string>
<string name="msg_forgot__your_password">گذرواژه‌تان را فراموش کردید؟</string>
<string name="msg_new_user">%1$s کاربر جدید؟</string>
<string name="msg_forgot_your_password">گذرواژه‌تان را فراموش کردید؟</string>
<string name="msg_reset">راه اندازی مجدد</string>
<string name="msg_check_your_email_to_reset_your_password">ایمیل فرستاده شد. صندوق ورودی خود را برای تعویض گذرواژه چک کنید</string>
<string name="msg_invalid_email">لطفا یک ایمیل معتبر را بنویسید</string>
......@@ -163,7 +182,7 @@
<string name="msg_continue_with_gitlab">ادامه دادن با <b>گیت‌لب</b></string>
<string name="msg_continue_with_wordpress">ادامه دادن با <b>وردپرس</b></string>
<string name="msg_two_factor_authentication">تایید هویت دو فاکتوره</string>
<string name="msg__your_2fa_code">کد 2FA تان چیست؟</string>
<string name="msg_your_2fa_code">کد 2FA تان چیست؟</string>
<string name="msg_permalink_copied">پیوند کپی شد</string>
<string name="msg_no_topic">No topic</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement</string> <!-- TODO Add translation -->
......@@ -181,6 +200,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">خصوصی</string>
......@@ -314,7 +334,8 @@
<string name="alert_title_default_skin_tone">مدل پوسته‌ی پیش‌فرض</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -323,7 +344,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">کانال‌ها</string>
<string name="msg_channels">کانال‌ها</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">گروه‌های خصوصی</string>
<string name="header_direct_messages">پیام‌های خصوصی</string>
<string name="header_live_chats">گفت‌وگوهای زنده</string>
......
......@@ -14,13 +14,14 @@
<string name="title_counted_members">Membres (%d)</string>
<string name="title_settings">Paramètres</string>
<string name="title_preferences">Préférences</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_change_password">Changer le mot de passe</string>
<string name="title_rate_us">évaluez nous</string>
<string name="title_admin_panel">l\' administration</string>
<string name="title_password">Changer le mot de passe</string>
<string name="title_update_profile">Mettre à jour le profil</string>
<string name="title_create_channel">Créer salon</string>
<string name="title_licence">les permis</string>
<string name="title_license">les permis</string>
<string name="title_are_you_sure">Êtes-vous sûr?</string>
<string name="title_channel_details">Détails de la chaîne</string>
<string name="title_topic">Sujet</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Désolé, une erreur s\'est produite. Veuillez réessayer</string>
<string name="msg_no_data_to_display">Aucune donnée à afficher</string>
<string name="msg_check_this_out">regarde ça</string>
<string name="msg_share_using">Partager en utilisant</string>
<string name="msg_profile_update_successfully">Mise à jour du profil avec succès</string>
<string name="msg_profile_updated_successfully">Mise à jour du profil avec succès</string>
<string name="msg_username">nom d\'utilisateur</string>
<string name="msg_username_or_email">Nom d\'utilisateur ou email</string>
<string name="msg_password">Mot de passe</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">URL de l\'avatar</string>
<string name="msg_or_continue_using_social_accounts">Ou continuer en utilisant les comptes sociaux</string>
<string name="msg_new_user">Nouvel utilisateur? %1$s</string>
<string name="msg_forgot__your_password">Mot de passe oublié ? %1$s</string>
<string name="msg_forgot_your_password">Mot de passe oublié? %1$s</string>
<string name="msg_reset">Réinitialiser</string>
<string name="msg_check_your_email_to_reset_your_password">Email envoyé ! Consultez votre boîte mail pour réinitialiser votre mot de passe.</string>
<string name="msg_invalid_email">Veuillez entrer une adresse valide</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">Fichier non valide</string>
<string name="msg_invalid_server_url">URL de serveur non valide</string>
<string name="msg_content_description_log_in_using_facebook">Connectez-vous en utilisant Facebook</string>
<string name="msg_content_description_log_in_using_github">Connectez-vous en utilisant Github</string>
<string name="msg_content_description_log_in_using_github">Connectez-vous en utilisant GitHub</string>
<string name="msg_content_description_log_in_using_google">Connectez-vous en utilisant Google</string>
<string name="msg_content_description_log_in_using_linkedin">Connectez-vous en utilisant Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Connectez-vous en utilisant LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Connectez-vous en utilisant Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Connectez-vous en utilisant Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Connectez-vous en utilisant Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Connectez-vous en utilisant GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Connectez-vous en utilisant WordPress</string>
<string name="msg_content_description_send_message">Envoyer message</string>
<string name="msg_content_description_show_more_login_options">montrer plus d\'options le login</string>
......@@ -152,19 +171,19 @@
<string name="msg_file_description">Description du fichier</string>
<string name="msg_send">envoyer</string>
<string name="msg_delete_message">Supprimer Message</string>
<string name="msg_delete_description">Êtes-vous sûr de vouloir supprimer ce message</string>
<string name="msg_delete_description">Êtes-vous sûr de vouloir supprimer ce message?</string>
<string name="msg_welcome_to_rocket_chat">Bienvenue à Rocket.Chat</string>
<string name="msg_team_communication">Communication d\'équipe</string>
<string name="msg_login_with_email">le login avec <b>e-mail</b></string>
<string name="msg_create_account">Créer un compte</string>
<string name="msg_continue_with_facebook">Continuer avec <b>Facebook</b></string>
<string name="msg_continue_with_github">Continuer avec <b>Github</b></string>
<string name="msg_continue_with_github">Continuer avec <b>GitHub</b></string>
<string name="msg_continue_with_google">Continuer avec <b>Google</b></string>
<string name="msg_continue_with_linkedin">Continuer avec <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">Continuer avec <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">Continuer avec <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Continuer avec <b>WordPress</b></string>
<string name="msg_two_factor_authentication">authentification à deux facteurs</string>
<string name="msg__your_2fa_code">Quel est votre code 2FA?</string>
<string name="msg_your_2fa_code">Quel est votre code 2FA?</string>
<string name="msg_view_more">voir de plus</string>
<string name="msg_view_less">voir de plus</string>
<string name="msg_permalink_copied">Permalink copié</string>
......@@ -185,6 +204,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privé</string>
......@@ -312,7 +332,8 @@
<string name="alert_title_default_skin_tone">Tonalité de peau par défaut</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -321,7 +342,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favoris</string>
<string name="header_channel">Salons</string>
<string name="msg_channels">Salons</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Groupes privés</string>
<string name="header_direct_messages">Messages directs</string>
<string name="header_live_chats">Chats en direct</string>
......
......@@ -19,8 +19,9 @@
<string name="title_admin_panel">एडमिन पैनल</string>
<string name="title_password">पासवर्ड बदलें</string>
<string name="title_update_profile">प्रोफ़ाइल अपडेट करें</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_create_channel">चैनल बनाएं</string>
<string name="title_licence">लाइसेंस</string>
<string name="title_license">लाइसेंस</string>
<string name="title_are_you_sure">क्या आपको यकीन है?</string>
<string name="title_channel_details">चैनल विवरण</string>
<string name="title_topic">विषय</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">क्षमा करें, एक त्रुटि हुई है, कृपया पुनः प्रयास करें</string>
<string name="msg_no_data_to_display">डेटा प्रदर्शित करने के लिए उपलब्ध नहीं हैं</string>
<string name="msg_check_this_out">इसकी जांच करें</string>
<string name="msg_share_using">उपयोग कर साझा करें</string>
<string name="msg_profile_update_successfully">प्रोफ़ाइल सफलतापूर्वक अपडेट हो गया है</string>
<string name="msg_profile_updated_successfully">प्रोफ़ाइल सफलतापूर्वक अपडेट हो गया है</string>
<string name="msg_username">यूजरनेम</string>
<string name="msg_username_or_email">यूजरनेम या ईमेल</string>
<string name="msg_password">पासवर्ड</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">अवतार यूआरएल</string>
<string name="msg_or_continue_using_social_accounts">या सामाजिक खाते का उपयोग करना जारी रखें</string>
<string name="msg_new_user">नया उपयोगकर्ता? %1$s</string>
<string name="msg_forgot__your_password">पासवर्ड भूल गए?</string>
<string name="msg_forgot_your_password">पासवर्ड भूल गए?</string>
<string name="msg_reset">रीसेट करें</string>
<string name="msg_check_your_email_to_reset_your_password">ईमेल गया गया है! अपना पासवर्ड रीसेट करने के लिए अपने इनबॉक्स की जांच करें।</string>
<string name="msg_invalid_email">कृपया एक वैध ई-मेल टाइप करें</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">अवैध फाइल</string>
<string name="msg_invalid_server_url">अमान्य सर्वर यूआरL</string>
<string name="msg_content_description_log_in_using_facebook">Facebook द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_github">Github द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_github">GitHub द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_google">Google द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_linkedin">Linkedin द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_linkedin">LinkedIn द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_meteor">Meteor द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_twitter">Twitter द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_gitlab">Gitlab द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_gitlab">GitLab द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_wordpress">WordPress द्वारा लॉगिन करें</string>
<string name="msg_content_description_send_message">मेसेज भेजें</string>
<string name="msg_content_description_show_more_login_options">अधिक लॉगिन विकल्प दिखाएं</string>
......@@ -154,19 +173,19 @@
<string name="msg_send">भेजें</string>
<string name="msg_sent_attachment">एक अनुलग्नक भेजा</string>
<string name="msg_delete_message">संदेश को हटाएं</string>
<string name="msg_delete_description">क्या आप निश्चित रूप से यह संदेश हटाना चाहते हैं</string>
<string name="msg_delete_description">क्या आप निश्चित रूप से यह संदेश हटाना चाहते हैं?</string>
<string name="msg_welcome_to_rocket_chat">Rocket.Chat में आपका स्वागत है</string>
<string name="msg_team_communication">टीम संचार</string>
<string name="msg_login_with_email">ई-मेल के साथ लॉगिन करें</string>
<string name="msg_create_account">खाता बनाएं</string>
<string name="msg_continue_with_facebook"><b>Facebook</b> के साथ जारी रखें</string>
<string name="msg_continue_with_github"><b>Github</b> के साथ जारी रखें</string>
<string name="msg_continue_with_github"><b>GitHub</b> के साथ जारी रखें</string>
<string name="msg_continue_with_google"><b>Google</b> के साथ जारी रखें</string>
<string name="msg_continue_with_linkedin"><b>Linkedin</b> के साथ जारी रखें</string>
<string name="msg_continue_with_linkedin"><b>LinkedIn</b> के साथ जारी रखें</string>
<string name="msg_continue_with_gitlab"><b>GitLab</b> के साथ जारी रखें</string>
<string name="msg_continue_with_wordpress"><b>WordPress</b> के साथ जारी रखें</string>
<string name="msg_two_factor_authentication">दो तरीकों से प्रमाणीकरण</string>
<string name="msg__your_2fa_code">आपका 2FA कोड क्या है?</string>
<string name="msg_your_2fa_code">आपका 2FA कोड क्या है?</string>
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation -->
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
......@@ -200,6 +219,7 @@
<string name="msg_credentials_saved_successfully">प्रमाण पत्र सफलतापूर्वक सहेजे गए</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Preferences messages -->
<string name="msg_analytics_tracking">एनालिटिक्स ट्रैकिंग</string>
......@@ -315,7 +335,8 @@
<string name="alert_title_default_skin_tone">डिफ़ॉल्ट त्वचा टोन</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -324,8 +345,11 @@
<!--ChatRooms Headers-->
<string name="header_favorite">पसंदीदा</string>
<string name="header_channel">चैनलों</string>
<string name="msg_channels">चैनलों</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="header_private_groups">निजी समूहों</string>
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_direct_messages">प्रत्यक्ष संदेश</string>
<string name="header_live_chats">लाइव चैट</string>
<string name="header_unknown">अज्ञात</string>
......
......@@ -20,8 +20,9 @@
<string name="title_password">Password</string>
<string name="title_update_profile">Aggiorna Profilo</string>
<string name="title_create_channel">Crea Canale</string>
<string name="title_licence">licenza</string>
<string name="title_are_you_sure">Sei sicuro che vuoi uscire ?</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">licenza</string>
<string name="title_are_you_sure">Sei sicuro che vuoi uscire?</string>
<string name="title_channel_details">Allegare un file</string>
<string name="title_topic">Argomento</string>
<string name="title_announcement">Annuncio</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Mi dispiace, si è verificato un errore, per favore riprova</string>
<string name="msg_no_data_to_display">Nessun dato da visualizzare</string>
<string name="msg_check_this_out">Controllalo</string>
<string name="msg_share_using">Condividi utilizzando</string>
<string name="msg_profile_update_successfully">Aggiornamento del profilo con successo</string>
<string name="msg_profile_updated_successfully">Aggiornamento del profilo con successo</string>
<string name="msg_username">Nome utente</string>
<string name="msg_username_or_email">Nome utente o e-mail</string>
<string name="msg_password">Password</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">Avatar URL</string>
<string name="msg_or_continue_using_social_accounts">O continuare utilizzando un account social</string>
<string name="msg_new_user">Nuovo utente? %1$s</string>
<string name="msg_forgot__your_password">Hai dimenticato la tua password?</string>
<string name="msg_forgot_your_password">Hai dimenticato la tua password?</string>
<string name="msg_reset">Reimposta</string>
<string name="msg_check_your_email_to_reset_your_password">E-mail inviata! Controlla la tua casella di posta per reimpostare la password.</string>
<string name="msg_invalid_email">Per favore digita una e-mail valida</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">Documento non valido</string>
<string name="msg_invalid_server_url">URL del server non valido</string>
<string name="msg_content_description_log_in_using_facebook">Accedi usando Facebook</string>
<string name="msg_content_description_log_in_using_github">Accedi usando Github</string>
<string name="msg_content_description_log_in_using_github">Accedi usando GitHub</string>
<string name="msg_content_description_log_in_using_google">Accedi usando Google</string>
<string name="msg_content_description_log_in_using_linkedin">Accedi usando Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Accedi usando LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Accedi usando Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Accedi usando Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Accedi usando Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Accedi usando GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Accedi usando WordPress</string>
<string name="msg_content_description_send_message">Invia messaggio</string>
<string name="msg_content_description_show_more_login_options">Mostra ulteriori opzioni di accesso</string>
......@@ -154,13 +173,13 @@
<string name="msg_login_with_email">Accedi con <b>e-mail</b></string>
<string name="msg_create_account">Crea un utente</string>
<string name="msg_continue_with_facebook">Continua con <b>Facebook</b></string>
<string name="msg_continue_with_github">Continua con <b>Github</b></string>
<string name="msg_continue_with_github">Continua con <b>GitHub</b></string>
<string name="msg_continue_with_google">Continua con <b>Google</b></string>
<string name="msg_continue_with_linkedin">Continua con <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">Continua con <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">Continua con <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Continua con <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Autenticazione a 2 fattori (2FA)</string>
<string name="msg__your_2fa_code">Qual è il tuo codice 2FA ?</string>
<string name="msg_your_2fa_code">Qual è il tuo codice 2FA?</string>
<string name="msg_permalink_copied">Permalink copiato</string>
<string name="msg_no_topic">No topic</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement</string> <!-- TODO Add translation -->
......@@ -178,6 +197,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privato</string>
......@@ -192,7 +212,7 @@
<string name="msg_channel_created_successfully">Canale creato con successo</string>
<string name="msg_message_copied">Messaggio copiato</string>
<string name="msg_delete_message">Cancellare Messaggio</string>
<string name="msg_delete_description">Sei sicuro di voler eliminare questo messaggio ?</string>
<string name="msg_delete_description">Sei sicuro di voler eliminare questo messaggio?</string>
<string name="msg_view_more">vedere di più</string>
<string name="msg_view_less">vedere di meno</string>
<string name="msg_muted_on_this_channel">Sei disattivato su questo canale</string>
......@@ -311,7 +331,8 @@
<string name="alert_title_default_skin_tone">Default skin tone</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -320,7 +341,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">Canali</string>
<string name="msg_channels">Canali</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Gruppi Privati</string>
<string name="header_direct_messages">Messaggi Diretti</string>
<string name="header_live_chats">Stanza in diretta</string>
......
......@@ -19,7 +19,8 @@
<string name="title_admin_panel">管理パネル</string>
<string name="title_password">パスワードの変更</string>
<string name="title_update_profile">プロフィールの更新</string>
<string name="title_licence">Licence</string> <!-- TODO Add translation -->
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_create_channel">新しいチャネルを作成</string>
<string name="title_are_you_sure">本気ですか?</string>
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">エラーが発生しました。もう一度お試しください。</string>
<string name="msg_no_data_to_display">表示するデータがありません</string>
<string name="msg_check_this_out">これをチェックする</string>
<string name="msg_share_using">共有する</string>
<string name="msg_profile_update_successfully">プロフィールの更新に成功しました</string>
<string name="msg_profile_updated_successfully">プロフィールの更新に成功しました</string>
<string name="msg_username">ユーザー名</string>
<string name="msg_username_or_email">メールアドレスまたはユーザー名</string>
<string name="msg_password">パスワード</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">アバター URL</string>
<string name="msg_or_continue_using_social_accounts">またはソーシャルアカウントを使用する</string>
<string name="msg_new_user">新規ユーザー? %1$s</string>
<string name="msg_forgot__your_password">パスワードをお忘れですか?</string>
<string name="msg_forgot_your_password">パスワードをお忘れですか?</string>
<string name="msg_reset">リセット</string>
<string name="msg_check_your_email_to_reset_your_password">メールが送信されました! パスワードを変更するためには、受信ボックスを確認してください。</string>
<string name="msg_invalid_email">有効なメールアドレスを入力してください</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">無効なファイル</string>
<string name="msg_invalid_server_url">無効なサーバー URL</string>
<string name="msg_content_description_log_in_using_facebook">Facebookでログイン</string>
<string name="msg_content_description_log_in_using_github">Githubでログイン</string>
<string name="msg_content_description_log_in_using_github">GitHubでログイン</string>
<string name="msg_content_description_log_in_using_google">Googleでログイン</string>
<string name="msg_content_description_log_in_using_linkedin">Linkedinでログイン</string>
<string name="msg_content_description_log_in_using_linkedin">LinkedInでログイン</string>
<string name="msg_content_description_log_in_using_meteor">Meteorでログイン</string>
<string name="msg_content_description_log_in_using_twitter">Twitterでログイン</string>
<string name="msg_content_description_log_in_using_gitlab">Gitlabでログイン</string>
<string name="msg_content_description_log_in_using_gitlab">GitLabでログイン</string>
<string name="msg_content_description_log_in_using_wordpress">WordPressでログイン</string>
<string name="msg_content_description_send_message">メッセージを送信</string>
<string name="msg_content_description_show_more_login_options">その他ログインオプション</string>
......@@ -157,13 +176,13 @@
<string name="msg_login_with_email"><b>e-mail</b>でログイン</string>
<string name="msg_create_account">アカウントを作成</string>
<string name="msg_continue_with_facebook"><b>Facebook</b>でログイン</string>
<string name="msg_continue_with_github"><b>Github</b>でログイン</string>
<string name="msg_continue_with_github"><b>GitHub</b>でログイン</string>
<string name="msg_continue_with_google"><b>Google</b>でログイン</string>
<string name="msg_continue_with_linkedin"><b>Linkedin</b>でログイン</string>
<string name="msg_continue_with_linkedin"><b>LinkedIn</b>でログイン</string>
<string name="msg_continue_with_gitlab"><b>GitLab</b>でログイン</string>
<string name="msg_continue_with_wordpress"><b>WordPress</b>でログイン</string>
<string name="msg_two_factor_authentication">二要素認証</string>
<string name="msg__your_2fa_code">あなたの 2FA コードは何ですか?</string>
<string name="msg_your_2fa_code">あなたの 2FA コードは何ですか?</string>
<string name="msg_view_more">更に表示</string>
<string name="msg_view_less">隠す</string>
<string name="msg_muted_on_this_channel">あなたはこのチャンネルでミュートされています</string>
......@@ -181,6 +200,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">プライベート</string>
......@@ -314,7 +334,8 @@
<string name="alert_title_default_skin_tone">デフォルトスキントークン</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -323,7 +344,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">チャンネル</string>
<string name="msg_channels">チャンネル</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">プライベートグループ</string>
<string name="header_direct_messages">ダイレクトメッセージ</string>
<string name="header_live_chats">ライブチャット</string>
......
......@@ -16,11 +16,12 @@
<string name="title_preferences">Preferencias</string>
<string name="title_change_password">Alterar senha</string>
<string name="title_rate_us">nos avalie</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_admin_panel">Painel administrativo</string>
<string name="title_password">Alterar senha</string>
<string name="title_update_profile">Editar perfil</string>
<string name="title_create_channel">Criar chat</string>
<string name="title_licence">Licença</string>
<string name="title_license">Licença</string>
<string name="title_are_you_sure">Você tem certeza?</string>
<string name="title_channel_details">Detalhes do canal</string>
<string name="title_topic">Tópico</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favoritar</string>
<string name="action_remove_favorite">Remover favorito</string>
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Desculpe, ocorreu um erro, tente novamente</string>
<string name="msg_no_data_to_display">Nenhum dado para exibir</string>
<string name="msg_check_this_out">Veja isso</string>
<string name="msg_share_using">compartilhar usando</string>
<string name="msg_profile_update_successfully">Perfil atualizado com sucesso</string>
<string name="msg_profile_updated_successfully">Perfil atualizado com sucesso</string>
<string name="msg_username">nome de usuário</string>
<string name="msg_username_or_email">Nome de usuário ou email</string>
<string name="msg_password">Senha</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">URL do avatar</string>
<string name="msg_or_continue_using_social_accounts">Ou continue através de contas sociais</string>
<string name="msg_new_user">Novo usuário? %1$s</string>
<string name="msg_forgot__your_password">Esqueceu sua senha?</string>
<string name="msg_forgot_your_password">Esqueceu sua senha?</string>
<string name="msg_reset">Redefinir</string>
<string name="msg_check_your_email_to_reset_your_password">Email enviado! Verifique sua caixa de entrada para redefinir sua senha.</string>
<string name="msg_invalid_email">Por favor informe um e-mail válido</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">Arquivo inválido</string>
<string name="msg_invalid_server_url">URL de servidor inválido</string>
<string name="msg_content_description_log_in_using_facebook">Fazer login através do Facebook</string>
<string name="msg_content_description_log_in_using_github">Fazer login através do Github</string>
<string name="msg_content_description_log_in_using_github">Fazer login através do GitHub</string>
<string name="msg_content_description_log_in_using_google">Fazer login através do Google</string>
<string name="msg_content_description_log_in_using_linkedin">Fazer login através do Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Fazer login através do LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Fazer login através do Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Fazer login através do Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Fazer login através do Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Fazer login através do GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Fazer login através do WordPress</string>
<string name="msg_content_description_send_message">Enviar mensagem</string>
<string name="msg_content_description_show_more_login_options">Mostrar mais opções de login</string>
......@@ -159,13 +178,13 @@
<string name="msg_login_with_email">Fazer login com <b>e-mail</b></string>
<string name="msg_create_account">Criar conta</string>
<string name="msg_continue_with_facebook">Continuar com <b>Facebook</b></string>
<string name="msg_continue_with_github">Continuar com <b>Github</b></string>
<string name="msg_continue_with_github">Continuar com <b>GitHub</b></string>
<string name="msg_continue_with_google">Continuar com <b>Google</b></string>
<string name="msg_continue_with_linkedin">Continuar com <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">Continuar com <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">Continuar com <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Continuar com <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Autenticação de dois fatores</string>
<string name="msg__your_2fa_code">Qual é o seu código da autenticação de dois fatores?</string>
<string name="msg_your_2fa_code">Qual é o seu código da autenticação de dois fatores?</string>
<string name="msg_view_more">visualizar mais</string>
<string name="msg_view_less">visualizar menos</string>
<string name="msg_permalink_copied">Permalink copiado</string>
......@@ -182,10 +201,11 @@
<item quantity="other">%1$s reagiram com %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Credenciais salvas com sucesso</string>
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation -->
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_server">Servidor</string>
<string name="msg_add_new_server">Adicionar Novo Servidor</string>
<string name="msg_directory">Diretório</string>
<string name="msg_camera_permission_denied">A permissão da câmera é necessária</string>
<string name="msg_storage_permission_denied">A permissão de armazenamento é necessária</string>
<!-- Create channel messages -->
<string name="msg_private_channel">Privado</string>
......@@ -313,7 +333,8 @@
<string name="alert_title_default_skin_tone">Tom de pele padrão</string>
<!-- Sort and group -->
<string name="msg_sort_by">Ordenar por %1$s</string>
<string name="msg_sort_by_placeholder">Ordenar por %1$s</string>
<string name="msg_sort_by">Ordernar por</string>
<string name="msg_sort_by_activity">Atividade</string>
<string name="msg_sort_by_name">Nome</string>
<string name="msg_group_by_unread_on_top">Não lidas no topo</string>
......@@ -322,7 +343,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favoritos</string>
<string name="header_channel">Canais</string>
<string name="msg_channels">Canais</string>
<string name="msg_users">Usuários</string>
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Grupos Privados</string>
<string name="header_direct_messages">Mensagens diretas</string>
<string name="header_live_chats">Live Chats</string>
......
......@@ -16,11 +16,12 @@
<string name="title_preferences">Preferências</string>
<string name="title_change_password">Alterar palavra-passe</string>
<string name="title_rate_us">Avalie-nos</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_admin_panel">Painel de Administração</string>
<string name="title_password">Alterar palavra-passe</string>
<string name="title_update_profile">Actualizar perfil</string>
<string name="title_create_channel">Criar Canal</string>
<string name="title_licence">Licença</string>
<string name="title_license">Licença</string>
<string name="title_are_you_sure">Tem a certeza?</string>
<string name="title_channel_details">Detalhes do Canal</string>
<string name="title_topic">Tópico</string>
......@@ -57,27 +58,44 @@
<string name="action_register">Registar</string>
<string name="action_confirm">Confirmar</string>
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Lamentamos, ocorreu um erro, tente novamente</string>
<string name="msg_no_data_to_display">Sem dados para mostrar</string>
<string name="msg_check_this_out">Experimente isto</string>
<string name="msg_share_using">Partilhe usando</string>
<string name="msg_profile_update_successfully">Perfil actualizado com sucesso</string>
<string name="msg_profile_updated_successfully">Perfil actualizado com sucesso</string>
<string name="msg_username">utilizador</string>
<string name="msg_username_or_email">Utilizador ou e-mail</string>
<string name="msg_password">Palavra-passe</string>
......@@ -86,7 +104,7 @@
<string name="msg_avatar_url">URL do avatar</string>
<string name="msg_or_continue_using_social_accounts">Ou continue utilizando uma conta social</string>
<string name="msg_new_user">Novo utilizador? %1$s</string>
<string name="msg_forgot__your_password">Esqueceu a sua palavra-passe?</string>
<string name="msg_forgot_your_password">Esqueceu a sua palavra-passe?</string>
<string name="msg_reset">Repor</string>
<string name="msg_check_your_email_to_reset_your_password">E-mail enviado! Verifique a sua caixa de entrada para repor a sua palavra-passe.</string>
<string name="msg_invalid_email">Por favor introduza um endereço de e-mail válido</string>
......@@ -100,12 +118,12 @@
<string name="msg_invalid_file">Ficheiro inválido</string>
<string name="msg_invalid_server_url">URL de servidor inválido</string>
<string name="msg_content_description_log_in_using_facebook">Entre utilizando Facebook</string>
<string name="msg_content_description_log_in_using_github">Entre utilizando Github</string>
<string name="msg_content_description_log_in_using_github">Entre utilizando GitHub</string>
<string name="msg_content_description_log_in_using_google">Entre utilizando Google</string>
<string name="msg_content_description_log_in_using_linkedin">Entre utilizando LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Entre utilizando Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Entre utilizando Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Entre utilizando Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Entre utilizando GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Entre utilizando WordPress</string>
<string name="msg_content_description_send_message">Enviar mensagem</string>
<string name="msg_content_description_show_more_login_options">Mostrar mais opções de entrada</string>
......@@ -154,13 +172,13 @@
<string name="msg_login_with_email">Entre com <b>e-mail</b></string>
<string name="msg_create_account">Crie uma conta</string>
<string name="msg_continue_with_facebook">Continue com <b>Facebook</b></string>
<string name="msg_continue_with_github">Continue com <b>Github</b></string>
<string name="msg_continue_with_github">Continue com <b>GitHub</b></string>
<string name="msg_continue_with_google">Continue com <b>Google</b></string>
<string name="msg_continue_with_linkedin">Continue com <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">Continue com <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">Continue com <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Continue com <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Autenticação 2FA</string>
<string name="msg__your_2fa_code">Qual é o seu código 2FA?</string>
<string name="msg_your_2fa_code">Qual é o seu código 2FA?</string>
<string name="msg_permalink_copied">Link permanente copiado</string>
<string name="msg_no_topic">Nenhum tópico adicionado</string>
<string name="msg_no_announcement">Nenhum anúncio adicionado</string>
......@@ -177,6 +195,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privado</string>
......@@ -311,7 +330,8 @@
<string name="alert_title_default_skin_tone">Tom de pele padrão</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -320,7 +340,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favoritos</string>
<string name="header_channel">Canais</string>
<string name="msg_channels">Canais</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Grupos Privados</string>
<string name="header_direct_messages">Mensagens Directas</string>
<string name="header_live_chats">Chats ao Vivo</string>
......
......@@ -19,12 +19,13 @@
<string name="title_admin_panel">Панель админа</string>
<string name="title_password">Изменить пароль</string>
<string name="title_update_profile">Обновить профиль</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_create_channel">Создать новый канал</string>
<string name="title_channel_details">О канале</string>
<string name="title_topic">Тема</string>
<string name="title_announcement">Объявление</string>
<string name="title_description">Описание</string>
<string name="title_licence">Лицензия</string>
<string name="title_license">Лицензия</string>
<string name="title_are_you_sure">Вы уверены?</string>
<!-- Actions -->
......@@ -32,7 +33,7 @@
<string name="action_use_this_username">Использовать это имя</string>
<string name="action_terms_of_service">Условия использования</string>
<string name="action_privacy_policy">Политика конфиденциальности</string>
<string name="action_new_channel">New channel</string> <!-- TODO Translate -->
<string name="action_new_channel">Новый канал</string>
<string name="action_search">Поиск</string>
<string name="action_update">Обновить</string>
<string name="action_settings">Настройки</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">В избранное</string>
<string name="action_remove_favorite">Удалить из избранного</string>
<!-- Settings messages-->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<!-- Settings messages -->
<string name="msg_contact_us">Связаться с нами</string>
<string name="msg_language">Изменить язык</string>
<string name="msg_review_this_app">Оставить отзыв</string>
<string name="msg_share_this_app">Поделиться приложением</string>
<string name="msg_administration">Панель админа</string>
<string name="msg_license">Лицензия</string>
<string name="msg_app_version">Версия программы: %1$s (%2$d)</string>
<string name="msg_server_version">Версия сервера: %1$s</string>
<string name="msg_send_analytics">Отправка аналитики</string>
<string name="msg_logout_from_rocket_chat">Выйти из Rocket.Chat</string>
<string name="msg_delete_account">Удалить аккаунт</string>
<string name="msg_change_status">Изменить статус</string>
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Произошла ошибка, повторите попытку.</string>
<string name="msg_no_data_to_display">Нет данных для отображения</string>
<string name="msg_check_this_out">Проверь это</string>
<string name="msg_share_using">Совместное использование</string>
<string name="msg_profile_update_successfully">Профиль успешно обновлен</string>
<string name="msg_profile_updated_successfully">Профиль успешно обновлен</string>
<string name="msg_username">имя пользователя</string>
<string name="msg_username_or_email">имя пользователя или e-mail</string>
<string name="msg_password">пароль</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">URL аватара</string>
<string name="msg_or_continue_using_social_accounts">Или продолжить, используя социальные учетные записи</string>
<string name="msg_new_user">Новый пользователь? %1$s</string>
<string name="msg_forgot__your_password">Забыли пароль?</string>
<string name="msg_forgot_your_password">Забыли пароль?</string>
<string name="msg_reset">Сброс</string>
<string name="msg_check_your_email_to_reset_your_password">Письмо отправлено! Проверьте свой почтовый ящик, чтобы сбросить пароль.</string>
<string name="msg_invalid_email">Введите действующий e-mail</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">Неверный файл</string>
<string name="msg_invalid_server_url">Неверный URL-адрес сервера.</string>
<string name="msg_content_description_log_in_using_facebook">Войти с помощью Facebook</string>
<string name="msg_content_description_log_in_using_github">Войти с помощью Github</string>
<string name="msg_content_description_log_in_using_github">Войти с помощью GitHub</string>
<string name="msg_content_description_log_in_using_google">Войти с помощью Google</string>
<string name="msg_content_description_log_in_using_linkedin">Войти с помощью Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Войти с помощью LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Войти с помощью Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Войти с помощью Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Войти с помощью Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Войти с помощью GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Войти с помощью WordPress</string>
<string name="msg_content_description_send_message">Отправить сообщение</string>
<string name="msg_content_description_show_more_login_options">Больше параметров входа</string>
......@@ -156,13 +175,13 @@
<string name="msg_login_with_email">Войти с помощью <b>e-mail</b></string>
<string name="msg_create_account">Создать аккаунт</string>
<string name="msg_continue_with_facebook">Войти с помощью <b>Facebook</b></string>
<string name="msg_continue_with_github">Войти с помощью <b>Github</b></string>
<string name="msg_continue_with_github">Войти с помощью <b>GitHub</b></string>
<string name="msg_continue_with_google">Войти с помощью <b>Google</b></string>
<string name="msg_continue_with_linkedin">Войти с помощью <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">Войти с помощью <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">Войти с помощью <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Войти с помощью <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Двухфакторная аутентификация</string>
<string name="msg__your_2fa_code">Ваш код 2FA?</string>
<string name="msg_your_2fa_code">Ваш код 2FA?</string>
<string name="msg_view_more">больше</string>
<string name="msg_view_less">меньше</string>
<string name="msg_permalink_copied">Ссылка скопирована</string>
......@@ -180,10 +199,11 @@
<item quantity="many">%1$s реагируют с %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Учетные данные успешно сохранены</string>
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation -->
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_camera_permission_denied">Необходимо разрешение на использование камеры</string>
<string name="msg_storage_permission_denied">Необходимо разрешение на использование хранилища</string>
<string name="msg_server">Сервер</string>
<string name="msg_add_new_server">Добавить новый сервер</string>
<string name="msg_directory">Директория</string>
<!-- Create channel messages -->
<string name="msg_private_channel">Приватный</string>
......@@ -311,16 +331,20 @@
<string name="alert_title_default_skin_tone">Тон кожи по умолчанию</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
<string name="msg_group_by_type">Group by type</string> <!-- TODO Translate -->
<string name="msg_group_by_favorites">Group by favorites</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Сортировать по %1$s</string>
<string name="msg_sort_by">Сортировать по</string>
<string name="msg_sort_by_activity">Активности</string>
<string name="msg_sort_by_name">Имени</string>
<string name="msg_group_by_unread_on_top">Непрочитанные сверху</string>
<string name="msg_group_by_type">Группировать по типу</string>
<string name="msg_group_by_favorites">Группировать по избранному</string>
<!--ChatRooms Headers-->
<string name="header_favorite">Избранные</string>
<string name="header_channel">Каналы</string>
<string name="msg_channels">Каналы</string>
<string name="msg_users">Пользователи</string>
<string name="msg_search_for_global_users">Поиск глобальных пользователей</string>
<string name="msg_search_for_global_users_description">При активации станет возможен поиск любого пользователя из других компаний или серверов.</string>
<string name="header_private_groups">Приватные каналы</string>
<string name="header_direct_messages">Личная переписка</string>
<string name="header_live_chats">Живые чаты</string>
......
......@@ -20,7 +20,8 @@
<string name="title_password">Şifrenizi Değiştirin</string>
<string name="title_update_profile">Profilinizi Düzenleyin</string>
<string name="title_create_channel">Yeni Kanal Oluştur</string>
<string name="title_licence">Licence</string> <!-- TODO Add translation -->
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
<string name="title_topic">konu</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Üzgünüz! bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.</string>
<string name="msg_no_data_to_display">Görüntülenecek veri bulunmamaktadır.</string>
<string name="msg_check_this_out">bunu kontrol et</string>
<string name="msg_share_using">kullanarak paylaş</string>
<string name="msg_profile_update_successfully">Profil bilgileri başarıyla güncellenmiştir.</string>
<string name="msg_profile_updated_successfully">Profil bilgileri başarıyla güncellenmiştir.</string>
<string name="msg_username">kullanıcı adı</string>
<string name="msg_username_or_email">kullanıcı adı veya eposta</string>
<string name="msg_password">şifre</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">avatar URL</string>
<string name="msg_or_continue_using_social_accounts">Veya sosyal medya hesaplarınızdan birini kullanarak devam edin</string>
<string name="msg_new_user">Yeni kullanıcı? %1$s</string>
<string name="msg_forgot__your_password">Forgot your password?</string> <!-- TODO Add translation -->
<string name="msg_forgot_your_password">Forgot your password?</string> <!-- TODO Add translation -->
<string name="msg_reset">Sıfırla</string>
<string name="msg_check_your_email_to_reset_your_password">Eposta gönderilmiştir! Şifrenizi sıfırlamak için eposta kutunuzu kontrol ediniz.</string>
<string name="msg_invalid_email">Lütfen, geçerli bir eposta adresi giriniz</string>
......@@ -103,13 +122,13 @@
<string name="msg_invalid_file">Geçersiz dosya</string>
<string name="msg_invalid_server_url">Geçersiz sunucu adresi</string>
<string name="msg_content_description_log_in_using_facebook">Facebook Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_github">Github Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_github">GitHub Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_google">Google Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_linkedin">LinkedIn Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_meteor">Meteor Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_twitter">Twitter Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_gitlab">Gitlab Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_wordpress">Wordpress Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_gitlab">GitLab Hesabı ile Giriş Yap</string>
<string name="msg_content_description_log_in_using_wordpress">WordPress Hesabı ile Giriş Yap</string>
<string name="msg_content_description_send_message">Mesaj gönder</string>
<string name="msg_content_description_show_more_login_options">Show more login options</string> <!-- TODO Add translation -->
<string name="msg_content_description_show_attachment_options">Dosya eki seçeneklerini göster</string>
......@@ -157,13 +176,13 @@
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>Github</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>GitHub</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_google">Continue with <b>Google</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>Linkedin</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>LinkedIn</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_gitlab">Continue with <b>GitLab</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string> <!-- TODO Add translation -->
<string name="msg_two_factor_authentication">Two-factor Authentication</string> <!-- TODO Add translation -->
<string name="msg__your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation -->
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
......@@ -180,7 +199,7 @@
<string name="msg_channel_created_successfully">Kanal başarıyla oluşturuldu</string>
<string name="msg_message_copied">Mesaj kopyalandı</string>
<string name="msg_delete_message">Mesajı Sil</string>
<string name="msg_delete_description">Bu mesajı silmek istediğinizden emin misiniz</string>
<string name="msg_delete_description">Bu mesajı silmek istediğinizden emin misiniz?</string>
<string name="msg_view_more">Daha fazla göster</string>
<string name="msg_view_less">Daha az göster</string>
<string name="msg_permalink_copied">Permalink copied</string> <!-- TODO - Add proper translation -->
......@@ -199,6 +218,7 @@
<string name="msg_credentials_saved_successfully">Kimlik bilgileri başarıyla kaydedildi</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Preferences messages -->
<string name="msg_analytics_tracking">İstatistik takibi</string>
......@@ -315,7 +335,8 @@
<string name="alert_title_default_skin_tone">Varsayılan tasarım tonu</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -324,7 +345,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">Kanallar</string>
<string name="msg_channels">Kanallar</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Gizli Gruplar</string>
<string name="header_direct_messages">Direkt Mesajlar</string>
<string name="header_live_chats">Canlı Sohbetler</string>
......
......@@ -20,7 +20,8 @@
<string name="title_password">Змінити пароль</string>
<string name="title_update_profile">Оновити профіль</string>
<string name="title_create_channel">Створити новий канал</string>
<string name="title_licence">Licence</string> <!-- TODO Add translation -->
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
<string name="title_topic">Тема</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Сталася помилка, спробуйте ще раз.</string>
<string name="msg_no_data_to_display">Немає даних для відображення</string>
<string name="msg_check_this_out">Перевір це</string>
<string name="msg_share_using">поділитися використанням</string>
<string name="msg_profile_update_successfully">"Профіль оновлено успішно "</string>
<string name="msg_profile_updated_successfully">"Профіль оновлено успішно "</string>
<string name="msg_username">Ім\'я користувача</string>
<string name="msg_username_or_email">Ім\'я користувача або e-mail</string>
<string name="msg_password">пароль</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">URL аватара</string>
<string name="msg_or_continue_using_social_accounts">Або продовжити, за допомогою акаунта у соціальних мережах</string>
<string name="msg_new_user">Новий користувач? %1$s</string>
<string name="msg_forgot__your_password">Забули пароль? %1$s</string>
<string name="msg_forgot_your_password">Забули пароль? %1$s</string>
<string name="msg_reset">Скинути</string>
<string name="msg_check_your_email_to_reset_your_password">Лист було відправлено! Перевірте свою поштову скриньку, щоб скинути пароль.</string>
<string name="msg_invalid_email">Введіть діючий e-mail</string>
......@@ -103,13 +122,13 @@
<string name="msg_invalid_file">Неправильний файл</string>
<string name="msg_invalid_server_url">Неправильний URL-адреса сервера.</string>
<string name="msg_content_description_log_in_using_facebook">Увійти за допомогою Facebook</string>
<string name="msg_content_description_log_in_using_github">Увійти за допомогою Github</string>
<string name="msg_content_description_log_in_using_github">Увійти за допомогою GitHub</string>
<string name="msg_content_description_log_in_using_google">Увійти за допомогою Google</string>
<string name="msg_content_description_log_in_using_linkedin">Увійти за допомогою Linkedin</string>
<string name="msg_content_description_log_in_using_linkedin">Увійти за допомогою LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Увійти за допомогою Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Увійти за допомогою Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Увійти за допомогою Gitlab</string>
<string name="msg_content_description_log_in_using_wordpress">Увійти за допомогою Wordpress</string>
<string name="msg_content_description_log_in_using_gitlab">Увійти за допомогою GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Увійти за допомогою WordPress</string>
<string name="msg_content_description_send_message">Надіслати повідомлення</string>
<string name="msg_content_description_show_more_login_options">Show more login options</string> <!-- TODO Translate-->
<string name="msg_content_description_show_attachment_options">Показати параметри долучення</string>
......@@ -155,13 +174,13 @@
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>Github</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>GitHub</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_google">Continue with <b>Google</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>Linkedin</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>LinkedIn</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_gitlab">Continue with <b>GitLab</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string> <!-- TODO Add translation -->
<string name="msg_two_factor_authentication">Two-factor Authentication</string> <!-- TODO Add translation -->
<string name="msg__your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_view_more">view more</string> <!-- TODO - Add proper translation -->
<string name="msg_view_less">view less</string> <!-- TODO - Add proper translation -->
<string name="msg_permalink_copied">Permalink copied</string> <!-- TODO - Add proper translation -->
......@@ -183,6 +202,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Приватний</string>
......@@ -310,7 +330,8 @@
<string name="alert_title_default_skin_tone">Тон шкіри за замовчуванням</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -319,7 +340,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">Канали</string>
<string name="msg_channels">Канали</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">Приватні канали</string>
<string name="header_direct_messages">Особисті повідомлення</string>
<string name="header_live_chats">Живі чати</string>
......
......@@ -20,9 +20,10 @@
<string name="title_password">修改密码</string>
<string name="title_update_profile">更新资料</string>
<string name="title_create_channel">新建频道</string>
<string name="title_licence">许可证</string>
<string name="title_license">许可证</string>
<string name="title_are_you_sure">你确定?</string>
<string name="title_channel_details">频道信息</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_topic">主题</string>
<string name="title_announcement">公告</string>
<string name="title_description">描述</string>
......@@ -59,27 +60,45 @@
<string name="action_favorite">Favorite</string> <!-- TODO Add translation -->
<string name="action_remove_favorite">Remove favorite</string> <!-- TODO Add translation -->
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">对不起发生了错误,请重试</string>
<string name="msg_no_data_to_display">没有数据显示</string>
<string name="msg_check_this_out">检查这里</string>
<string name="msg_share_using">分享使用</string>
<string name="msg_profile_update_successfully">资料更新成功</string>
<string name="msg_profile_updated_successfully">资料更新成功</string>
<string name="msg_username">用户名</string>
<string name="msg_username_or_email">用户名或邮箱</string>
<string name="msg_password">密码</string>
......@@ -88,7 +107,7 @@
<string name="msg_avatar_url">头像网址</string>
<string name="msg_or_continue_using_social_accounts">或继续使用社交账号</string>
<string name="msg_new_user">新用户? %1$s</string>
<string name="msg_forgot__your_password">忘记密码?</string>
<string name="msg_forgot_your_password">忘记密码?</string>
<string name="msg_reset">重置</string>
<string name="msg_check_your_email_to_reset_your_password">邮件已发送!请根据邮件提示重置密码.</string>
<string name="msg_invalid_email">请输入有效邮箱地址</string>
......@@ -103,12 +122,12 @@
<string name="msg_invalid_file">无效文件</string>
<string name="msg_invalid_server_url">无效的服务器地址</string>
<string name="msg_content_description_log_in_using_facebook">使用Facebook账户登录</string>
<string name="msg_content_description_log_in_using_github">使用Github账户登录</string>
<string name="msg_content_description_log_in_using_github">使用GitHub账户登录</string>
<string name="msg_content_description_log_in_using_google">使用Google账户登录</string>
<string name="msg_content_description_log_in_using_linkedin">使用Linkedin账户登录</string>
<string name="msg_content_description_log_in_using_linkedin">使用LinkedIn账户登录</string>
<string name="msg_content_description_log_in_using_meteor">使用Meteor账户登录</string>
<string name="msg_content_description_log_in_using_twitter">使用Twitter账户登录</string>
<string name="msg_content_description_log_in_using_gitlab">使用Gitlab账户登录</string>
<string name="msg_content_description_log_in_using_gitlab">使用GitLab账户登录</string>
<string name="msg_content_description_log_in_using_wordpress">使用WordPress账户登录</string>
<string name="msg_content_description_send_message">发送消息</string>
<string name="msg_content_description_show_more_login_options">显示更多登录选项</string>
......@@ -154,13 +173,13 @@
<string name="msg_login_with_email">使用<b>邮箱</b>登录</string>
<string name="msg_create_account">新建账户</string>
<string name="msg_continue_with_facebook">使用<b>Facebook</b>账号继续</string>
<string name="msg_continue_with_github">使用<b>Github</b>账号继续</string>
<string name="msg_continue_with_github">使用<b>GitHub</b>账号继续</string>
<string name="msg_continue_with_google">使用<b>Google</b>账号继续</string>
<string name="msg_continue_with_linkedin">使用<b>Linkedin</b>账号继续</string>
<string name="msg_continue_with_linkedin">使用<b>LinkedIn</b>账号继续</string>
<string name="msg_continue_with_gitlab">使用<b>GitLab</b>账号继续</string>
<string name="msg_continue_with_wordpress">使用<b>WordPress</b>账号继续</string>
<string name="msg_two_factor_authentication">两步认证</string>
<string name="msg__your_2fa_code">什么是2FA 码?</string>
<string name="msg_your_2fa_code">什么是2FA 码?</string>
<string name="msg_permalink_copied">永久链接已拷贝</string>
<string name="msg_no_topic">No topic</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement</string> <!-- TODO Add translation -->
......@@ -178,6 +197,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">隐私</string>
......@@ -192,7 +212,7 @@
<string name="msg_channel_created_successfully">成功建立频道</string>
<string name="msg_message_copied">消息已拷贝</string>
<string name="msg_delete_message">删除消息</string>
<string name="msg_delete_description">您确定要删除这条消息吗</string>
<string name="msg_delete_description">您确定要删除这条消息吗?</string>
<string name="msg_view_more">显示更多</string>
<string name="msg_view_less">显示更少</string>
<string name="msg_muted_on_this_channel">您被禁言了</string>
......@@ -311,7 +331,8 @@
<string name="alert_title_default_skin_tone">默认皮肤颜色</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -320,7 +341,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">频道</string>
<string name="msg_channels">频道</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">私人组</string>
<string name="header_direct_messages">直接对话</string>
<string name="header_live_chats">Live 对话</string>
......
......@@ -20,7 +20,7 @@
<string name="title_password">修改密碼</string>
<string name="title_update_profile">更新資料</string>
<string name="title_create_channel">建立新頻道</string>
<string name="title_licence">許可</string>
<string name="title_license">許可</string>
<string name="title_are_you_sure">確定嗎?</string>
<string name="title_channel_details">頻道訊息</string>
<string name="title_topic">主題</string>
......@@ -59,19 +59,18 @@
<string name="action_favorite">加入蒐藏</string>
<string name="action_remove_favorite">從蒐藏中移除</string>
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate -->
<string name="msg_language">Language</string> <!-- TODO Translate -->
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate -->
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate -->
<string name="msg_administration">Administration</string> <!-- TODO Translate -->
<string name="msg_licence">Licence</string> <!-- TODO Translate -->
<string name="msg_license">License</string> <!-- TODO Translate -->
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate -->
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate -->
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<!-- Regular information messages -->
......@@ -79,7 +78,7 @@
<string name="msg_no_data_to_display">沒有資料</string>
<string name="msg_check_this_out">請檢查這裡</string>
<string name="msg_share_using">分享使用</string>
<string name="msg_profile_update_successfully">資料更新成功</string>
<string name="msg_profile_updated_successfully">資料更新成功</string>
<string name="msg_username">使用者名稱</string>
<string name="msg_username_or_email">使用者名稱或是電子信箱</string>
<string name="msg_password">密碼</string>
......@@ -88,7 +87,7 @@
<string name="msg_avatar_url">頭貼網址</string>
<string name="msg_or_continue_using_social_accounts">或繼續使用社交帳號</string>
<string name="msg_new_user">新的使用者? %1$s</string>
<string name="msg_forgot__your_password">忘記密碼?</string>
<string name="msg_forgot_your_password">忘記密碼?</string>
<string name="msg_reset">重置</string>
<string name="msg_check_your_email_to_reset_your_password">郵件已發送!請根據電子郵件提示重新設定密碼.</string>
<string name="msg_invalid_email">請輸入有效的電子信箱</string>
......@@ -103,12 +102,12 @@
<string name="msg_invalid_file">無效的檔案</string>
<string name="msg_invalid_server_url">無效的伺服器地址</string>
<string name="msg_content_description_log_in_using_facebook">使用Facebook帳戶登入</string>
<string name="msg_content_description_log_in_using_github">使用Github帳戶登入</string>
<string name="msg_content_description_log_in_using_github">使用GitHub帳戶登入</string>
<string name="msg_content_description_log_in_using_google">使用Google帳戶登入</string>
<string name="msg_content_description_log_in_using_linkedin">使用Linkedin帳戶登入</string>
<string name="msg_content_description_log_in_using_linkedin">使用LinkedIn帳戶登入</string>
<string name="msg_content_description_log_in_using_meteor">使用Meteor帳戶登入</string>
<string name="msg_content_description_log_in_using_twitter">使用Twitter帳戶登入</string>
<string name="msg_content_description_log_in_using_gitlab">使用Gitlab帳戶登入</string>
<string name="msg_content_description_log_in_using_gitlab">使用GitLab帳戶登入</string>
<string name="msg_content_description_log_in_using_wordpress">使用WordPress帳戶登入</string>
<string name="msg_content_description_send_message">發送訊息</string>
<string name="msg_content_description_show_more_login_options">顯示更多登入選像</string>
......@@ -154,13 +153,13 @@
<string name="msg_login_with_email">使用<b>信箱</b>登入</string>
<string name="msg_create_account">新增帳戶</string>
<string name="msg_continue_with_facebook">使用<b>Facebook</b>帳號繼續</string>
<string name="msg_continue_with_github">使用<b>Github</b>帳號繼續</string>
<string name="msg_continue_with_github">使用<b>GitHub</b>帳號繼續</string>
<string name="msg_continue_with_google">使用<b>Google</b>帳號繼續</string>
<string name="msg_continue_with_linkedin">使用<b>Linkedin</b>帳號繼續</string>
<string name="msg_continue_with_linkedin">使用<b>LinkedIn</b>帳號繼續</string>
<string name="msg_continue_with_gitlab">使用<b>GitLab</b>帳號繼續</string>
<string name="msg_continue_with_wordpress">使用<b>WordPress</b>帳號繼續</string>
<string name="msg_two_factor_authentication">兩步驟認證(2FA)</string>
<string name="msg__your_2fa_code">什麼是2FA?</string>
<string name="msg_your_2fa_code">什麼是2FA?</string>
<string name="msg_permalink_copied">永久連結已經複製</string>
<string name="msg_no_topic">沒有主題</string>
<string name="msg_no_announcement">沒有公告</string>
......@@ -178,6 +177,7 @@
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<string name="msg_directory">Directory</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">隱私</string>
......@@ -311,7 +311,8 @@
<string name="alert_title_default_skin_tone">預設主題顏色</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate -->
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate -->
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate -->
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate -->
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate -->
......@@ -320,7 +321,10 @@
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string><!-- TODO - Add proper translation -->
<string name="header_channel">頻道</string>
<string name="msg_channels">頻道</string>
<string name="msg_users">Users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate -->
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate -->
<string name="header_private_groups">私人群組</string>
<string name="header_direct_messages">直接對話</string>
<string name="header_live_chats">Live 對話</string>
......
......@@ -32,8 +32,9 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="title_password">Change Password</string>
<string name="title_update_profile">Update profile</string>
<string name="title_create_channel">Create Channel</string>
<string name="title_licence">Licence</string>
<string name="title_license">License</string>
<string name="title_are_you_sure">Are you sure?</string>
<string name="title_choose_language">Choose Language</string>
<string name="title_channel_details">Channel Details</string>
<string name="title_topic">Topic</string>
<string name="title_announcement">Announcement</string>
......@@ -71,27 +72,45 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="action_favorite">Favorite</string>
<string name="action_remove_favorite">Remove favorite</string>
<!-- Settings messages-->
<!-- Settings messages -->
<string name="msg_contact_us">Contact us</string>
<string name="msg_language">Language</string>
<string name="msg_review_this_app">Review this app</string>
<string name="msg_share_this_app">Share this app</string>
<string name="msg_administration">Administration</string>
<string name="msg_licence">Licence</string>
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate -->
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate -->
<string name="msg_license">License</string>
<string name="msg_app_version">Version: %1$s (%2$d)</string>
<string name="msg_server_version">Server version: %1$s</string>
<string name="msg_send_analytics">Send analytics</string>
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string>
<string name="msg_delete_account">Delete account</string>
<string name="msg_change_status">Change status</string>
<string-array name="languages">
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages -->
<string name="msg_generic_error">Sorry, an error has occurred, please try again</string>
<string name="msg_no_data_to_display">No data to display</string>
<string name="msg_check_this_out">Check this out</string>
<string name="msg_share_using">Share using</string>
<string name="msg_profile_update_successfully">Profile update successfully</string>
<string name="msg_profile_updated_successfully">Profile updated successfully</string>
<string name="msg_username">username</string>
<string name="msg_username_or_email">Username or email</string>
<string name="msg_password">Password</string>
......@@ -100,7 +119,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_avatar_url">avatar URL</string>
<string name="msg_or_continue_using_social_accounts">Or continue using social accounts</string>
<string name="msg_new_user">New user? %1$s</string>
<string name="msg_forgot__your_password">Forgot your password?</string>
<string name="msg_forgot_your_password">Forgot your password?</string>
<string name="msg_reset">Reset</string>
<string name="msg_check_your_email_to_reset_your_password">Email sent! Check your inbox to reset your password.</string>
<string name="msg_invalid_email">Please type a valid e-mail</string>
......@@ -116,12 +135,12 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_invalid_file">Invalid file</string>
<string name="msg_invalid_server_url">Invalid server URL</string>
<string name="msg_content_description_log_in_using_facebook">Login using Facebook</string>
<string name="msg_content_description_log_in_using_github">Login using Github</string>
<string name="msg_content_description_log_in_using_github">Login using GitHub</string>
<string name="msg_content_description_log_in_using_google">Login using Google</string>
<string name="msg_content_description_log_in_using_linkedin">Login using LinkedIn</string>
<string name="msg_content_description_log_in_using_meteor">Login using Meteor</string>
<string name="msg_content_description_log_in_using_twitter">Login using Twitter</string>
<string name="msg_content_description_log_in_using_gitlab">Login using Gitlab</string>
<string name="msg_content_description_log_in_using_gitlab">Login using GitLab</string>
<string name="msg_content_description_log_in_using_wordpress">Login using WordPress</string>
<string name="msg_content_description_send_message">Send message</string>
<string name="msg_content_description_show_more_login_options">Show more login options</string>
......@@ -170,13 +189,13 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_login_with_email">Login with <b>e-mail</b></string>
<string name="msg_create_account">Create an account</string>
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string>
<string name="msg_continue_with_github">Continue with <b>Github</b></string>
<string name="msg_continue_with_github">Continue with <b>GitHub</b></string>
<string name="msg_continue_with_google">Continue with <b>Google</b></string>
<string name="msg_continue_with_linkedin">Continue with <b>Linkedin</b></string>
<string name="msg_continue_with_linkedin">Continue with <b>LinkedIn</b></string>
<string name="msg_continue_with_gitlab">Continue with <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Two-factor Authentication</string>
<string name="msg__your_2fa_code">What’s your 2FA code?</string>
<string name="msg_your_2fa_code">What’s your 2FA code?</string>
<string name="msg_permalink_copied">Permalink copied</string>
<string name="msg_no_topic">No topic</string>
<string name="msg_no_announcement">No announcement</string>
......@@ -194,6 +213,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string>
<string name="msg_server">Server</string>
<string name="msg_add_new_server">Add New Server</string>
<string name="msg_directory">Directory</string>
<!-- Create channel messages -->
<string name="msg_private_channel">Private</string>
......@@ -208,7 +228,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_channel_created_successfully">Channel created successfully</string>
<string name="msg_message_copied">Message copied</string>
<string name="msg_delete_message">Delete Message</string>
<string name="msg_delete_description">Are you sure you want to delete this message</string>
<string name="msg_delete_description">Are you sure you want to delete this message?</string>
<string name="msg_view_more">view more</string>
<string name="msg_view_less">view less</string>
<string name="msg_muted_on_this_channel">You are muted on this channel</string>
......@@ -327,7 +347,8 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="alert_title_default_skin_tone">Default skin tone</string>
<!-- Sort and group -->
<string name="msg_sort_by">Sort by %1$s</string>
<string name="msg_sort_by_placeholder">Sort by %1$s</string>
<string name="msg_sort_by">Sort by</string>
<string name="msg_sort_by_activity">Activity</string>
<string name="msg_sort_by_name">Name</string>
<string name="msg_group_by_unread_on_top">Unread on top</string>
......@@ -336,7 +357,10 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<!--ChatRooms Headers-->
<string name="header_favorite">Favorites</string>
<string name="header_channel">Channels</string>
<string name="msg_channels">Channels</string>
<string name="msg_users">Users</string>
<string name="msg_search_for_global_users">Search for global users</string>
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string>
<string name="header_private_groups">Private Groups</string>
<string name="header_direct_messages">Direct Messages</string>
<string name="header_live_chats">Live Chats</string>
......@@ -356,9 +380,10 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<!-- User Details -->
<string name="timezone">Timezone</string>
<string name="status" translatable="false">Status: %1$s</string>
<string name="user_detail_status" translatable="false">Status</string>
<!-- Report -->
<string name="submit">Submit</string>
<string name="required">*required</string>
<string name="report_sent">Your report has been sent!</string>
</resources>
</resources>
\ No newline at end of file
......@@ -5,7 +5,7 @@ import chat.rocket.android.dagger.injector.AndroidWorkerInjection
import chat.rocket.android.extensions.await
import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extensions.registerPushToken
import chat.rocket.common.util.ifNull
import com.google.firebase.iid.FirebaseInstanceId
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment