...
 
Commits (32)
stages:
- playstore
variables:
LANG: "en_US.UTF-8"
LC_ALL: "en_US.UTF-8"
before_script:
- bundle update
playstore:
tags:
- android
stage: playstore
script:
- bundle exec fastlane playstore
only:
- develop
- master
environment:
name: playstore
artifacts:
name: "chat_playstore_$MAJOR.$MINOR.$PATCH-$CI_COMMIT_REF_NAME+$CI_PIPELINE_IID.apk"
paths:
- ./*.apk
expire_in: 4 weeks
Changes in Liberty Chat 0.0.1 (2019-XX-XX)
===================================================
Other changes:
- Added Purism branded app flavour
- Integrated with gitlab CI/CD
Changes in Riot 0.8.19 (2018-XX-XX)
===================================================
......
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.0)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
atomos (0.1.3)
babosa (1.0.2)
claide (1.0.2)
colored (1.2)
colored2 (3.1.2)
commander-fastlane (4.4.6)
highline (~> 1.7.2)
declarative (0.0.10)
declarative-option (0.1.0)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.5.0)
emoji_regex (0.1.1)
excon (0.62.0)
faraday (0.15.4)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
faraday_middleware (0.12.2)
faraday (>= 0.7.4, < 1.0)
fastimage (2.1.5)
fastlane (2.109.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
babosa (>= 1.0.2, < 2.0.0)
bundler (>= 1.12.0, < 2.0.0)
colored
commander-fastlane (>= 4.4.6, < 5.0.0)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (~> 0.1)
excon (>= 0.45.0, < 1.0.0)
faraday (~> 0.9)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 0.9)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-api-client (>= 0.21.2, < 0.24.0)
highline (>= 1.7.2, < 2.0.0)
json (< 3.0.0)
mini_magick (~> 4.5.1)
multi_json
multi_xml (~> 0.5)
multipart-post (~> 2.0.0)
plist (>= 3.1.0, < 4.0.0)
public_suffix (~> 2.0.0)
rubyzip (>= 1.2.2, < 2.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
slack-notifier (>= 2.0.0, < 3.0.0)
terminal-notifier (>= 1.6.2, < 2.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.6.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-api-client (0.23.9)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.5, < 0.7.0)
httpclient (>= 2.8.1, < 3.0)
mime-types (~> 3.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
signet (~> 0.9)
googleauth (0.6.7)
faraday (~> 0.12)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (~> 0.7)
highline (1.7.10)
http-cookie (1.0.3)
domain_name (~> 0.5)
httpclient (2.8.3)
json (2.1.0)
jwt (2.1.0)
memoist (0.16.0)
mime-types (3.2.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812)
mini_magick (4.5.1)
multi_json (1.13.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
nanaimo (0.2.6)
naturally (2.2.0)
os (1.0.0)
plist (3.4.0)
public_suffix (2.0.5)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rouge (2.0.7)
rubyzip (1.2.2)
security (0.1.3)
signet (0.11.0)
addressable (~> 2.3)
faraday (~> 0.9)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.5)
CFPropertyList
naturally
slack-notifier (2.3.2)
terminal-notifier (1.8.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
tty-cursor (0.6.0)
tty-screen (0.6.5)
tty-spinner (0.9.0)
tty-cursor (~> 0.6.0)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
unicode-display_width (1.4.0)
word_wrap (1.0.0)
xcodeproj (1.7.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.2.6)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.0)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
ruby
DEPENDENCIES
fastlane
BUNDLED WITH
1.17.1
......@@ -4,8 +4,8 @@ buildscript {
ext.kotlin_version = '1.2.30'
repositories {
jcenter()
google()
jcenter()
maven {
url "https://plugins.gradle.org/m2/"
}
......@@ -23,20 +23,22 @@ buildscript {
// global properties used in sub modules
ext {
versionCodeProp = 81900
versionNameProp = "0.8.19"
versionBuild = System.getenv("BUILD_NUMBER") as Integer ?: 0
versionMajor = System.getenv("MAJOR") as Integer ?: 0
versionMinor = System.getenv("MINOR") as Integer ?: 0
versionPatch = System.getenv("PATCH") as Integer ?: 0
versionBuild = System.getenv("CI_PIPELINE_IID") as Integer ?: 0
versionCodeProp = 100000 + versionBuild
versionNameProp = String.valueOf(versionMajor) + "." + String.valueOf(versionMinor) + "." + String.valueOf(versionPatch)
buildNumberProp = "${versionBuild}"
}
allprojects {
repositories {
google()
jcenter()
maven {
url "https://maven.google.com"
}
google()
}
}
......
json_key_file("/Users/gitlabrunner/Nextcloud/LibertyApps/PlayStore/secrets/api-6019011998585182423-754965-83a427df00b1.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name("purism.liberty.chat") # e.g. com.krausefx.app
default_platform(:android)
platform :android do
before_all do
ENV["RIOT_URL"] = "" # Webhool URL created in Riot
end
desc "Build and deploy a new version for PlayStore"
lane :playstore do
gradle(task: "clean")
gradle(
task: "assemble",
build_type: "Release",
flavor: "applibertychat",
print_command: true
)
# Rename and copy the apk to root folder
file_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]
file_name = file_path.gsub(/\/.*\//,"")
target_filename = "chat_playstore_" + ENV["MAJOR"] + "." + ENV["MINOR"] + "." + ENV["PATCH"] + "-" + ENV["CI_COMMIT_REF_NAME"] + "+" + ENV["CI_PIPELINE_IID"] + ".apk"
target_path = "../" + target_filename
sh "echo Copying " + file_name + " to: " + target_path
sh "cp " + file_path + " " + target_path
upload_to_play_store(
track: "internal"
)
end
desc "Build and deploy a new version to F-Droid"
lane :fdroid do
gradle(
task: "assemble",
build_type: "Release",
flavor: "applibertychatfdroid"
)
upload_to_play_store
end
after_all do |lane|
# This block is called only if the executed lane was successfull
end
error do |lane, exception|
if is_ci
# send a message to Riot room that includes exception.message
end
end
end
fastlane documentation
================
# Installation
Make sure you have the latest version of the Xcode command line tools installed:
```
xcode-select --install
```
Install _fastlane_ using
```
[sudo] gem install fastlane -NV
```
or alternatively using `brew cask install fastlane`
# Available Actions
## Android
### android playstore
```
fastlane android playstore
```
Build and deploy a new version for PlayStore
### android fdroid
```
fastlane android fdroid
```
Build and deploy a new version to F-Droid
----
This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
- Base version of Riot.im 0.8.19
- Created "Liberty Chat" flavour per README.md instructions
- Changed app name to "Liberty Chat"
- Changed app launch icon to liberty chat temporary placeholder icon
- Changed sign-in screen icon to temporary placeholder icon
- Signed and uploaded to PlayStore manually
\ No newline at end of file
Text, voice, and video chat for Purism's Liberty services.
\ No newline at end of file
Text, voice, and video chat for Purism's Liberty services.
\ No newline at end of file
Liberty Chat
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="fastlane.lanes">
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.005035">
</testcase>
<testcase classname="fastlane.lanes" name="1: gradle" time="2.088739">
</testcase>
<testcase classname="fastlane.lanes" name="2: gradle" time="37.940434">
</testcase>
<testcase classname="fastlane.lanes" name="3: is_ci" time="0.001376">
</testcase>
</testsuite>
</testsuites>
......@@ -71,6 +71,7 @@ android {
resValue "string", "git_branch_name", "\"${gitBranchName()}\""
resValue "string", "build_number", rootProject.ext.buildNumberProp
minifyEnabled false
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
......@@ -92,6 +93,7 @@ android {
// use the version name
versionCode rootProject.ext.versionCodeProp
versionName rootProject.ext.versionNameProp
buildConfigField "boolean", "ALLOW_ANALYTICS", "true"
buildConfigField "boolean", "ALLOW_FCM_USE", "true"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"G\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"GooglePlay\""
......@@ -102,10 +104,33 @@ android {
// use the version name
versionCode rootProject.ext.versionCodeProp
versionName rootProject.ext.versionNameProp
buildConfigField "boolean", "ALLOW_ANALYTICS", "true"
buildConfigField "boolean", "ALLOW_FCM_USE", "false"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"F\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"FDroid\""
}
applibertychat {
applicationId "purism.liberty.chat"
// use the version name
versionCode rootProject.ext.versionCodeProp
versionName rootProject.ext.versionNameProp
buildConfigField "boolean", "ALLOW_ANALYTICS", "false"
buildConfigField "boolean", "ALLOW_FCM_USE", "true"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"LCG\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"Liberty Chat GooglePlay\""
}
applibertychatfdroid {
applicationId "purism.liberty.chat"
// use the version name
versionCode rootProject.ext.versionCodeProp
versionName rootProject.ext.versionNameProp
buildConfigField "boolean", "ALLOW_ANALYTICS", "false"
buildConfigField "boolean", "ALLOW_FCM_USE", "false"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"LCF\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"Liberty Chat FDroid\""
}
}
lintOptions {
......@@ -252,6 +277,10 @@ dependencies {
// fdroid flavor only
// applibertychat flavor only
applibertychatImplementation 'com.google.firebase:firebase-core:16.0.4'
applibertychatImplementation 'com.google.firebase:firebase-messaging:17.3.4'
// Test
testImplementation 'junit:junit:4.12'
}
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<application tools:replace="android:icon"
android:icon="@mipmap/ic_launcher">
<!-- Firebase components -->
<meta-data
android:name="firebase_analytics_collection_deactivated"
android:value="true" />
<service android:name="im.vector.push.fcm.VectorFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
{
"project_info": {
"project_number": "54773557002",
"firebase_url": "https://liberty-chat-857f2.firebaseio.com",
"project_id": "liberty-chat-857f2",
"storage_bucket": "liberty-chat-857f2.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:54773557002:android:1e752ef3160dfa43",
"android_client_info": {
"package_name": "purism.liberty.chat"
}
},
"oauth_client": [
{
"client_id": "54773557002-dvgturkm801gvmcjj98nm0kjtutu0aic.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyC2UzWz32Nt2zerGhCFQyJs7VBZ91Ib2_8"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}
\ No newline at end of file
/*
* Copyright 2014 OpenMarket Ltd
* Copyright 2017 Vector Creations Ltd
* Copyright 2018 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.push.fcm;
import android.app.Activity;
import android.content.Context;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
import org.matrix.androidsdk.util.Log;
/**
* This class store the FCM token in SharedPrefs and ensure this token is retrieved.
* It has an alter ego in the fdroid variant.
*/
public class FcmHelper {
private static final String LOG_TAG = FcmHelper.class.getSimpleName();
private static final String PREFS_KEY_FCM_TOKEN = "FCM_TOKEN";
/**
* Retrieves the FCM registration token.
*
* @return the FCM token or null if not received from FCM
*/
@Nullable
public static String getFcmToken(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getString(PREFS_KEY_FCM_TOKEN, null);
}
/**
* Store FCM token to the SharedPrefs
*
* @param context android context
* @param token the token to store
*/
public static void storeFcmToken(@NonNull Context context,
@Nullable String token) {
PreferenceManager.getDefaultSharedPreferences(context)
.edit()
.putString(PREFS_KEY_FCM_TOKEN, token)
.apply();
}
/**
* onNewToken may not be called on application upgrade, so ensure my shared pref is set
*
* @param activity the first launch Activity
*/
public static void ensureFcmTokenIsRetrieved(final Activity activity) {
if (TextUtils.isEmpty(getFcmToken(activity))) {
try {
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(activity, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
storeFcmToken(activity, instanceIdResult.getToken());
}
});
} catch (Exception e) {
Log.e(LOG_TAG, "## ensureFcmTokenIsRetrieved() : failed " + e.getMessage(), e);
}
}
}
}
/**
* Copyright 2015 Google Inc. All Rights Reserved.
* Copyright 2017 Vector Creations Ltd
* Copyright 2018 New Vector Ltd
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.push.fcm;
import android.support.annotation.Nullable;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.google.gson.JsonParser;
import org.matrix.androidsdk.MXSession;
import org.matrix.androidsdk.data.Room;
import org.matrix.androidsdk.rest.model.Event;
import org.matrix.androidsdk.util.Log;
import java.util.Collection;
import java.util.Map;
import im.vector.Matrix;
import im.vector.VectorApp;
import im.vector.activity.CommonActivityUtils;
import im.vector.push.PushManager;
import im.vector.services.EventStreamService;
/**
* Class extending FirebaseMessagingService.
*/
public class VectorFirebaseMessagingService extends FirebaseMessagingService {
private static final String LOG_TAG = VectorFirebaseMessagingService.class.getSimpleName();
// Tells if the events service running state has been tested
private Boolean mCheckLaunched = false;
// UI handler
private android.os.Handler mUIHandler = null;
/**
* Try to create an event from the FCM data
*
* @param data the FCM data
* @return the event
*/
@Nullable
private Event parseEvent(Map<String, String> data) {
// accept only event with room id.
if ((null == data) || !data.containsKey("room_id") || !data.containsKey("event_id")) {
return null;
}
try {
Event event = new Event();
event.eventId = data.get("event_id");
event.sender = data.get("sender");
event.roomId = data.get("room_id");
event.setType(data.get("type"));
if (data.containsKey("content")) {
event.updateContent((new JsonParser()).parse(data.get("content")).getAsJsonObject());
}
return event;
} catch (Exception e) {
Log.e(LOG_TAG, "buildEvent fails " + e.getLocalizedMessage(), e);
}
return null;
}
/**
* Internal receive method
*
* @param data Data map containing message data as key/value pairs.
* For Set of keys use data.keySet().
*/
private void onMessageReceivedInternal(final Map<String, String> data) {
try {
int unreadCount = 0;
String roomId = null;
String eventId = null;
if ((null != data) && data.containsKey("unread")) {
if (data.containsKey("unread")) {
unreadCount = Integer.parseInt(data.get("unread"));
}
if (data.containsKey("room_id")) {
roomId = data.get("room_id");
}
if (data.containsKey("event_id")) {
eventId = data.get("event_id");
}
}
Log.d(LOG_TAG, "## onMessageReceivedInternal() : roomId " + roomId + " eventId " + eventId + " unread " + unreadCount);
// update the badge counter
CommonActivityUtils.updateBadgeCount(getApplicationContext(), unreadCount);
PushManager pushManager = Matrix.getInstance(getApplicationContext()).getPushManager();
if (!pushManager.areDeviceNotificationsAllowed()) {
Log.d(LOG_TAG, "## onMessageReceivedInternal() : the notifications are disabled");
return;
}
if (!pushManager.isBackgroundSyncAllowed() && VectorApp.isAppInBackground()) {
EventStreamService eventStreamService = EventStreamService.getInstance();
Event event = parseEvent(data);
String roomName = data.get("room_name");
if (null == roomName && null != roomId) {
// Try to get the room name from our store
MXSession session = Matrix.getInstance(getApplicationContext()).getDefaultSession();
if ((null != session) && session.getDataHandler().getStore().isReady()) {
Room room = session.getDataHandler().getStore().getRoom(roomId);
if (null != room) {
roomName = room.getRoomDisplayName(this);
}
}
}
Log.d(LOG_TAG, "## onMessageReceivedInternal() : the background sync is disabled with eventStreamService " + eventStreamService);
EventStreamService.onStaticNotifiedEvent(getApplicationContext(), event, roomName, data.get("sender_display_name"), unreadCount);
return;
}
// check if the application has been launched once
// the first FCM event could have been triggered whereas the application is not yet launched.
// so it is required to create the sessions and to start/resume event stream
if (!mCheckLaunched && null != Matrix.getInstance(getApplicationContext()).getDefaultSession()) {
CommonActivityUtils.startEventStreamService(this);
mCheckLaunched = true;
}
// check if the event was not yet received
// a previous catchup might have already retrieved the notified event
if (null != eventId && null != roomId) {
try {
Collection<MXSession> sessions = Matrix.getInstance(getApplicationContext()).getSessions();
if (null != sessions && !sessions.isEmpty()) {
for (MXSession session : sessions) {
if (session.getDataHandler().getStore().isReady()) {
if (null != session.getDataHandler().getStore().getEvent(eventId, roomId)) {
Log.e(LOG_TAG, "## onMessageReceivedInternal() : ignore the event " + eventId
+ " in room " + roomId + " because it is already known");
return;
}
}
}
}
} catch (Exception e) {
Log.e(LOG_TAG, "## onMessageReceivedInternal() : failed to check if the event was already defined " + e.getMessage(), e);
}
}
CommonActivityUtils.catchupEventStream(this);
} catch (Exception e) {
Log.d(LOG_TAG, "## onMessageReceivedInternal() failed : " + e.getMessage(), e);
}
}
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
@Override
public void onNewToken(String refreshedToken) {
Log.d(LOG_TAG, "onNewToken: " + refreshedToken);
FcmHelper.storeFcmToken(this, refreshedToken);
Matrix.getInstance(this).getPushManager().resetFCMRegistration(refreshedToken);
}
/**
* Called when message is received.
*
* @param message the message
*/
@Override
public void onMessageReceived(RemoteMessage message) {
Log.d(LOG_TAG, "## onMessageReceived() from FCM with priority " + message.getPriority()
+ " from " + message.getFrom());
// Ensure event stream service is started
if (EventStreamService.getInstance() == null) {
CommonActivityUtils.startEventStreamService(this);
}
final Map<String, String> data = message.getData();
if (null == mUIHandler) {
mUIHandler = new android.os.Handler(VectorApp.getInstance().getMainLooper());
}
mUIHandler.post(new Runnable() {
@Override
public void run() {
onMessageReceivedInternal(data);
}
});
}
@Override
public void onDeletedMessages() {
Log.d(LOG_TAG, "## onDeletedMessages()");
}
}
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">لم تسمح لِ‍ &appname; بمطالعة متراسليك المحليين</string>
<string name="permissions_rationale_msg_storage">يحتاج &appname; تصريحا منك للوصول إلى مكتبتي الصور والفديو لإرسال المرفقات وحفظها.
رجاءً اسمح بالوصول في المنبثقة التالية لتقدر على إرسال الملفات من هاتفك.</string>
<string name="permissions_rationale_msg_camera">يحتاج &appname; تصريحا منك للوصول إلى الكمرة لأخذ الصور وللمكالمات الصورية.</string>
<string name="permissions_rationale_msg_record_audio">يحتاج &appname; تصريحا منك للوصول إلى المِكرفون لإجراء المكالمات الصوتية.</string>
<string name="permissions_rationale_msg_camera_and_audio">يحتاج &appname; تصريحا منك للوصول إلى الكمرة والمِكرفون لإجراء المكالمات الصورية.
رجاءً اسمح بالوصول في المنبثقة التالية لتقدر على إرسال إجراء المكالمات الصورية.</string>
<string name="permissions_rationale_msg_contacts">يحتاج &appname; تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف.
رجاءً اسمح بالوصول في المنبثقة التالية لتستكشف مستخدميك في دفتر العناوين من &appname;.</string>
<string name="permissions_msg_contacts_warning_other_androids">يحتاج &appname; تصريحا منك للوصول إلى دفتر العناوين للعثور على مستخدمي ماترِكس الآخرين وذلك حسب البريد الإلكتروني ورقم الهاتف.
أتسمح بأن يصل &appname; إلى متراسليك؟</string>
<string name="e2e_enabling_on_app_update">بات يدعم &appname; تعمية الطرفين، ولكن عليك الولوج مجددا لتفعيلها.
يمكنك فعل ذلك الآن أو لاحقا وذلك من إعدادات التطبيق.</string>
<string name="e2e_re_request_encryption_key_dialog_content">رجاءً أطلِق &appname; في جهاز آخر يقدر على فك تعمية الرسالة ليُرسل المفاتيح إلى هذا الجهاز.</string>
<string name="settings_notification_privacy_warning">يعمل &appname;. في الخلفية ليُبقي محتوى رسائل الإخطارات خاصًّا. يمكنك تغيير هذا الخيار لتقليل استخدام البطارية.</string>
<string name="settings_opt_in_of_analytics_summary">يجمع &appname; التحاليل بشكل مجهّل فيتيح لنا ذلك تحسين التطبيق.</string>
<string name="settings_opt_in_of_analytics_prompt">رجاءً فعّل التحاليل لمساعدتنا في تحسين &appname;.</string>
<string name="startup_notification_privacy_message">يمكن أن يعمل &appname; في الخلفية ليُدير الإخطارات بأمان وخصوصية (قد يؤثّر هذا على استهلاك البطارية).</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources><string name="encrypted_message">Шифровано съобщение</string>
<string name="no_contact_access_placeholder">Не сте позволили достъп на &appname; до локалните Ви контакти</string>
<string name="send_bug_report_alert_message">Изглежда, че разклащате телефона, което ни кара да мислим, че не сте доволни от &appname;. Искате ли да изпратите съобщение за грешка?</string>
<string name="e2e_enabling_on_app_update">&appname; поддържа шифроване от край до край, но за да го включите трябва да влезете в профила си отново.
Може да го направите сега или по-късно от настройките на приложението.</string>
<string name="permissions_rationale_msg_storage">&appname; иска разрешение за достъп до Вашата галерия със снимки и видеа, за да изпраща и запазва прикачени файлове.
Моля, разрешете достъпа от следващия прозорец, който се покаже, за да можете да изпращате файлове от телефона си.</string>
<string name="permissions_rationale_msg_camera">&appname; иска разшерение за достъп до Вашата камера, за да прави снимки или да осъществи видео разговори.</string>
<string name="permissions_rationale_msg_record_audio">&appname; иска разшерение за достъп до Вашия микрофон, за да се извърши звуков разговор.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; иска разшерение за достъп до микрофона и камерата Ви, за да извърши видео разговор.
Моля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите.</string>
<string name="permissions_rationale_msg_contacts">&appname; иска разшерение за достъп до контактите Ви, за да намери други Matrix потребители по имейл или телефонен номер.
Моля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да намирате потребители на &appname; от Вашите контакти.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; иска разшерение за достъп до контактите Ви, за да намери други Matrix потребители по имейл или телефонен номер.
Позволяване на достъп до контактите Ви?</string>
<string name="settings_notification_privacy_warning">&appname; работи във фонов режим за да е конфиденциално съдържанието на уведомленията. Може да смените тази настройка, за да намалите консумацията на енергия.</string>
<string name="startup_notification_privacy_message">&appname; може да работи във фонов режим за да получава уведомления по защитен начин (може да повлияе на използваната енергия).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; събира анонимни статистики за да ни помогне да подобрим приложението.</string>
<string name="settings_opt_in_of_analytics_prompt">Моля, включете изпращането на статистики за да ни помогнете да подобрим &appname;.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Моля стартирайте &appname; на друго устройство можещо да разшифрова съобщението, за да може то да изпрати ключовете до това устройство.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Niste omogućili &appname; pristup vašim lokalnim kontaktima</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">No es va donar permís a &appname; per accedir als contactes locals</string>
<string name="permissions_rationale_msg_storage">Per poder enviar i desar adjunts, el &appname; necessita permís d\'accés a la galeria de fotos i vídeos.\n\nA la següent finestra emergent, doneu-li el permís d\'accés i així podreu enviar fitxers des del telefon.</string>
<string name="permissions_rationale_msg_camera">Per poder fer fotos i vídeotrucades, el &appname; necessita permís d\'accés a la càmera.</string>
<string name="permissions_rationale_msg_record_audio">Per tal de fer trucades de veu, el &appname; necessita permís d\'accés al microfon.</string>
<string name="permissions_rationale_msg_camera_and_audio">Per tal de fer vídeotrucades, el &appname; necessita permís d\'accés a la càmera i al microfon.\n\nA la següent finestra emergent, doneu permís d\'accés per tal de poder fer la trucada.</string>
<string name="permissions_rationale_msg_contacts">Per tal de trobar altres usuaris de Matrix a partir dels seus correus electrònics o dels seus números de telefon, el &appname; necessita permís d\'accés a l\'agenda de contactes.\n\nA la següent finestra emergent, doneu permís d\'accés per trobar amb quins contactes de la teva agenda pots contactar a partir de &appname;.</string>
<string name="permissions_msg_contacts_warning_other_androids">Per tal de trobar altres usuaris de Matrix a partir dels seus correus electrònics o dels seus números de telefon, el &appname; necessita permís d\'accés a l\'agenda de contactes.\n\nPermeteu que &appname; accedeixi als vostres contactes?</string>
<string name="e2e_enabling_on_app_update">El &appname; ara permet l\'ús d\'encriptació d\'extrem a extrem però us heu de tronar a connectar per tal d\'activar-la.\n\nHo podeu fer ara o més tard des de les preferències de l\'aplicació.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Si us plau, engega &appname; a un altre dispositiu que pugui desencriptar el missatge de manera que pugui enviar la clau a aquest dispositiu.</string>
<string name="settings_notification_privacy_warning">&appname; funciona en segon pla per mantenir el contingut de les notificacions dels missatges privats. Podeu canviar aquesta opció per tal de reduir l\'ús de bateria.</string>
<string name="startup_notification_privacy_message">&appname; pot funcionar en segon pla per gestionar les vostres notificacions de forma segura i privada (això podria afectar el consum de bateria).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; recopila dades d\'anàlisi anònimes per tal de permetre\'ns millorar l\'aplicació.</string>
<string name="settings_opt_in_of_analytics_prompt">Si us plau, activeu les dades d\'anàlisi per ajudar-nos a millorar &appname;.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Nepovolil jste přístup aplikace &appname; k místním kontaktům</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Du gav ikke &appname; tilladelse til at se dine lokale kontakter</string>
<string name="permissions_rationale_msg_storage">&appname; skal bruge tilladelse til at tilgå dit billed- og videoarkiv for at sende og gemme vedhæftninger.
Giv venligst tilladelse ved næste pop-up for at kunne sende filer fra din telefon.</string>
<string name="permissions_rationale_msg_camera">&appname; skal bruge tilladelse til at bruge dit kamera for at billeder og lave videoopkald.</string>
<string name="permissions_rationale_msg_record_audio">&appname; skal bruge tilladelse til at bruge din mikrofon for at lave lydopkald.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; skal bruge tilladelse til at bruge dit kamera og din mikrofon for at lave videoopkald.
Giv venligst tilladelse ved næste pop-up for at lave opkaldet.</string>
<string name="permissions_rationale_msg_contacts">&appname; skal bruge adgang til dine kontakter for at finde andre Matrix brugere ud fra deres email og telefonnumre.
Giv venligst tilladelse ved næste pop-up for at finde kontakter der er på &appname;.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; skal bruge adgang til dine kontakter for at finde andre Matrix brugere ud fra deres email og telefonnumre.
Vil du give &appname; adgang til dine kontakter?</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Du hast &appname; nicht erlaubt auf deine lokalen Kontakte zuzugreifen</string>
<string name="permissions_rationale_msg_storage">&appname; benötigt die Berechtigung, auf deine Fotos und Videos zugreifen zu können, um Anhänge zu senden und zu speichern.\n\nBitte erlaube den Zugriff im nächsten Dialog, um Dateien von deinem Gerät zu versenden.</string>
<string name="permissions_rationale_msg_camera">&appname; benötigt die Berechtigung, auf deine Kamera zugreifen zu können, um Bilder aufzunehmen und Video-Anrufe durchzuführen.</string>
<string name="permissions_rationale_msg_record_audio">&appname; benötigt die Berechtigung, auf dein Mikrofon zugreifen zu können, um (Sprach-)Anrufe tätigen zu können.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; benötigt die Berechtigung, auf deine Kamera und dein Mikrofon zugreifen zu können, um Video-Anrufe durchführen zu können.
Bitte erlaube den Zugriff im nächsten Dialog, um den Anruf durchzuführen.</string>
<string name="permissions_rationale_msg_contacts">&appname; benötigt die Berechtigung, auf deine Kontakte im Adressbuch zugreifen zu können, um andere Matrix-Benutzer mit Hilfe ihrer E-Mail-Adresse oder Telefonnummer zu finden.
Bitte erlaube den Zugriff im nächsten Dialog, um Kontakte im Adressbuch zu finden, die über &appname; erreichbar sind.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; benötigt die Berechtigung, auf deine Adressbuch-Kontakte zugreifen zu dürfen, um andere Matrix-Benutzer mit Hilfe ihrer E-Mail-Adresse und/oder ihrer Telefonnummer finden zu können.
Soll &appname; der Zugriff auf deine Kontakte erlaubt werden?</string>
<string name="e2e_enabling_on_app_update">&appname; unterstützt jetzt Ende-zu-Ende-Verschlüsselung, du musst dich jedoch erneut anmelden, um sie zu aktivieren.
Du kannst sie jetzt aktivieren oder später über das Einstellungsmenü.</string>
<string name="settings_notification_privacy_warning">&appname; läuft im Hintergrund um den Benachrichtigungsinhalt privat zu halten. Du kannst diese Option ändern um den Stromverbrauch zu reduzieren.</string>
<string name="startup_notification_privacy_message">&appname; kann im Hintergrund laufen um deine Benachrichtigungen sicher und privat zu verwalten (dies kann den Energieverbrauch beeinflussen).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; sammelt anonyme Analysedaten um uns zu helfen, die App zu verbessern.</string>
<string name="settings_opt_in_of_analytics_prompt">Bitte aktive Analysedaten um uns zu helfen &appname; zu verbessern.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Bitte öffne &appname; auf einem anderen Gerät, das die Nachricht entschlüsseln kann, damit es diesem Gerät die Schlüssel senden kann.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">No ha permitido a &appname; acceder a sus contactos locales</string>
<string name="permissions_rationale_msg_storage">&appname; necesita tu permiso para entrar en tu almacenaje de fotos y videos para enviar y guardar archivos.\n\nPor favor permite el acceso en el siguiente mensaje para poder enviar archivos desde su dispostivo.</string>
<string name="permissions_rationale_msg_camera">&appname; necesita tu permiso para usar tu cámara para tomar fotos y hacer llamadas de video.</string>
<string name="permissions_rationale_msg_record_audio">&appname; necesita tu permiso para usar tu micrófono para hacer llamadas de voz.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; necesita tu permiso para usar su cámara y micrófono para hacer llamadas de video.\n\nPor favor permite el acceso en el siguiente mensaje para poder hacer la llamada.</string>
<string name="permissions_rationale_msg_contacts">&appname; necesita tu permiso para leer tus contactos y directorio para encontrar a otros usuarios por sus correos electrónicos y números telefónicos.\n\nPor favor permite el acceso en el siguiente mensaje para encontrar usuarios de &appname; en su directorio.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; necesita tu permiso para leer los contactos de tu directorio para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos.
¿Permitir el acceso a &appname; para leer tus contactos ?</string>
<string name="e2e_enabling_on_app_update">&appname; ahora cuenta con cifrado de extremo-a-extremo pero necesitas reingresar tu cuenta para encenderlo.
Lo puedes hacer ahora o luego desde las configuraciones de la aplicación.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">No permitiste que &appname; acceda a tus contactos locales</string>
<string name="permissions_rationale_msg_storage">&appname; necesita permiso para acceder a tu biblioteca de fotos y vídeos para enviar y guardar archivos adjuntos.
Por favor permite el acceso en la próxima ventana emergente para poder enviar archivos desde tu teléfono.</string>
<string name="permissions_rationale_msg_camera">&appname; necesita permiso para acceder a tu cámara para tomar fotos y realizar llamadas de vídeo.</string>
<string name="permissions_rationale_msg_record_audio">&appname; necesita permiso para acceder a tu micrófono para realizar llamadas de voz.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; necesita permiso para acceder a tu cámara y micrófono para realizar llamadas de vídeo.
Por favor permite el acceso en las próximas ventanas emergentes para poder realizar la llamada.</string>
<string name="permissions_rationale_msg_contacts">&appname; necesita permiso para acceder a tu agenda de contactos para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos.
Por favor permite el acceso en la próxima ventana emergente para descubrir usuarios accesibles desde &appname; en tu agenda de contactos.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; necesita permiso para acceder a tu agenda de contactos para encontrar otros usuarios de Matrix por sus correos electrónicos y números telefónicos.
¿Permitir que &appname; acceda a tus contactos ?</string>
<string name="e2e_enabling_on_app_update">&appname; ahora admite cifrado de extremo a extremo pero debes volver a iniciar sesión para habilitarlo.
Puedes hacerlo ahora o más tarde desde los ajustes de la aplicación.</string>
<string name="settings_notification_privacy_warning">&appname; se ejecuta en segundo plano para mantener privado el contenido del mensaje de la notificación. Puedes cambiar esta opción para reducir el uso de la batería.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Por favor, inicia &appname; en otro dispositivo que pueda descifrar el mensaje para que pueda enviar las claves a este dispositivo.</string>
<string name="startup_notification_privacy_message">&appname; puede ejecutarse en segundo plano para gestionar tus notificaciones de forma segura y privada (esto podría afectar el uso de la batería).</string>
<string name="settings_opt_in_of_analytics">Enviar datos de análisis de estadísticas</string>
<string name="settings_opt_in_of_analytics_summary">&appname; recopila análisis de estadísticas anónimas para permitirnos mejorar la aplicación.</string>
<string name="settings_opt_in_of_analytics_prompt">Por favor, habilita los análisis de estadísticas para ayudarnos a mejorar &appname;.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Ez diozu baimena eman &appname; aplikazioari zure gailuko kontaktuak atzitzeko</string>
<string name="permissions_rationale_msg_camera">&appname; zure kamera atzitzeko baimena behar du argazkiak eta bideoak atera ahal izateko.</string>
<string name="permissions_rationale_msg_record_audio">&appname; zure mikrofonoa atzitzeko baimena behar du ahots deiak egin ahal izateko.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; zure kamera eta mikrofonoa atzitzeko baimenak behar ditu bideo deiak egin ahal izateko.
Baimendu sarbidea hurrengo laster-leihoan deia egin ahal izateko.</string>
<string name="permissions_rationale_msg_storage">&appname; zure argazki eta bideoen liburutegia atzitzeko baimena behar du eranskinak gorde ahal izateko.
Baimendu sarbidea hurrengo laster-leihoan zure telefonotik fitxategiak bidali ahal izateko.</string>
<string name="permissions_rationale_msg_contacts">&appname; zure helbide-liburua atzitzeko baimen behar du beste Matrix erabiltzaileak bere e-mail helbide edo telefono zenbakiaren bidez aurkitzeko.
Baimendu sarbidea hurrengo laster-leihoan &appname; bitartez kontaktatu ditzakezun erabiltzaileak aurkitzeko.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; zure helbide-liburua atzitzeko baimen behar du beste Matrix erabiltzaileak bere e-mail helbide eta telefono zenbakiaren bidez aurkitzeko.
Baimendu &appname; zure kontaktuak atzitzea?</string>
<string name="e2e_enabling_on_app_update">&appname; orain muturretik muturrerako zifratzea onartzen du baina berriro hasi behar duzu saioa hau gaitzeko.
Orain egin dezakezu edo gero aplikazioaren ezarpenetatik.</string>
<string name="settings_notification_privacy_warning">&appname; bigarren planoan dabil zure jakinarazpen mezuaren edukia pribatu mantentzeko. Aukera hau aldatu dezakezu bateria aurrezteko.</string>
<string name="startup_notification_privacy_message">&appname; bigarren planoan aritu daiteke zure jakinarazpenak modu seguru eta pribatuan kudeatzeko (baterian eragina izan lezake).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; analitika anonimoak biltzen ditu aplikazioa hobetzeko.</string>
<string name="settings_opt_in_of_analytics_prompt">Gaitu analitikak &appname; hobetzera laguntzeko.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Abiatu &appname; beste mezua deszifratu dezakeen gailu batean, gailu honetara gakoak bidali ditzan.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Et sallinut &appname; pääsyä paikallisiin yhteystietoihisi</string>
<string name="permissions_rationale_msg_storage">&appname; tarvitsee käyttöluvan mediagalleriaasi lähettäkseen liitteitä.\n\nSalli tiedostojen käyttö seuraavalla näytöllä liittääksesi kuvia ja muita tiedostoja viesteihin.</string>
<string name="permissions_rationale_msg_camera">&appname; tarvitsee käyttöluvan kameraan ottaakseen kuvia ja suorittakseen videopuheluita.</string>
<string name="permissions_rationale_msg_record_audio">&appname; tarvitsee käyttöluvan mikrofoniin suorittakseen puheluita.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; tarvitsee käyttöluvan kameraan ja mikrofoniin suorittakseen videopuheluita.\n\nSalli mikrofonin ja kameran käyttö seuraavilla näytöillä aloittaaksesi tämä puhelu.</string>
<string name="permissions_rationale_msg_contacts">&appname; tarvitsee luvan käyttää yhteystietojasi löytääkseen muita Matrix-käyttäjiä sähköpostiosoitteiden ja puhelinnumeroiden perusteella.
Salli yhteystietojen käyttö seuraavalla näytöllä löytääksesi Matrix-tilit.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; tarvitsee käyttöluvan yhteystietoihin, löytääkseen muita Matrix-käyttäjiä sähköpostiosoitteiden sekä puhelinnumeroiden avulla.
Salli &appname;in käyttää yhteystietojasi?</string>
<string name="e2e_enabling_on_app_update">&appname; tukee viestien salausta. Kirjaudu sisään uudelleen ottaaksesi salaus käyttöön.
Voit tehdä sen nyt tai myöhemmin sovelluksen asetuksissa.</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- use to retrieve the supported languages list -->
<!-- should the same value as the file name -->
</resources>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Vous n\'avez pas autorisé &appname; à accéder à vos contacts locaux</string>
<string name="permissions_rationale_msg_storage">&appname; a besoin d\'accéder à vos photos et vidéos pour envoyer et enregistrer des pièces jointes.
Veuillez autoriser l\'accès dans la prochaine fenêtre contextuelle pour pouvoir envoyer des fichiers depuis votre téléphone.</string>
<string name="permissions_rationale_msg_camera">&appname; a besoin d\'accéder à votre appareil photo pour prendre des photos et passer des appels vidéo.</string>
<string name="permissions_rationale_msg_record_audio">&appname; a besoin d\'accéder à votre microphone pour passer des appels audio.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; a besoin d\'accéder à votre appareil photo et à votre microphone pour passer des appels vidéo.
Veuillez autoriser l\'accès dans les prochaines fenêtres contextuelles pour pouvoir effectuer l\'appel.</string>
<string name="permissions_rationale_msg_contacts">&appname; a besoin d\'accéder aux contacts de votre carnet d\'adresses pour trouver d\'autres utilisateurs de Matrix avec leur numéro de téléphone et leur adresse e-mail.
Veuillez autoriser l\'accès dans la prochaine fenêtre contextuelle pour découvrir les utilisateurs du carnet d\'adresses joignables avec &appname;.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; a besoin d\'accéder aux contacts de votre carnet d\'adresses pour trouver d\'autres utilisateurs de Matrix avec leur numéro de téléphone et leur adresse e-mail.
Autorisez-vous &appname; à accéder à vos contacts ?</string>
<string name="e2e_enabling_on_app_update">&appname; prend désormais en charge le chiffrement de bout en bout, mais vous devez vous reconnecter pour l\'activer.
Vous pouvez le faire maintenant ou plus tard à partir des paramètres de l\'application.</string>
<string name="settings_notification_privacy_warning">&appname; fonctionne en arrière-plan pour que le contenu du message de notification reste privé. Vous pouvez désactiver cette option pour réduire l\'utilisation de la batterie.</string>
<string name="startup_notification_privacy_message">&appname; peut fonctionner en arrière-plan pour gérer vos notifications de façon sécurisée et confidentielle (cela peut affecter l\'utilisation de la batterie).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; collecte des données analytiques anonymes pour nous permettre d\'améliorer l\'application.</string>
<string name="settings_opt_in_of_analytics_prompt">Veuillez autoriser la collecte des données pour nous aider à améliorer &appname;.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Veuillez lancer &appname; sur un autre appareil qui peut déchiffrer le message pour qu\'il puisse envoyer les clés à cet appareil.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">"Non lle permitiu acceder aos contactos locais a &appname; "</string>
<string name="settings_opt_in_of_analytics_summary">&appname; recolle información analítica anónima para permitirnos mellorar o aplicativo.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Inicie &appname; noutro dispositivo que poida descifrar esta mensaxe e que despois desde alí lle poida enviar as chaves a este dispositivo.</string>
<string name="settings_notification_privacy_warning">&appname; traballa agochado, en segundo plano, para garantir que o contido das súas mensaxes sexa segredo. Pode cambiar esta opción para que reducir o consumo das baterías.</string>
<string name="startup_notification_privacy_message">&appname; pode estar agochado e seguir traballando na xestión das notificacións dun xeito seguro e privado (inda que iso podería afectar ao uso da batería).</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Nem adtál a &appname; hozzáférést a helyi névjegyeidhez</string>
<string name="permissions_rationale_msg_storage">A &appname; szüksége van a fotó és videó könyvtáradnak elérési engedélyéhez a csatolmányok küldéséhez.
Kérlek engedélyezd a hozzáférést a következő felugró ablakban, hogy tudj fájlokat küldeni a telefonodról.</string>
<string name="permissions_rationale_msg_camera">&appname; engedély szükséges a kamerád eléréséhez, hogy tudj képeket készíteni és videó hívásokat.</string>
<string name="permissions_rationale_msg_record_audio">A &appname; engedély szükséges a mikrofonod eléréséhez, hogy tudj hanghívást kezdeményezni.</string>
<string name="permissions_rationale_msg_camera_and_audio">"A &appname; engedély szükséges a mikrofonod és kamerád eléréséhez, hogy tudj videóhívást kezdeményezni.
Kérlek engedélyezd a hozzáférést a következő felugró ablakban, hogy tudj hívást kezdeményezni."</string>
<string name="permissions_rationale_msg_contacts">A &appname; engedély szükséges a címjegyzék-kapcsolatok eléréséhez, hogy tudj Matrix felhasználókat találni e-mail és telefonszám alapján.
Kérlek engedélyezd a hozzáférést a következő felugró ablakban, hogy tudj címjegyzék-kapcsolatok találni a &appname;.</string>
<string name="permissions_msg_contacts_warning_other_androids">A &appname; engedély szükséges a címjegyzék-kapcsolatok eléréséhez, hogy tudj Matrix felhasználókat találni e-mail és telefonszám alapján.
Engedélyezed &appname; a hozzáférést kapcsolataidhoz?</string>
<string name="e2e_enabling_on_app_update">Mostantól a &appname; támogatja a végtől végig titkosítást de előtte újra be kell jelentkezned, hogy bekapcsold.
Ezt megteheted most vagy később az alkalmazás beállítások alatt.</string>
<string name="settings_notification_privacy_warning">&appname; a háttérben fut azért, hogy az értesítések tartalma titokban maradhasson. Ezt a beállítást megváltoztathatod kisebb akkumulátor használathoz.</string>
<string name="startup_notification_privacy_message">&appname; futtatható a háttérben az értesítések biztonságos és titkos kezeléséhez (ami hatással lehet az akkumulátor használatra ).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; anonim analitikai adatokat gyűjt, hogy javítani tudjuk az alkalmazást.</string>
<string name="settings_opt_in_of_analytics_prompt">Kérlek engedélyezd az analitikai adatok gyűjtését ezzel segítve a &appname; fejlesztését.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Kérlek indítsd el a &appname; egy olyan eszközön ami ezt az üzenetet vissza tudja fejteni, hogy elküldhesse a kulcsot erre az eszközre.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Anda tidak mengizinkan &appname; untuk mengakses kontak lokal</string>
<string name="permissions_rationale_msg_storage">&appname; membutuhkan permisi atas akses galeri foto dan video Anda untuk mengirim dan menyimpan lampiran.
Harap berikan akses pada halaman berikut agar berkas dapat dikirim dari ponsel Anda.</string>
<string name="permissions_rationale_msg_camera">&appname; membutuhkan izin Anda untuk mengakses kamera untuk mengambil gambar dan melakukan panggilan video.</string>
<string name="permissions_rationale_msg_record_audio">&appname; membutuhkan permisi atas akses mikrofon Anda untuk melakukan panggilan audio.</string>
<string name="permissions_rationale_msg_camera_and_audio">&appname; membutuhkan permisi atas akses kamera dan mikrofon Anda untuk melakukan panggilan video.
Harap berikan akses pada halaman selanjutnya untuk melakukan panggilan.</string>
<string name="e2e_re_request_encryption_key_dialog_content">Jalankan &appname; di perangkat yang dapat mendekripsi pesan tersebut agar kunci dapat dikirim ke perangkat ini.</string>
<string name="permissions_rationale_msg_contacts">&appname; memerlukan permisi untuk mengakses daftar kontak agar dapat mencari pengguna Matrix lain berdasarkan email dan nomor telepon.
Ijinkan akses lewat halaman selanjutnya untuk menemukan pengguna &appname; yang terdapat di daftar kontak Anda.</string>
<string name="permissions_msg_contacts_warning_other_androids">&appname; memerlukan permisi akses daftar kontak Anda untuk menemukan pengguna Matrix lain berdasarkan email dan nomor telepon mereka.
Bolehkah &appname; mengakses daftar kontak Anda?</string>
<string name="settings_notification_privacy_warning">&appname; beroperasi di balik layar untuk menjaga kerahasiaan isi pesan pemberitahuan. Anda dapat mengubah pengaturan untuk mengurangi penggunaan baterai.</string>
<string name="e2e_enabling_on_app_update">&appname; sekarang mendukung enkripsi ujung-ke-ujung tapi Anda perlu masuk kembali untuk mengaktifkannya.
Ini bisa Anda lakukan sekarang atau nani dari pengaturan aplikasi.</string>
<string name="startup_notification_privacy_message">&appname; dapat beroperasi di balik layar untuk mengurus pemberitahuan Anda dengan aman dan rahasia (dapat mempengaruhi penggunaan energi).</string>
<string name="settings_opt_in_of_analytics_summary">&appname; mengumpulkan data analitik anonim dalam upaya kami meningkatkan aplikasi.</string>
<string name="settings_opt_in_of_analytics_prompt">Mohon aktifkan analitik untuk membantu kami meningkatkan &appname;.</string>
</resources>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE resources [
<!ENTITY appname "Liberty Chat">
]>
<resources>
<string name="no_contact_access_placeholder">Anda tidak mengizinkan &appname; untuk mengakses kontak lokal</string>
<string name="permissions_rationale_msg_storage">&appname; membutuhkan permisi atas akses galeri foto dan video Anda untuk mengirim dan menyimpan lampiran.
Harap berikan akses pada halaman berikut agar berkas dapat dikirim dari ponsel Anda.</string>
<string name="permissions_rationale_msg_camera">&appname; membutuhkan izin Anda untuk mengakses kamera untuk mengambil gambar dan melakukan panggilan video.