Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ffc70a95b | |||
| 0e4eef9785 | |||
| 6c164df815 | |||
| 2928abc98f | |||
| 38565488a4 | |||
| bf03b31dde | |||
| 8524cc5598 | |||
| d2a78ea84c | |||
| ea98fe2d4f | |||
| ad1d927437 | |||
| 0534f9d95a | |||
| dda5bc8838 | |||
| a1e82ab403 | |||
| 8c1ca6c9e0 | |||
| 95eb62190a | |||
| 3743c57edd | |||
| 5e2b31af60 | |||
| 24fc93e9ae | |||
| ef7977128b | |||
| e080449383 | |||
| a0a6c3f211 | |||
| 3df67a1643 | |||
| 018f5eccf3 | |||
| b99cca8bfa |
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.thoughtcrime.securesms"
|
||||
android:versionCode="47"
|
||||
android:versionName="0.9.9.1">
|
||||
android:versionCode="50"
|
||||
android:versionName="0.9.9.4">
|
||||
|
||||
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>
|
||||
|
||||
@@ -118,7 +118,6 @@
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ViewIdentityActivity"
|
||||
android:theme="@style/Theme.Sherlock.Light.Dialog"
|
||||
android:label="@string/AndroidManifest__public_identity_key"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
@@ -135,12 +134,6 @@
|
||||
android:label="@string/AndroidManifest__verify_identity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".SaveIdentityActivity"
|
||||
android:theme="@style/Theme.Sherlock.Light.Dialog"
|
||||
android:label="@string/AndroidManifest__save_identity"
|
||||
android:windowSoftInputMode="stateVisible"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ReviewIdentitiesActivity"
|
||||
android:label="@string/AndroidManifest__manage_identity_keys"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
@@ -153,11 +146,6 @@
|
||||
<activity android:name=".ApplicationPreferencesActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".VerifyImportedIdentityActivity"
|
||||
android:theme="@style/Theme.Sherlock.Light.Dialog"
|
||||
android:label="@string/AndroidManifest__verify_imported_identity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".RegistrationActivity"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
@@ -216,6 +204,14 @@
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".notifications.MarkReadReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.notifications.CLEAR"></action>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<provider android:name=".providers.PartProvider"
|
||||
android:authorities="org.thoughtcrime.provider.securesms" />
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
Building TextSecure
|
||||
===================
|
||||
|
||||
Fetch ActionBarSherlock:
|
||||
|
||||
git clone --branch 4.2.0 git://github.com/JakeWharton/ActionBarSherlock.git ../ActionBarSherlock
|
||||
|
||||
Configure ActionBarSherlock for your android target:
|
||||
|
||||
android update project --path ../ActionBarSherlock/library --target 1
|
||||
|
||||
Configure TextSecure for your android target, linking to ASB:
|
||||
|
||||
android update project --path . --target 1 --library ../ActionBarSherlock/library
|
||||
|
||||
Finally, both codebases must share the android-support jar. As TextSecure's is newer, use it:
|
||||
|
||||
cp libs/android-support-v4.jar ../ActionBarSherlock/library/libs/android-support-v4.jar
|
||||
|
||||
Assuming your android toolchain is correctly configured, it should now be possible to build the TextSecure apk.
|
||||
|
||||
ant debug
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 596 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
@@ -5,8 +5,8 @@
|
||||
android:paddingRight="10dip"
|
||||
>
|
||||
|
||||
<FrameLayout android:id="@+id/contact_photo_frame"
|
||||
android:layout_width="wrap_content"
|
||||
<FrameLayout android:id="@+id/contact_photo_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
@@ -14,21 +14,21 @@
|
||||
<QuickContactBadge android:id="@+id/contact_photo_badge"
|
||||
style="?android:attr/quickContactBadgeStyleWindowLarge"
|
||||
android:visibility="gone" />
|
||||
|
||||
|
||||
<ImageView android:id="@+id/contact_photo_image"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:cropToPadding="true"
|
||||
android:scaleType="centerCrop"
|
||||
android:visibility="gone" />
|
||||
android:scaleType="centerCrop"
|
||||
android:visibility="gone" />
|
||||
</FrameLayout>
|
||||
|
||||
<CheckBox android:id="@+id/checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:visibility="gone" />
|
||||
|
||||
<!--<CheckBox android:id="@+id/checkbox"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:layout_alignParentRight="true"-->
|
||||
<!--android:layout_alignParentTop="true"-->
|
||||
<!--android:visibility="gone" />-->
|
||||
|
||||
<TextView android:id="@+id/from"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -40,10 +40,10 @@
|
||||
android:layout_marginLeft="5dip"
|
||||
android:layout_alignTop="@id/contact_photo_frame"
|
||||
android:layout_toRightOf="@id/contact_photo_frame"
|
||||
android:layout_toLeftOf="@id/checkbox"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:ellipsize="marquee"
|
||||
android:textColor="#000000"/>
|
||||
<!--android:layout_toLeftOf="@id/checkbox"-->
|
||||
|
||||
|
||||
<TextView android:id="@+id/date"
|
||||
@@ -54,7 +54,7 @@
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:singleLine="true"
|
||||
android:layout_alignBottom="@id/contact_photo_frame"
|
||||
android:layout_alignBottom="@id/contact_photo_frame"
|
||||
android:layout_alignParentRight="true"/>
|
||||
|
||||
<ImageView android:id="@+id/error"
|
||||
|
||||
@@ -1,9 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.thoughtcrime.securesms.IdentityKeyView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="?android:attr/listPreferredItemHeight"
|
||||
android:orientation="horizontal"
|
||||
android:padding="15dip">
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="10dip">
|
||||
|
||||
<FrameLayout android:id="@+id/contact_photo_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:visibility="visible">
|
||||
<QuickContactBadge android:id="@+id/contact_photo_badge"
|
||||
style="?android:attr/quickContactBadgeStyleWindowLarge"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView android:id="@+id/contact_photo_image"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:cropToPadding="true"
|
||||
android:scaleType="centerCrop"
|
||||
android:visibility="gone" />
|
||||
</FrameLayout>
|
||||
|
||||
<TextView android:id="@+id/identity_name"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -13,8 +30,22 @@
|
||||
android:layout_marginTop="6dip"
|
||||
android:layout_marginRight="5dip"
|
||||
android:layout_marginLeft="5dip"
|
||||
android:layout_alignTop="@id/contact_photo_frame"
|
||||
android:layout_toRightOf="@id/contact_photo_frame"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:ellipsize="marquee"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true" />
|
||||
android:textColor="#000000"/>
|
||||
|
||||
</org.thoughtcrime.securesms.IdentityKeyView>
|
||||
<TextView android:id="@+id/fingerprint"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:singleLine="true"
|
||||
android:layout_marginBottom="10dip"
|
||||
android:layout_marginLeft="5dip"
|
||||
android:layout_alignBottom="@id/contact_photo_frame"
|
||||
android:layout_toRightOf="@id/contact_photo_frame"
|
||||
android:layout_toLeftOf="@id/date"
|
||||
android:ellipsize="end" />
|
||||
|
||||
</org.thoughtcrime.securesms.IdentityKeyView>
|
||||
@@ -1,59 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView android:id="@+id/ScrollView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:fillViewport="true"
|
||||
android:background="@drawable/background_pattern_repeat">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dip">
|
||||
<FrameLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:gravity="center">
|
||||
|
||||
<TextView android:id="@+id/description_text"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="17dip"
|
||||
android:layout_marginBottom="5dip" />
|
||||
|
||||
<TextView android:id="@+id/signature_text"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="17dip"
|
||||
android:textStyle="italic"
|
||||
android:layout_marginBottom="10dip" />
|
||||
|
||||
<LinearLayout android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button android:id="@+id/verify_session_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/receive_key_activity__session"
|
||||
android:visibility="gone"
|
||||
android:gravity="center" />
|
||||
<LinearLayout android:paddingRight="16dip"
|
||||
android:paddingLeft="16dip"
|
||||
android:paddingTop="10dip"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<Button android:id="@+id/verify_identity_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/receive_key_activity__identities"
|
||||
android:visibility="gone"
|
||||
android:gravity="center" />
|
||||
|
||||
<Button android:id="@+id/ok_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/receive_key_activity__complete_exchange"
|
||||
android:gravity="center"/>
|
||||
|
||||
<Button android:id="@+id/cancel_button"
|
||||
android:text="@android:string/cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<TextView style="@style/Registration.Description"
|
||||
android:id="@+id/description_text"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_marginBottom="16dip"
|
||||
android:layout_marginTop="16dip"/>
|
||||
|
||||
<LinearLayout android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginBottom="7dip"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button android:id="@+id/cancel_button"
|
||||
android:text="@android:string/cancel"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<Button android:id="@+id/ok_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/receive_key_activity__complete"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</ScrollView>
|
||||
|
||||
|
||||
|
||||
@@ -1,24 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="16dip"
|
||||
android:paddingRight="16dip">
|
||||
|
||||
<ListView android:id="@android:id/list"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:drawSelectorOnTop="false"
|
||||
android:scrollbarStyle="insideOverlay"
|
||||
android:fadingEdgeLength="16dip" />
|
||||
|
||||
<TextView android:id="@id/android:empty"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/review_identities__you_don_t_currently_have_any_identity_keys_in_your_trust_database"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:padding="20dip" />
|
||||
|
||||
</LinearLayout>
|
||||
<fragment android:id="@+id/fragment_content"
|
||||
android:name="org.thoughtcrime.securesms.ReviewIdentitiesFragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
</FrameLayout>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ListView android:id="@android:id/list"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:drawSelectorOnTop="false"
|
||||
android:scrollbarStyle="insideOverlay"
|
||||
android:fadingEdgeLength="16dip" />
|
||||
|
||||
<TextView android:id="@id/android:empty"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/review_identities__you_don_t_currently_have_any_identity_keys_in_your_trust_database"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:padding="20dip" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,51 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_marginLeft="16dip"
|
||||
android:layout_marginRight="16dip">
|
||||
<TableLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:shrinkColumns="1">
|
||||
android:layout_height="fill_parent">
|
||||
|
||||
<LinearLayout android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dip"
|
||||
android:layout_marginRight="16dip"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TableRow>
|
||||
<TextView
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/view_identity_activity__identity"
|
||||
android:layout_marginRight="7dip" />
|
||||
<TextView
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:typeface="monospace"
|
||||
android:id="@+id/identity_fingerprint"
|
||||
android:text=""
|
||||
android:padding="3dip" />
|
||||
</TableRow>
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:typeface="monospace"
|
||||
android:id="@+id/identity_fingerprint"
|
||||
android:text=""
|
||||
android:padding="7dip" />
|
||||
|
||||
<TableRow>
|
||||
<LinearLayout android:orientation="horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_span="2">
|
||||
|
||||
<Button android:id="@+id/compare_button"
|
||||
android:layout_margin="10dip"
|
||||
android:padding="5dip"
|
||||
android:layout_width="100dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/view_identity_activity__qr_code" />
|
||||
|
||||
<Button android:id="@+id/ok_button"
|
||||
android:layout_margin="10dip"
|
||||
android:padding="5dip"
|
||||
android:layout_width="100dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@android:string/ok"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</TableRow>
|
||||
|
||||
</TableLayout>
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:title="Security"
|
||||
android:id="@+id/menu_security"
|
||||
android:icon="@drawable/ic_menu_lock_holo_dark"
|
||||
android:icon="@drawable/ic_menu_unlock_holo_dark"
|
||||
android:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<item android:title="@string/conversation_insecure__menu_start_secure_session"
|
||||
|
||||
@@ -2,12 +2,9 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:title="@string/conversation_secure_verified__menu_security"
|
||||
android:id="@+id/menu_security"
|
||||
android:icon="@drawable/ic_menu_lock_verified_holo_dark"
|
||||
android:icon="@drawable/ic_menu_lock_holo_dark"
|
||||
android:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<item android:title="@string/conversation_secure_verified__menu_verify_session"
|
||||
android:id="@+id/menu_verify_session" />
|
||||
|
||||
<item android:title="@string/conversation_secure_verified__menu_verify_recipient"
|
||||
android:id="@+id/menu_verify_recipient"/>
|
||||
|
||||
@@ -2,15 +2,12 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:title="@string/conversation_secure_verified__menu_security"
|
||||
android:id="@+id/menu_security"
|
||||
android:icon="@drawable/ic_menu_lock_unverified_holo_dark"
|
||||
android:icon="@drawable/ic_menu_lock_holo_dark"
|
||||
android:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<item android:title="@string/conversation_secure_verified__menu_verify_session"
|
||||
android:id="@+id/menu_verify_session" />
|
||||
|
||||
<item android:title="@string/conversation_secure_verified__menu_verify_recipient"
|
||||
android:id="@+id/menu_verify_recipient"/>
|
||||
|
||||
<item android:title="@string/conversation_secure_verified__menu_abort_secure_session"
|
||||
android:id="@+id/menu_abort_session"/>
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">امسح كل الرسائل القديمة الآن؟</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">هل انت متأكد من مسح كل الرسائل بالمحادثات وابقاء أحدث %s رسالة فقط؟</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">حذف</string>
|
||||
<string name="ApplicationPreferencesActivity_my">أنا</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">صورة</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">فيديو</string>
|
||||
@@ -73,6 +74,8 @@
|
||||
<string name="ConversationActivity_group_conversation_recipients">مستقبلي رسائل المحادثة الجماعية</string>
|
||||
<string name="ConversationActivity_group_conversation">محادثة جماعية</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d مشاركين في المجموعة</string>
|
||||
<string name="ConversationActivity_saving_draft">حفظ مسودة</string>
|
||||
<string name="ConversationActivity_invalid_recipient">جهة اتصال غير صحيحة!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">تفاصيل الرسالة</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">المرسل: %1$s\nالاتصال: %2$s\nارسال/استقبال: %3$s</string>
|
||||
@@ -85,22 +88,33 @@
|
||||
<!--ConversationListFragment-->
|
||||
<string name="ConversationListFragment_delete_threads_question">حذف المحادثة؟</string>
|
||||
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">هل تريد حذف كل المحادثات المختارة نهائياَ؟</string>
|
||||
<string name="ConversationListFragment_deleting">مسح</string>
|
||||
<string name="ConversationListFragment_deleting_selected_threads">مسح المحادثات المختارة</string>
|
||||
<!--ConversationListItem-->
|
||||
<string name="ConversationListItem_key_exchange_message">رسالة تبادل المفاتيح</string>
|
||||
<!--KeyScanningActivity-->
|
||||
<string name="KeyScanningActivity_no_scanned_key_found_exclamation">لم يتم العثور على مفتاح!</string>
|
||||
<!--MmsDownloader-->
|
||||
<string name="MmsDownloader_no_connectivity_available_for_mms_download_try_again_later">لا يوجد اتصال لرسائل الوسائط المتعددة. حاول مرة أخرى لاحقاً.</string>
|
||||
<string name="MmsDownloader_error_storing_mms">خطأ بتخزين الرسالة!</string>
|
||||
<string name="MmsDownloader_error_connecting_to_mms_provider">خطأ في الاتصال مع مزود خدمة رسالة الوسائط المتعددة...</string>
|
||||
<!--NotificationMmsMessageRecord-->
|
||||
<string name="NotificationMmsMessageRecord_multimedia_message">رسالة الوسائط المتعددة</string>
|
||||
<!--PassphraseChangeActivity-->
|
||||
<string name="PassphraseChangeActivity_passphrases_dont_match_exclamation">العبارة السرية غير متطابقة!</string>
|
||||
<string name="PassphraseChangeActivity_incorrect_old_passphrase_exclamation">العبارة السرية القديمة غير صحيحة!</string>
|
||||
<!--PassphraseCreateActivity-->
|
||||
<string name="PassphraseCreateActivity_passphrases_dont_match">العبارات السرية لا تتطابق</string>
|
||||
<string name="PassphraseCreateActivity_you_must_specify_a_password">يجب أن تحدد كلمة سرية</string>
|
||||
<!--PassphrasePromptActivity-->
|
||||
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">عبارة سرية غير صحيحة!</string>
|
||||
<!--PromptApnActivity-->
|
||||
<string name="PromptApnActivity_you_must_specify_an_mmsc_url_for_your_carrier">يجب أن تحدد عنوان أو رابط لمركز رسائل الوسائط المتعددة.</string>
|
||||
<string name="PromptApnActivity_mms_settings_updated">تم تعديل اعدادات رسائل الوسائط المتعددة</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">يمكنك تعديل هذه البيانات من اعدادات تكست سكيور بأي وقت.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">خطأ:\n\nلقد استقبلت مفتاح عام خطأ. لا يمكن الاستمرار بهذا المفتاح، من فضلك أعد بدء قناة التشفير</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">خطأ:\n\nلقد استقبلت مفتاح عام من نوعية غير مدعومة، لا يمكن الاستمرار. من فضلك أعد بدء قناة التشفير.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">لقد استقبلت مفتاح عام خطأ. لا يمكن الاستمرار بهذا المفتاح، من فضلك أعد بدء قناة التشفير</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">لقد استقبلت مفتاح عام من نوعية غير مدعومة، لا يمكن الاستمرار. من فضلك أعد بدء قناة التشفير.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">رسالة تبادل المفاتيح هذه لا تحتوي على توقيع هوية الكترونية.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">رسالة تبادل المفاتيح هذه تحتوي على توقيع هوية الكترونية، لكنك لا تثق بها.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">رسالة تبادل المفاتيح هذه تحتوي على توقيع هوية الكترونية موثوق بها و تخص: %s</string>
|
||||
@@ -110,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">لقد استقبلت رسالة تبادل مفاتيح من %s. لقد قمت مسبقاً ببدء قناة تشفير مع جهة الاتصال هذه، و بقبولك لهذا المفتاح سوف تقوم بإكمال تبادل مفاتيح التشفير. هل تود إكمال عملية تبادل المفاتيح؟</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">لقد قمت بإرسال رسالة تبادل مفاتيح مع %s و لكنك لم تحصل على رد حتى الان.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">لقد استقبلت رسالة تبادل مفاتيح من %s . لا يوجد لديك قنوات تشفير حالية مع جهة الاتصال هذه، هل تريد اكمال عملية تبادل المفاتيح؟</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">المفتاح لجهة الاتصال هذه مختلف عن المرة السابقة. هذا قد يعني ان هناك محاولة لاعتراض اتصالاتك، أو ان جهة الاتصال قام\قامت بإعادة تنصيب تكست سيكيور لديهم.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">ربما تود التحقق من جهة الاتصال هذه</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">التوقيع لجهة الاتصال هذه معتمد لديك، لكنك قمت بتعطيل خاصية اكمال تبادل المفاتيح اوتوماتيكياً</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">غير قادر على عرض مفتاح الهوية المحتوي على أخطاء!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">حذف الهوية؟</string>
|
||||
@@ -164,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">لم يتم التحقق!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">المفتاح الذي تم مسحه ضوئياً متطابق!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">تم التحقق!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">بصمة مفتاح الهوية</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">البدء بالاتصال رغم وجود طلب مسبق؟</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">لقد قمت بارسال طلب انشاء قناة اتصال مسبقاً لجهة الاتصال هذه، هل تريد ارسال طلب آخر؟ هذه العملية ستلغي الطلب السابق.</string>
|
||||
@@ -184,14 +202,27 @@
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">خطأ بالرسالة المشفرة...</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">الرسالة مشفرة دون وجود قناة اتصال...</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">غير قادر على ارسال الرسالة حاليا.</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">جاري الاستيراد...</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">جاري استيراد الرسائل النصية</string>
|
||||
<!--KeyCachingService-->
|
||||
<string name="KeyCachingService_textsecure_passphrase_cached">تم حفظ العبارة السرية مؤقتاً</string>
|
||||
<string name="KeyCachingService_passphrase_cached">تم حفظ العبارة السرية مؤقتاً</string>
|
||||
<!--MessageNotifier-->
|
||||
<string name="MessageNotifier_d_new_messages">(%d) رسائل جديدة</string>
|
||||
<string name="MessageNotifier_most_recent_from_s">آخر رسالة من: %s</string>
|
||||
<string name="MessageNotifier_key_exchange">تبادل المفاتيح</string>
|
||||
<string name="MessageNotifier_encrypted_message">رسالة مشفرة</string>
|
||||
<string name="MessageNotifier_corrupted_ciphertext">رسالة خاطئة</string>
|
||||
<string name="MessageNotifier_no_subject">(من دون عنوان)</string>
|
||||
<string name="MessageNotifier_message_delivery_failed">خطأ بإيصال الرسالة</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">فشل في توصيل الرسالة</string>
|
||||
<string name="MessageNotifier_error_delivering_message">خطأ بالارسال</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">اعتبرها جميعاً رسائل مقروءة</string>
|
||||
<string name="MessageNotifier_mark_as_read">اعتبرها مقروءة</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">غير قادر على ارسال الرسالة حاليا. سيتم ارسالها عندما تتوفر الخدمة مرة أخرى.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
<string name="auto_initiate_activity__you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_secure_session">وصلتك رسالة من شخص لديه القدرة على بدء قناة تشفير. هل تريد بدء قناة تشفير حتى يكون الاتصال سري و آمن؟</string>
|
||||
<string name="auto_initiate_activity__initiate_exchange">البدء بتبادل المفاتيح</string>
|
||||
@@ -222,14 +253,30 @@
|
||||
<string name="create_passphrase_activity__please_choose_a_passphrase_that_will_be_used_to_locally_encrypt_your_data_this_should_be_a_strong_passphrase">الرجاء اختيار عبارة سرية ليتم استخدامها بتشفير البيانات المحلية. يجب أن تكون عبارة سرية قوية و صعبة التخمين.</string>
|
||||
<string name="create_passphrase_activity__passphrase">العبارة السرية:</string>
|
||||
<string name="create_passphrase_activity__repeat">تكرار:</string>
|
||||
<string name="create_passphrase_activity__continue">متابعة</string>
|
||||
<string name="create_passphrase_activity__generating_secrets">جاري إنشاء الأسرار</string>
|
||||
<!--database_migration_activity-->
|
||||
<string name="database_migration_activity__would_you_like_to_import_your_existing_text_messages">هل تود استيراد الرسائل النصية إلى قواعد بيانات تكست سيكيور المشفرة؟</string>
|
||||
<string name="database_migration_activity__the_default_system_database_will_not_be_modified">لن يتم تغيير قاعدة البيانات الأساسية بأي طريقة.</string>
|
||||
<string name="database_migration_activity__skip">تجاهل</string>
|
||||
<string name="database_migration_activity__import">استيراد</string>
|
||||
<string name="database_migration_activity__this_could_take_a_moment_please_be_patient">قد تستغرق العملية عدة دقائق. يرجى الانتظار. سيتم تنبيهك عند انتهاء العملية.</string>
|
||||
<string name="database_migration_activity__importing">مهم!</string>
|
||||
<!--database_upgrade_activity-->
|
||||
<string name="database_upgrade_activity__updating_database">تحديث قواعد البيانات</string>
|
||||
<!--prompt_passphrase_activity-->
|
||||
<string name="prompt_passphrase_activity__textsecure_passphrase">العبارة السرية لتكست سيكيور</string>
|
||||
<string name="prompt_passphrase_activity__unlock">فتح القفل</string>
|
||||
<!--prompt_apn_activity-->
|
||||
<string name="prompt_apn_activity__textsecure_requires_apn_settings_to_deliver_media_messages_via_your_wireless_carrier">تكست سيكيور يحتاج لإعدادات الشبكة APN لتوصيل رسائل الوسائط المتعددة. جهازك لا يوفر هذه المعلومة.</string>
|
||||
<string name="prompt_apn_activity__to_send_media_messages_please_complete_the_necessary_apn_information_below">لإرسال رسائل الوسائط المتعددة، يجب عليك اكمال اعدادات الشبكة APN. تحتاج لادخال هذه المعلومة مرة واحدة فقط.</string>
|
||||
<string name="prompt_apn_activity__mmsc_url_required">عنوان مركز رسائل الوسائط المتعددة (الزامي)</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_host_optional">عنوان بروكسي مركز رسائل الوسائط المتعددة (اختياري):</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_port_optional">منفذ بروكسي مركز رسائل الوسائط المتعددة (اختياري):</string>
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">قناة اتصال</string>
|
||||
<string name="receive_key_activity__identities">الهويات</string>
|
||||
<string name="receive_key_activity__complete_exchange">انهاء التبادل</string>
|
||||
<string name="receive_key_activity__complete">انتهاء</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">إلى</string>
|
||||
<!--review_identities-->
|
||||
@@ -264,6 +311,7 @@
|
||||
<string name="AndroidManifest__complete_key_exchange">اكمال تبادل المفاتيح</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">تحقق من الهوية المستوردة</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">عام</string>
|
||||
<string name="preferences__use_settings">استخدم الاعدادات</string>
|
||||
<string name="preferences__pref_all_sms_title">استخدام لكل الرسائل القصيرة</string>
|
||||
<string name="preferences__pref_all_mms_title">استخدام لكل رسائل الوسائط المتعددة</string>
|
||||
@@ -276,7 +324,9 @@
|
||||
<string name="preferences__choose_identity">اختر هوية</string>
|
||||
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">اختر جهة الاتصال من القائمة</string>
|
||||
<string name="preferences__encryption_settings">اعدادات التشفير</string>
|
||||
<string name="preferences__change_passphrase">غير العبارة السرية</string>
|
||||
<string name="preferences__change_my_passphrase">غير عبارتي السرية</string>
|
||||
<string name="preferences__complete_key_exchanges">اكمال تبادل المفاتيح</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">أكمل تبادل المفاتيح اوتوماتيكياً لمحادثات جديدة او قديمة بنفس مفتاح الهوية</string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">أضف وسم مسافة فارغة بنهاية كل رسالة غير مشفرة</string>
|
||||
<string name="preferences__include_whitespace_tag">أضف وسم مسافة فارغة</string>
|
||||
@@ -287,9 +337,12 @@
|
||||
<string name="preferences__pref_timeout_interval_dialogtitle">اختيار مدة حفظ العبارة السرية مؤقتاً</string>
|
||||
<string name="preferences__pref_timeout_interval_title">مدة الصلاحية</string>
|
||||
<string name="preferences__the_amount_of_time_to_wait_before_forgetting_passphrase">الوقت اللازم ليتم مسح العبارة السرية من الذاكرة</string>
|
||||
<string name="preferences__identity_key_settings">مفاتيح الهوية</string>
|
||||
<string name="preferences__view_my_identity_key">اعرض مفتاح هويتي</string>
|
||||
<string name="preferences__export_my_identity_key">تصدير مفتاح الهوية الخاص بي</string>
|
||||
<string name="preferences__import_contacts_key">استيراد مفتاح خاص بجهة اتصال</string>
|
||||
<string name="preferences__import_an_identity_key_from_a_contact">استيراد مفتاح هوية من جهة اتصال</string>
|
||||
<string name="preferences__manage_identity_keys">إدارة مفاتيح الهوية</string>
|
||||
<string name="preferences__manage_configured_identity_keys">إدارة مفاتيح الهوية التي تم ضبطها</string>
|
||||
<string name="preferences__notification_settings">خيارات التنبيه</string>
|
||||
<string name="preferences__notifications">التنبيهات</string>
|
||||
@@ -315,6 +368,9 @@
|
||||
<string name="preferences__normal">طبيعي</string>
|
||||
<string name="preferences__slow">بطىء</string>
|
||||
<string name="preferences__custom">مخصص</string>
|
||||
<string name="preferences__advanced">متقدم</string>
|
||||
<string name="preferences__passphrase">العبارة السرية</string>
|
||||
<string name="preferences__advanced_mms_access_point_names">مركز رسائل الوسائط المتعددة الاحتياطي</string>
|
||||
<string name="preferences__enable_fallback_mmsc">شغل مركز رسائل الوسائط المتعددة الاحتياطي</string>
|
||||
<string name="preferences__use_mmsc_information_configured_here_when_system_apn_information_is_unavailable">استخدم مركز رسائل الوسائط المتعددة هنا اذا لم تتوفر بيناتات اتصال النظام APN</string>
|
||||
<string name="preferences__mmsc_url_required">عنوان مركز رسائل الوسائط المتعددة (الزامي)</string>
|
||||
@@ -356,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">بحث</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">الأمن</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">تحقق من قناة الاتصال</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">تحقق من مستقبل الرسالة</string>
|
||||
@@ -366,6 +421,9 @@
|
||||
<string name="conversation__menu_delete_thread">مسح المحاذفة</string>
|
||||
<!--conversation_group_options-->
|
||||
<string name="convesation_group_options__recipients_list">قائمة المشاركين</string>
|
||||
<string name="conversation_group_options__delivery">التوصيل</string>
|
||||
<string name="conversation_group_options__conversation">محادثة</string>
|
||||
<string name="conversation_group_options__broadcast">برودكاست\اعلان</string>
|
||||
<!--key_scanning-->
|
||||
<string name="key_scanning__menu_compare">قارن</string>
|
||||
<string name="key_scanning__menu_get_scanned_to_compare">قم بالمسح الضوئي للمقارنة</string>
|
||||
@@ -379,8 +437,8 @@
|
||||
<string name="text_secure_normal__menu_import">استيراد</string>
|
||||
<string name="text_secure_normal__menu_export">تصدير</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">مسح العبارة السرية</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">اعتبارها رسائل مقروءة</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">تم التحقق!</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<string name="delete">གསུབ། </string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">ཡིག་ཆའི་མཛོད་དང་སྒྲིག་བཟོ་རྣམས་ནང་འཇུག་བྱེད་རྒྱུ་ཡིན་ནམ།</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">ཉེན་སྲུང་འཕྲུལ་ཆས་ཀྱི་བྱང་བུ་(SD Card) ནས་གཡག་འཕྲིན་གི་མཛོད་དང་ལྡེ་མིག སྒྲིག་བཟོ་རྣམས་ནང་འཇུག་བྱེད་རྒྱུ་ཡིན་ནམ།\nཉེན་བརྡ། འདི་ཡིས་ད་ཡོད་འཕྲིན་ཐུང་དང་ལྡེ་མིག སྒྲིག་བཟོ་སོགས་གསུབ་གི་རེད།</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">ཡིག་ཆའི་མཛོད་དང་ལྡེ་མིག་རྣམས་ནང་འཇུག་བྱེད་བཞིན་ཡོད།</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">ཁྱོད་ཀྱི་འཕྲིན་ཐུང་གི་མཛོད་དང་ལྡེ་མིག སྒྲིག་བཟོ་རྣམས་ནང་འཇུག་བྱེད་བཞིན་ཡོད།</string>
|
||||
<string name="ApplicationExportManager_export_database_question">ཡིག་ཆའི་མཛོད་ཕྱི་ལ་དབོར་རྒྱུ་ཡིན་ནམ།</string>
|
||||
@@ -45,7 +44,6 @@
|
||||
<string name="ConversationItem_saving_attachment">ཟུར་སྣོན་ཉར་ཚགས་བྱེད་བཞིན་ཡོད།</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">ཉེན་སྲུང་འཕྲུལ་ཆས་ཀྱི་བྱང་བུའི་(SD Card) ནང་ཟུར་སྣོན་ཉར་ཚགས་བྱེད་བཞིན་ཡོད།</string>
|
||||
<string name="ConversationItem_save_to_sd_card">ཉེན་སྲུང་འཕྲུལ་ཆས་ཀྱི་བྱང་བུའི་(SD Card) ནང་ཉར་ཚགས་བྱེད་རྒྱུ་ཡིན་ནམ།</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">བརྒྱུད་ལམ་འདི་ཡིག་ཆའི་མཛོད་ཀྱི་གསང་སྡོམ་ཁོངས་སུ་ཉར་ཡོད་། ཁྱེད་ནས་ཉེན་སྲུང་འཕྲུལ་ཆའི་བྱང་བུའི་(SD Card) ནང་དུ་ཉར་ཚགས་བྱས་བའི་པར་གཞི་དེ་གསང་སྡོམ་བྱས་མི་འདུག ཁྱེད་ཀྱིས་མུ་མཐུད་ན་འདོད་དམ།</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">ཉེན་སྲུང་འཕྲུལ་ཆས་ཀྱི་བྱང་བུའི་ནང་ཟུར་སྣོན་ཉར་ཚགས་བྱེད་སྐབས་ནོར་འཁྲུལ་བྱུང་འདུག </string>
|
||||
<string name="ConversationItem_success_exclamation">ལེགས་འགྲུབ། </string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">ཉེན་སྲུང་འཕྲུལ་ཆས་ཀྱི་བྱང་བུའི་(SD Card) ནང་དུ་བླུགས་ཐུབ་མི་འདུག </string>
|
||||
@@ -110,8 +108,6 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">སྣ་མང་བརྒྱུད་ལམ་ཅན་གྱི་འཕྲིན་ཐུང་གི་སྒྲིག་བཟོར་ཁ་སྣོན་བྱས་ཡོད། </string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">ཁྱེད་ཀྱིས་དུས་ཚོད་གང་རུང་དུ་གཡག་འཕྲིན་སྒྲིག་བཟོའི་ཐོ་བྱང་ནས་འདི་དག་གི་ངོ་བོར་འགྱུར་བ་བཏང་ཆོག </string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ནོར་འཁྲུལ། ཁྱེད་ལ་མི་གཞན་ནས་ངན་ལྷད་ཅན་གྱི་ལྡེ་མིག་ཞིག་འབྱོར་འདུག ལྡེ་མིག་འདི་ལས་སྣོན་བྱེད་མི་ཐུབ། བདེ་འཇགས་གླེང་མོལ་བསྐྱར་དུ་འགོ་འཛུགས་རོགས། </string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ནོར་འཁྲུལ། ཁྱེད་ལ་པར་གཞི་གྲོས་མཐུན་གྱིས་རྒྱབ་སྐྱོར་མ་བྱས་བའི་སྤྱི་སྤྱོད་ལྡེ་མིག་ཞིག་འབྱོར་འདུག ལྡེ་མིག་དེ་ལས་སྣོན་བྱེད་ཐུབ་གི་མ་རེད། སྐུ་མཁྱེན། ཉེན་སྲུང་གི་གླེང་མོལ་ཞིག་བསྐྱར་དུ་འགོ་ཚུགས། </string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">ལྡེ་མིག་བརྗེ་ལེན་བྱེད་རྒྱུའི་བརྡ་ལན་འདིའི་ནང་ངོས་འཛིན་མིང་རྟགས་མེད།</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">ལྡེ་མིག་བརྗེ་ལེན་བྱེད་རྒྱུའི་བརྡ་ལན་འདིའི་ནང་ངོས་འཛིན་མིང་རྟགས་ཡོད། ཡིན་ནའང་། ཁྱེད་ཀྱིས་དེ་ལ་ད་དུང་ཡང་ཡིད་ཆེས་བྱེད་ཀྱི་མི་འདུག </string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">ལྡེ་མིག་བརྗེ་ལེན་བྱེད་རྒྱུའི་བརྡ་ལན་འདིའི་ནང་ངོས་འཛིན་མིང་རྟགས་ཡོད་པ་དེར་ཁྱེད་ཀྱིས་ཡིད་ཆེས། : %s</string>
|
||||
@@ -265,7 +261,6 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">གླེང་མོལ། </string>
|
||||
<string name="receive_key_activity__identities">ངོས་འཛིན། </string>
|
||||
<string name="receive_key_activity__complete_exchange">བརྗེ་ལེན་ཚར་བ་བྱོས། </string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">གཏོང་ཡུལ།</string>
|
||||
<!--review_identities-->
|
||||
@@ -392,7 +387,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">འཚོལ།</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">ཉེན་སྲུང་།</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">གླེང་མོལ་ཁུངས་སྐྱེལ་བྱོས། </string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">འཕྲིན་ཐུང་འབྱོར་ཡུལ་དེ་ཁུངས་སྐྱེལ་བྱོས། </string>
|
||||
@@ -417,6 +411,5 @@
|
||||
<string name="text_secure_normal__menu_clear_passphrase">གསང་ཚིག་མེད་པ་བཟོས།</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">ཁུངས་སྐྱེལ་བྱས་ཟིན།</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Alle alten Nachrichten löschen?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Bist du dir sicher, dass du alle Konversationen auf die letzten %s Nachrichten kürzen willst?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Löschen</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Meine</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Bild</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Gruppengespräch</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d Teilnehmer in Gruppe</string>
|
||||
<string name="ConversationActivity_saving_draft">Entwurf speichern...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Ungültiger Empfänger</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Nachrichtendetails</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Sender: %1$s Transport: %2$s Gesendet/Empfangen:%3$s</string>
|
||||
@@ -93,9 +95,11 @@
|
||||
<!--KeyScanningActivity-->
|
||||
<string name="KeyScanningActivity_no_scanned_key_found_exclamation">Kein eingelesener Schlüssel gefunden!</string>
|
||||
<!--MmsDownloader-->
|
||||
<string name="MmsDownloader_no_connectivity_available_for_mms_download_try_again_later">Keine Verbindung für MMS-Download verfügbar, versuchen Sie es später noch einmal..</string>
|
||||
<string name="MmsDownloader_error_storing_mms">Fehler beim Speichern der MMSI</string>
|
||||
<string name="MmsDownloader_error_connecting_to_mms_provider">Fehler beim Verbinden zum MMS Provider...</string>
|
||||
<!--NotificationMmsMessageRecord-->
|
||||
<string name="NotificationMmsMessageRecord_multimedia_message">Multimedianachricht</string>
|
||||
<!--PassphraseChangeActivity-->
|
||||
<string name="PassphraseChangeActivity_passphrases_dont_match_exclamation">Passwörter stimmen nicht überein!</string>
|
||||
<string name="PassphraseChangeActivity_incorrect_old_passphrase_exclamation">Das eingegebene alte Passwort ist falsch!</string>
|
||||
@@ -110,7 +114,7 @@
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Du kannst diese Werte jederzeit im TextSecure Einstellungsmenü ändern.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">FEHLER:\n\nSie haben einen beschädigten öffentlichen Schlüssel erhalten. Dieser Schlüssel kann nicht weiter verarbeitet werden, bitte initieren Sie eine neue sichere Sitzung.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">FEHLER:\n\nSie haben einen öffentlichen Schlüssl erhalten der eine nicht unterstütze Version des Protokolls verwendet. Dieser Schlüssel kann nicht weiter verarbeitet werden, bitte initieren Sie eine neue sichere Sitzung.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">FEHLER: Sie haben einen öffentlichen Schlüssel einer nicht unterstützten Version des Protokolls erhalten. Dieser Schlüssel kann nicht weiter verarbeitet werden, bitte initieren Sie eine neue sichere Sitzung.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Diese Schlüsselaustauschnachricht ist nicht signiert.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Diese Schlüsselaustauschnachricht ist von einer Quelle signiert, der Sie noch nicht vertrauen.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Diese Schlüsselaustauschnachricht enthält eine vertraute Signatur von: %s</string>
|
||||
@@ -120,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Sie haben eine Schlüsselaustauschnachricht von %s erhalten. Sie haben schonmal ein Sitzung mit diesem Kontakt initiiert. Wenn sie den Schlüssel akzeptieren, wird der Schlüsselaustausch abgeschlossen. Wollen Sie den Schlüsselaustausch nun abschließen?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Sie haben eine Schlüsselaustauschnachricht an %s gesendet, aber noch keine Antwort erhalten.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Sie haben eine Schlüsselaustauschnachricht von %s erhalten. Es existiert momentan keine Sitzung mit diesem Kontakt. Wollen die den Schlüsselaustausch abschließen?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">Die Signatur dieses Schlüsselaustauschs ist eine andere als die schon von diesem Kontakt erhaltenen.\nDas könnte bedeuten, dass jemand versucht, Ihr Gespräch abzufangen oder\ndass dieser Kontakt TextSecure neu installiert hat und nun einen neuen Schlüssel benutzt.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Sie können diesen Kontakt überprüfen.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">Die Signatur dieses Schlüsselaustauschs ist vertrauenswürdig, aber die Einstellung \'Schlüsselaustausch automatisch vervollständigen\' ist nicht aktiv.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Der beschädigte Schlüssel kann nicht angezeigt werden!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Identität löschen?</string>
|
||||
@@ -174,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NICHT verifiziert!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">Der gescannte Schlüssel stimmt überein!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Verifiziert!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Fingerabdruck</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Trotz vorhandener Anfragen initiieren?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Sie haben bereits eine Sitzungsaufbau Nachricht an den Empfänger gesendet, sind Sie sicher dass Sie eine weitere senden wollen? Dies macht die erste Nachricht ungültig.</string>
|
||||
@@ -194,6 +202,7 @@
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">Falsch verschlüsselte MMS...</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">MMS wurde für einen nicht existierende Sitzung verschlüsselt...</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">MMS Nachricht kann gerade nicht gesendet werden.</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">Import in Gange</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">Importiert Nachrichten</string>
|
||||
@@ -210,7 +219,10 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Senden fehlgeschlagen.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Senden fehlgeschlagen.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Senden fehlgeschlagen.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Alle als gelesen markieren</string>
|
||||
<string name="MessageNotifier_mark_as_read">Als gelesen markieren</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">SMS kann gerade nicht gesendet werden. Wird gesendet sobald der Dienst wieder verfügbar ist.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
<string name="auto_initiate_activity__you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_secure_session">Sie haben eine Nachricht von jemand empfangen, der verschlüsselte Sitzungen über TextSecure unterstützt. Wollen Sie jetzt eine sicher Sitzung aufbauen?</string>
|
||||
<string name="auto_initiate_activity__initiate_exchange">Austausch initieren</string>
|
||||
@@ -251,17 +263,20 @@
|
||||
<string name="database_migration_activity__this_could_take_a_moment_please_be_patient">Das könnte eine Weile dauern. Bitte sei geduldig, wir benachrichtigen dich, wenn der Import abgeschlossen ist.</string>
|
||||
<string name="database_migration_activity__importing">IMPORTIERT</string>
|
||||
<!--database_upgrade_activity-->
|
||||
<string name="database_upgrade_activity__updating_database">Datenbank wird aktualisiert...</string>
|
||||
<!--prompt_passphrase_activity-->
|
||||
<string name="prompt_passphrase_activity__textsecure_passphrase">TEXTSECURE PASSPHRASE</string>
|
||||
<string name="prompt_passphrase_activity__unlock">Entsperren</string>
|
||||
<!--prompt_apn_activity-->
|
||||
<string name="prompt_apn_activity__textsecure_requires_apn_settings_to_deliver_media_messages_via_your_wireless_carrier">TextSecure benötigt APN-Parameter um MMS über den Mobilfunkanbieter zu senden. Ihr Gerät gibt diese Informationen nicht preis, was gelegentlich auf restriktive Konfigurationen oder Geräte zutrifft.</string>
|
||||
<string name="prompt_apn_activity__to_send_media_messages_please_complete_the_necessary_apn_information_below">Um MMS zu verschicken, füllen Sie bitte die nötige APN Information aus. Die Werte für das Netzwerk können meist gefunden werden, indem man eine Suche ausführt \'&lt;Ihr Netzwerk&gt; APN\'. Diese Operation muss nur einmal ausgeführt werden.</string>
|
||||
<string name="prompt_apn_activity__mmsc_url_required">MMSC URL (BENÖTIGT):</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_host_optional">MMS PROXY HOST (OPTIONAL):</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_port_optional">MMS PROXY PORT (OPTIONAL):</string>
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sitzung</string>
|
||||
<string name="receive_key_activity__identities">Identitäten</string>
|
||||
<string name="receive_key_activity__complete_exchange">Vollständiger Austausch</string>
|
||||
<string name="receive_key_activity__complete">Vollständig</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">An</string>
|
||||
<!--review_identities-->
|
||||
@@ -296,6 +311,7 @@
|
||||
<string name="AndroidManifest__complete_key_exchange">Vollständiger Schlüsselaustausch</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">Importierte Identität verifizieren</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">Allgemein</string>
|
||||
<string name="preferences__use_settings">Nutzungs-Einstellungen</string>
|
||||
<string name="preferences__pref_all_sms_title">Für alle SMS benutzen</string>
|
||||
<string name="preferences__pref_all_mms_title">Für alle MMS benutzen</string>
|
||||
@@ -308,7 +324,9 @@
|
||||
<string name="preferences__choose_identity">Identität auswählen</string>
|
||||
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">Wählen Sie den Kontakt Eintrag aus der Kontakliste.</string>
|
||||
<string name="preferences__encryption_settings">Verschlüsselungs-Einstellungen</string>
|
||||
<string name="preferences__change_passphrase">Passwort ändern</string>
|
||||
<string name="preferences__change_my_passphrase">Mein Passwort ändern</string>
|
||||
<string name="preferences__complete_key_exchanges">Schlüsselaustausch abschliessen</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">Automatischer Schlüsselaustausch für neue Sitzungen und bestehende Sitzungen mit demselben persönlichen Schlüssel</string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">Leerzeichen am Ende jeder unverschlüsselten Nachricht einfügen</string>
|
||||
<string name="preferences__include_whitespace_tag">Leerzeichen einfügen</string>
|
||||
@@ -319,9 +337,12 @@
|
||||
<string name="preferences__pref_timeout_interval_dialogtitle">Auswahl des Passwort-Timeouts</string>
|
||||
<string name="preferences__pref_timeout_interval_title">Timeout-Dauer</string>
|
||||
<string name="preferences__the_amount_of_time_to_wait_before_forgetting_passphrase">Länge des Zeitraums, während dessen das Passwort im Speicher gehalten wird</string>
|
||||
<string name="preferences__identity_key_settings">Identitäten</string>
|
||||
<string name="preferences__view_my_identity_key">Meinen persönlichen Schlüssel anzeigen</string>
|
||||
<string name="preferences__export_my_identity_key">Meinen persönlichen Schlüssel exportieren</string>
|
||||
<string name="preferences__import_contacts_key">Schlüssel eines Kontakts importieren</string>
|
||||
<string name="preferences__import_an_identity_key_from_a_contact">Schlüssel eines Kontakts importieren</string>
|
||||
<string name="preferences__manage_identity_keys">Schlüssel verwalten</string>
|
||||
<string name="preferences__manage_configured_identity_keys">Konfigurierte Schlüssel verwalten</string>
|
||||
<string name="preferences__notification_settings">Benachrichtigungs-Einstellungen</string>
|
||||
<string name="preferences__notifications">Benachrichtigungen</string>
|
||||
@@ -347,6 +368,11 @@
|
||||
<string name="preferences__normal">Mittel</string>
|
||||
<string name="preferences__slow">Langsam</string>
|
||||
<string name="preferences__custom">Benutzerdefiniert</string>
|
||||
<string name="preferences__advanced">Weitere Einstellungen</string>
|
||||
<string name="preferences__passphrase">Passwort</string>
|
||||
<string name="preferences__advanced_mms_access_point_names">Ersatz für MMSC</string>
|
||||
<string name="preferences__enable_fallback_mmsc">Ersatz für MMSC aktivieren</string>
|
||||
<string name="preferences__use_mmsc_information_configured_here_when_system_apn_information_is_unavailable">Sollten APN-Daten fehlen, die hier folgenden MMSC-Daten nutzen.</string>
|
||||
<string name="preferences__mmsc_url_required">MMSC URL(Benötigt)</string>
|
||||
<string name="preferences__mms_proxy_host_optional">MMS Poxy Host (Optional)</string>
|
||||
<string name="preferences__mms_proxy_port_optional">MMS Proxy Port (Optional)</string>
|
||||
@@ -360,6 +386,7 @@
|
||||
<string name="preferences__storage">Speicher</string>
|
||||
<string name="preferences__conversation_length_limit">Limit der Konversationslänge</string>
|
||||
<string name="preferences__trim_all_threads_now">Alle Konversationen kürzen</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Alle Gespräche scannen und Gesprächslängenbegrenzungen </string>
|
||||
<!--****************************************-->
|
||||
<!--menus-->
|
||||
<!--****************************************-->
|
||||
@@ -385,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Suche</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Sicherheit</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Sitzung verifizieren</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Empfänger verifizieren</string>
|
||||
@@ -395,6 +421,9 @@
|
||||
<string name="conversation__menu_delete_thread">Thread löschen</string>
|
||||
<!--conversation_group_options-->
|
||||
<string name="convesation_group_options__recipients_list">Teilnehmerliste</string>
|
||||
<string name="conversation_group_options__delivery">Zustellung</string>
|
||||
<string name="conversation_group_options__conversation">Gespräch</string>
|
||||
<string name="conversation_group_options__broadcast">Übertragen</string>
|
||||
<!--key_scanning-->
|
||||
<string name="key_scanning__menu_compare">Vergleichen</string>
|
||||
<string name="key_scanning__menu_get_scanned_to_compare">Zum Vergleich eingelesen werden</string>
|
||||
@@ -408,8 +437,8 @@
|
||||
<string name="text_secure_normal__menu_import">Import</string>
|
||||
<string name="text_secure_normal__menu_export">Export</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Passwort löschen</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Alle als gelesen markieren</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Verifiziert</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Borrar</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">¿Importar la base de datos y las preferencias?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">¿Desea importar la base de datos TextSecure, claves y preferencias desde la tarjeta SD?\n\nADVERTENCIA: Esto escribirá sobre cualquier mensaje existente, claves y preferencias anteriores.</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">¿Importar la base de datos de TextSecure, claves y configuración desde la tarjeta SD?⏎\n⏎\nADVERTENCIA: Esto escribirá sobre los mensajes, claves y preferencias existentes anteriores.</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importando base de datos y claves</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importando su base de datos SMS, claves y preferencias...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">¿Exportar la base de datos?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">¿Eliminar todos los mensajes viejos ahora?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">¿Estás seguro de que te gustaría recortar inmediatamente todos los hilos de conversación a los %s últimos mensajes?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Eliminar</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Mi</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Fotografía</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Vídeo</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Conversación en Grupo</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d receptores en grupo</string>
|
||||
<string name="ConversationActivity_saving_draft">Guardando borrador...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Receptor inválido!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Detalles del mensaje</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Remitente: %1$s\nTransporte: %2$s\nEnviado/Recibido:%3$s</string>
|
||||
@@ -97,6 +99,7 @@
|
||||
<string name="MmsDownloader_error_storing_mms">¡Error guardando MMS!</string>
|
||||
<string name="MmsDownloader_error_connecting_to_mms_provider">Error conectando al proveedor MMS...</string>
|
||||
<!--NotificationMmsMessageRecord-->
|
||||
<string name="NotificationMmsMessageRecord_multimedia_message">Mensaje Multimedia</string>
|
||||
<!--PassphraseChangeActivity-->
|
||||
<string name="PassphraseChangeActivity_passphrases_dont_match_exclamation">¡Las frases de contraseña no coinciden!</string>
|
||||
<string name="PassphraseChangeActivity_incorrect_old_passphrase_exclamation">¡Frase de contraseña anterior incorrecta!</string>
|
||||
@@ -110,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">Configuración MMS Actualizada</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Puedes modificar estos valores en el menú de configuración de TextSecure en cualquier momento.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERROR:\n\nHa recibido una clave pública dañada. Esta clave no puede ser procesada, por favor reinicie su sesión segura. </string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERROR:\n\nHa recibido una clave pública de una versión no soportada del protocolo. Esta clave no puede ser procesada, por favor reinicie la sesión segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERROR:⏎\n⏎\nHa recibido una clave pública dañada. Esta clave no puede ser procesada, por favor reinicie su sesión segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERROR:⏎\n⏎\nHa recibido una clave pública de una versión no soportada del protocolo. Esta clave no puede ser procesada, por favor reinicie la sesión segura.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Este mensaje de intercambio de claves no incluye una firma de identidad.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Este mensaje de intercambio de claves incluye una firma de identidad, pero aún no la considera de confianza.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Este mensaje de intercambio de claves incluye una firma de identidad en la que usted confía para: %s</string>
|
||||
@@ -121,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Ha recibido un mensaje de intercambio de claves de %s. Usted ha iniciado una sesión con este contacto previamente, y al aceptar esta clave completará el intercambio. ¿Le gustaría completar este intercambio de claves?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Ha iniciado un mensaje de intercambio de claves con %s pero aún no ha recibido una respuesta.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Ha recibido un mensaje de intercambio de claves de %s. Aún no ha iniciado una sesión con este contacto. ¿Le gustaría completar este intercambio de claves?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">La firma en este intercambio de claves es diferente de lo que previamente ha recibido de este contacto. Esto podría significar que alguien está intentando interceptar las comunicaciones o que este contacto simplemente reinstaló TextSecure y ahora tiene una nueva clave de identidad.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Puede que desees verificar⏎\neste contacto.⏎</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">La firma en este intercambio de claves está verificada, pero pero tiene la opción \'intercambio de clave completa automático\', desactivada.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">¡No es posible ver la clave de identidad dañada!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">¿Borrar identidad?</string>
|
||||
@@ -175,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">¡NO verificado!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">¡La clave escaneada coincide!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">¡Verificado!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Huella de Identidad</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">¿Iniciar a pesar de la petición existente?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Ya ha enviado una petición de inicio de sesión a este destinatario, ¿está seguro de que quiere enviar otra? Esto invalidará la primera petición. </string>
|
||||
@@ -195,6 +202,7 @@
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">Mensaje MMS mal cifrado</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">Mensaje MMS cifrado para sesión no existente...</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">Actualmente es imposible enviar tu mensaje MMS.</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">Importación en progreso</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">Importando Mensajes de Texto</string>
|
||||
@@ -211,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Entrega de mensaje fallida.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Fallo al entregar mensaje.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Error entregando mensaje.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Marcar todos como leídos</string>
|
||||
<string name="MessageNotifier_mark_as_read">Marcar como leídos</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Actualmente no se puede enviar tu mensaje SMS. Será enviado en cuanto el servicio esté disponible.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -253,6 +263,7 @@
|
||||
<string name="database_migration_activity__this_could_take_a_moment_please_be_patient">Esto podría tardar un rato. Por favor, se paciente, te informaremos cuando la importación sea completada.</string>
|
||||
<string name="database_migration_activity__importing">IMPORTANDO</string>
|
||||
<!--database_upgrade_activity-->
|
||||
<string name="database_upgrade_activity__updating_database">Actualizando Base de Datos...</string>
|
||||
<!--prompt_passphrase_activity-->
|
||||
<string name="prompt_passphrase_activity__textsecure_passphrase">FRASE DE CONTRASEÑA DE TEXTSECURE</string>
|
||||
<string name="prompt_passphrase_activity__unlock">Desbloquear</string>
|
||||
@@ -265,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sesión</string>
|
||||
<string name="receive_key_activity__identities">Identidades</string>
|
||||
<string name="receive_key_activity__complete_exchange">Completar el intercambio</string>
|
||||
<string name="receive_key_activity__complete">Completo</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Para</string>
|
||||
<!--review_identities-->
|
||||
@@ -300,6 +311,7 @@
|
||||
<string name="AndroidManifest__complete_key_exchange">Completar el intercambio de claves</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">Ver identidad importada</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">General</string>
|
||||
<string name="preferences__use_settings">Preferencias de uso</string>
|
||||
<string name="preferences__pref_all_sms_title">Usar para todos los SMS</string>
|
||||
<string name="preferences__pref_all_mms_title">Usar para todos los MMS</string>
|
||||
@@ -312,7 +324,9 @@
|
||||
<string name="preferences__choose_identity">Elegir identidad</string>
|
||||
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">Elija su registro de contacto de la lista de contactos.</string>
|
||||
<string name="preferences__encryption_settings">Preferencias de cifrado</string>
|
||||
<string name="preferences__change_passphrase">Cambiar frase de contraseña</string>
|
||||
<string name="preferences__change_my_passphrase">Cambiar mi frase de contraseña</string>
|
||||
<string name="preferences__complete_key_exchanges">Completar intercambio de claves</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">Completar automáticamente los intercambios de clave para nuevas sesiones o para sesiones existentes con la misma clave de identidad</string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">Incluir una etiqueta de espacio en blanco al final de cada mensaje no cifrado</string>
|
||||
<string name="preferences__include_whitespace_tag">Incluir etiqueta de espacio en blanco</string>
|
||||
@@ -323,9 +337,12 @@
|
||||
<string name="preferences__pref_timeout_interval_dialogtitle">Seleccionar la expiración de la frase de contraseña</string>
|
||||
<string name="preferences__pref_timeout_interval_title">Intervalo de expiración</string>
|
||||
<string name="preferences__the_amount_of_time_to_wait_before_forgetting_passphrase">El intervalo de tiempo a esperar antes de olvidar la frase de contraseña de la memoria</string>
|
||||
<string name="preferences__identity_key_settings">Claves de Identidad</string>
|
||||
<string name="preferences__view_my_identity_key">Ver mi clave de identidad</string>
|
||||
<string name="preferences__export_my_identity_key">Exportar mi clave de identidad</string>
|
||||
<string name="preferences__import_contacts_key">Importar la clave del contacto</string>
|
||||
<string name="preferences__import_an_identity_key_from_a_contact">Importar una clave de identidad de un contacto</string>
|
||||
<string name="preferences__manage_identity_keys">Administrar claves de identidad</string>
|
||||
<string name="preferences__manage_configured_identity_keys">Gestionar las claves de identidad configuradas</string>
|
||||
<string name="preferences__notification_settings">Preferencias de notificación</string>
|
||||
<string name="preferences__notifications">Notificaciones</string>
|
||||
@@ -351,6 +368,9 @@
|
||||
<string name="preferences__normal">Normal</string>
|
||||
<string name="preferences__slow">Despacio</string>
|
||||
<string name="preferences__custom">Personalizado</string>
|
||||
<string name="preferences__advanced">Avanzado</string>
|
||||
<string name="preferences__passphrase">Frase de contraseña</string>
|
||||
<string name="preferences__advanced_mms_access_point_names">Fallback MMSC</string>
|
||||
<string name="preferences__enable_fallback_mmsc">Activar Fallback MMSC</string>
|
||||
<string name="preferences__use_mmsc_information_configured_here_when_system_apn_information_is_unavailable">Usar la información MMSC configurada aquí cuando el sistema de información APN no está disponible.</string>
|
||||
<string name="preferences__mmsc_url_required">MMSC URL (Requerido)</string>
|
||||
@@ -392,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Buscar</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Seguridad</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verificar sesión</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verificar destinatario</string>
|
||||
@@ -402,6 +421,9 @@
|
||||
<string name="conversation__menu_delete_thread">Borrar conversación</string>
|
||||
<!--conversation_group_options-->
|
||||
<string name="convesation_group_options__recipients_list">Lista de receptores</string>
|
||||
<string name="conversation_group_options__delivery">Entrega</string>
|
||||
<string name="conversation_group_options__conversation">Conversación</string>
|
||||
<string name="conversation_group_options__broadcast">Transmisión</string>
|
||||
<!--key_scanning-->
|
||||
<string name="key_scanning__menu_compare">Comparar</string>
|
||||
<string name="key_scanning__menu_get_scanned_to_compare">Escanear mi clave para comparar</string>
|
||||
@@ -415,8 +437,8 @@
|
||||
<string name="text_secure_normal__menu_import">Importar</string>
|
||||
<string name="text_secure_normal__menu_export">Exportar</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Eliminar frase de contraseña</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Marcar Todos Leídos</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Verificado</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Effacer</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importer la base de données et les paramètres ?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importer la base de données, les clés et les paramètres de TextSecure depuis la carte SD ?\n\nAVERTISSEMENT: Cela détruira tous les messages, clés et paramètres existant !</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importer la base de données, les clés et les paramètres de TextSecure depuis la carte SD ?\n\nAVERTISSEMENT: Cela détruira tous les messages, clés et paramètres existants !</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importation de la base de données et des clés</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importation de votre base de données SMS, des clés et des paramètres…</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Exporter la base de données ?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Supprimer tous les anciens messages maintenant ?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Êtes-vous sur de vouloir réduire toutes les conversations aux %s messages les plus récents ?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Supprimer</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Mon</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Image</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Vidéo</string>
|
||||
@@ -42,10 +43,10 @@
|
||||
<string name="ConversationItem_expires_s">Expiration : %s</string>
|
||||
<string name="ConversationItem_error_sending_message">Erreur d’envoi du message</string>
|
||||
<string name="ConversationItem_sending">Envoi…</string>
|
||||
<string name="ConversationItem_saving_attachment">Sauver la pièce jointe</string>
|
||||
<string name="ConversationItem_saving_attachment">Sauvegarder la pièce jointe</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Enregistrement de pièce jointe sur la carte SD…</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Enregistrer sur la carte SD ?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Ce média est stocké dans une base de données chiffrée. La version que vous sauvez sur carte SD ne sera plus chiffrée, voulez-vous continuer ?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Ce média est stocké dans une base de données chiffrée. La version que vous sauvez sur carte SD ne sera plus chiffrée. Voulez-vous continuer ?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Erreur d’enregistrement de la pièce jointe sur la carte SD !</string>
|
||||
<string name="ConversationItem_success_exclamation">Réussite !</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Impossible d’écrire sur la carte SD !</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Conversation de Groupe</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d destinataires dans le groupe</string>
|
||||
<string name="ConversationActivity_saving_draft">Sauvegarde du brouillon…</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Destinataire invalide !</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Détails du message</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Expéditeur : %1$s\nTransport : %2$s\nEnvoyé / Reçu : %3$s</string>
|
||||
@@ -122,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Vous avez reçu un message d\'échange de clefs de %s. Vous avez déjà commencé une session avec ce contact, et en acceptant cette clef, vous allez compléter l\'échange de clef. Voulez vous compléter cet échange de clefs?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Vous avez commencé un échange de clefs avec %s mais n\'avez toujours pas reçu de réponse.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Vous avez reçu un message d\'échange de clefs de %s. Vous n\'avez pas encore de session avec ce contact, voulez vous compléter cet échange de clefs?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">La\nsignature de cet échange de clé est différente de celle que vous avez précédemment reçue de ce\ncontact. Cela peut signifier soit que quelqu’un essaie d’intercepter votre communication, soit\nque ce contact a simplement réinstallé TextSecure et a maintenant une nouvelle clé d’identité.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Peut-être devriez-vous\nvérifier ce contact.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">La\nsignature de cet échange de clé est digne de confiance, mais vous avez le paramètre\n« finaliser automatiquement les échanges de clés » désactivé.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Impossible de visualiser une clé d’identité corrompue !</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Supprimer l’identité ?</string>
|
||||
@@ -176,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NON vérifié !</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">Les clefs analysées correspondent!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Vérifié !</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Empreinte d’identité</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Initier malgré la demande existante ?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Vous avez déjà envoyé une demande d’initiation de session à ce destinataire, êtes-vous sûr de vouloir en envoyer une autre ? Cela invalidera la première demande.</string>
|
||||
@@ -213,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">La distribution du message a échoué.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Échec de distribution du message.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Erreur lors de la distribution du message.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Tout marquer comme lu</string>
|
||||
<string name="MessageNotifier_mark_as_read">Marquer comme lu</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Impossible d’envoyer votre message SMS pour le moment. Il sera envoyé lorsque le service deviendra disponible.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -268,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Session</string>
|
||||
<string name="receive_key_activity__identities">Identités</string>
|
||||
<string name="receive_key_activity__complete_exchange">Finaliser l\'échange</string>
|
||||
<string name="receive_key_activity__complete">Compléter</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">À</string>
|
||||
<!--review_identities-->
|
||||
@@ -404,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Chercher</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Sécurité</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Vérifier la Session</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Vérifier le Destinataire</string>
|
||||
@@ -433,6 +440,5 @@
|
||||
<string name="text_secure_normal__mark_all_as_read">Tout marquer comme Lu</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Vérifié</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<string name="delete">Cancella</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importare il Database e le Impostazioni?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importare il Database, le chiavi e le impostazioni di TextSecure dalla memoria SD?\nATTENZIONE: Questa operazione sovrascriverà ogni messaggio, chiave e impostazione esistente!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Sto importando il Database e le chiavi</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Sto importando il database degli SMS, le chiavi e le impostazioni...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Esportare il Database?</string>
|
||||
@@ -20,6 +19,7 @@
|
||||
<string name="ApplicationExportManager_import">Importa</string>
|
||||
<string name="ApplicationExportManager_export">Esporta</string>
|
||||
<!--ApplicationPreferencesActivity-->
|
||||
<string name="ApplicationPreferencesActivity_currently_s">In questo momento: %s</string>
|
||||
<string name="ApplicationPreferenceActivity_not_found_exclamation">Non trovato!</string>
|
||||
<string name="ApplicationPreferenceActivity_no_valid_identity_key_was_found_in_the_specified_contact">Nessuna chiave di identità valida trovata nel contatto selezionato.</string>
|
||||
<string name="ApplicationPreferenceActivity_you_don_t_have_an_identity_key_exclamation">Non hai una chiave di identità!</string>
|
||||
@@ -28,7 +28,15 @@
|
||||
<string name="ApplicationPreferenceActivity_you_need_to_have_entered_your_passphrase_before_importing_keys">Devi inserire la tua password prima di importare le chiavi...</string>
|
||||
<string name="ApplicationPreferenceActivity_you_need_to_have_entered_your_passphrase_before_managing_keys">Devi inserire la tua password prima di controllare le chiavi...</string>
|
||||
<string name="ApplicationPreferenceActivity_you_havent_set_a_passphrase_yet">Non hai ancora impostato una password!</string>
|
||||
<string name="ApplicationPreferencesActivity_messages_per_conversation">messagi per conversazione</string>
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Elimina tutti i messagi vecchi ora?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Sei sicuro che vorresti ritagliare subito tutte le thread delle conversazioni ai %s piu\' recenti messagi?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Elimina</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Il mio</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Immagine</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_audio">Audio</string>
|
||||
<!--ConversationItem-->
|
||||
<string name="ConversationItem_message_size_d_kb">Dimensione Messaggio: %d KB</string>
|
||||
<string name="ConversationItem_expires_s">Scadenza: %s</string>
|
||||
@@ -37,7 +45,6 @@
|
||||
<string name="ConversationItem_saving_attachment">Salvataggio Allegato</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Salvataggio allegato sulla memoria SD...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Salvare sulla memoria SD?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Questo file multimediale è stato salvato in un database cifrato. La versione del file salvata sulla memoria SD non sarà più cifrata, vuoi continuare?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Errore durante il salvataggio dell\'allegato nella memoria SD!</string>
|
||||
<string name="ConversationItem_success_exclamation">Completato!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Impossibile scrivere nella memoria SD!</string>
|
||||
@@ -61,9 +68,15 @@
|
||||
<string name="ConversationActivity_sorry_the_selected_audio_exceeds_message_size_restrictions">Attenzione, il file audio selezionato supera la grandezza massima consentita.</string>
|
||||
<string name="ConversationActivity_recipient_is_not_a_valid_sms_or_email_address_exclamation">Il destinatario non è un indirizzo valido per l\'SMS o per l\'email!</string>
|
||||
<string name="ConversationActivity_message_is_empty_exclamation">Il messaggio è vuoto!</string>
|
||||
<string name="ConversationActivity_forward_message_prefix">FWD</string>
|
||||
<string name="ConversationActivity_group_conversation_recipients">Conversazione di Gruppo Destinatari</string>
|
||||
<string name="ConversationActivity_group_conversation">Conversazione di Gruppo</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d destinatari in gruppo</string>
|
||||
<string name="ConversationActivity_saving_draft">Salvataggio in corso</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Dettagli messaggio</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Mittente: %1$s\nTrasportato: %2$s\nInviato/Ricevuto: %3$s</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_s_received_s">Mittente: %1$s\nComunicante: %2$s\nInviato: %3$s\nRicevuto: %4$s</string>
|
||||
<string name="ConversationFragment_confirm_message_delete">Conferma l\'eliminazione del messaggio</string>
|
||||
<string name="ConversationFragment_are_you_sure_you_want_to_permanently_delete_this_message">Sicuro di voler cancellare definitivamente questo messaggio?</string>
|
||||
<!--ConversationListAdapter-->
|
||||
@@ -72,22 +85,31 @@
|
||||
<!--ConversationListFragment-->
|
||||
<string name="ConversationListFragment_delete_threads_question">Cancellare i threads?</string>
|
||||
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">Sei sicuro di voler cancellare TUTTE le conversazioni selezionate?</string>
|
||||
<string name="ConversationListFragment_deleting">Eliminando</string>
|
||||
<string name="ConversationListFragment_deleting_selected_threads">Eliminazione delle conversazioni selezionate...</string>
|
||||
<!--ConversationListItem-->
|
||||
<string name="ConversationListItem_key_exchange_message">Messaggio di scambio della chiave...</string>
|
||||
<!--KeyScanningActivity-->
|
||||
<string name="KeyScanningActivity_no_scanned_key_found_exclamation">Nessuna chiave scansionata trovata!</string>
|
||||
<!--MmsDownloader-->
|
||||
<string name="MmsDownloader_no_connectivity_available_for_mms_download_try_again_later">Nessuna connessione disponibile per il download del MMS, riprovare più tardi...</string>
|
||||
<string name="MmsDownloader_error_storing_mms">Errore nel salvare l\'MMS!</string>
|
||||
<string name="MmsDownloader_error_connecting_to_mms_provider">Errore durante la connessione al provider MMS...</string>
|
||||
<!--NotificationMmsMessageRecord-->
|
||||
<string name="NotificationMmsMessageRecord_multimedia_message">Messaggio Multimediale</string>
|
||||
<!--PassphraseChangeActivity-->
|
||||
<string name="PassphraseChangeActivity_passphrases_dont_match_exclamation">Le passwords non corrispondono!</string>
|
||||
<string name="PassphraseChangeActivity_incorrect_old_passphrase_exclamation">Vecchia password errata!</string>
|
||||
<!--PassphraseCreateActivity-->
|
||||
<string name="PassphraseCreateActivity_passphrases_dont_match">Le password non corrispondono</string>
|
||||
<string name="PassphraseCreateActivity_you_must_specify_a_password">Devi creare un password</string>
|
||||
<!--PassphrasePromptActivity-->
|
||||
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">Password errata!</string>
|
||||
<!--PromptApnActivity-->
|
||||
<string name="PromptApnActivity_you_must_specify_an_mmsc_url_for_your_carrier">Devi specificare un MMSC URL per il tuo provider.</string>
|
||||
<string name="PromptApnActivity_mms_settings_updated">Impostazioni MMS aggiornate.</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Puoi modificare questi valori dalle impostazioni di TextSecure in ogni momento.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERRORE:\n\nHai ricevuto una chiave pubblica corrotta. Questa chiave non può essere utilizzata, inizia una nuova sessione sicura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERRORE:\n\nHai ricevuto una chiave pubblica da una versione non supportata del protocollo. Questa chiave non può essere utilizzata, inizia una nuova sessione sicura.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Questo messaggio per lo scambio della chiave non include la firma dell\'identità.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Questo messaggio per lo scambio della chiave include la firma dell\'identità ma non ne hai ancora impostato la fiducia.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Questo messaggio per lo scambio della chiave include la firma dell\'identità di cui ti fidi per: %s</string>
|
||||
@@ -97,6 +119,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Hai ricevuto un messaggio per lo scambio della chiave da %s. Avevi già iniziato una sessione con questo contatto e accettando questa chiave completerai lo scambio. Vuoi completare questo scambio di chiave?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Hai iniziato uno scambio di chiave con %s ma non hai ancora ricevuto una risposta.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Hai ricevuto un messaggio per lo scambio della chiave da %s. Non hai ancora una sessione esistente con questo contatto, vuoi completare questo scambio di chiave?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">La\nfirma su questo scambio di chiavi è differente di quella ricevuta precedentemente. Questo potrebbe significare che qualcuno stà cercando di intercettare la tua comunicazione\no\nche il contatto ha reinstallato TextSecure e ora ha una nuova chiave.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Dovresti verificare\nquesto contatto.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">La\nfirma di questa chiave è fidata, ma al momento hai lo scambio automatico della chiave disabilitato.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Impossibile vedere la chiave di identità corrotta!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Cancellare identità?</string>
|
||||
@@ -151,6 +176,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NON verificata!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">La chiave scansionata corrisponde!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Verificata!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Impronta del contatto</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Iniziare comunque una richiesta esistente?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Hai giò inviata una richiesta di inizio di sessione a questo contatto, sei sicuro di volerne inviare un\'altra? Questo renderà invalida la precedente.</string>
|
||||
@@ -171,14 +197,27 @@
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">Cifratura MMS invalida..</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">Messaggio MMS cifrato per una sessione non esistente</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">Impossibile inviare il tuo messaggio MMS al momento.</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">Importazione in corso</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">Importazione dei messaggi di testo</string>
|
||||
<!--KeyCachingService-->
|
||||
<string name="KeyCachingService_textsecure_passphrase_cached">Password di TextSecure salvata in cache</string>
|
||||
<string name="KeyCachingService_passphrase_cached">Password salvata in cache</string>
|
||||
<!--MessageNotifier-->
|
||||
<string name="MessageNotifier_d_new_messages">(%d) Nuovi messaggi</string>
|
||||
<string name="MessageNotifier_most_recent_from_s">Più recente da: %s</string>
|
||||
<string name="MessageNotifier_key_exchange">Scambio della chiave...</string>
|
||||
<string name="MessageNotifier_encrypted_message">Messaggio cifrato...</string>
|
||||
<string name="MessageNotifier_corrupted_ciphertext">Cifratura corrotta</string>
|
||||
<string name="MessageNotifier_no_subject">(Nessun Oggetto)</string>
|
||||
<string name="MessageNotifier_message_delivery_failed">Non è riuscito l\'invio del messaggio</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Non è riuscito l\'invio del messaggio</string>
|
||||
<string name="MessageNotifier_error_delivering_message">C\'e stato un errore durante l\'invio del messagio</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Segna tutti come gia\' letto</string>
|
||||
<string name="MessageNotifier_mark_as_read">Segna come gia\' letto</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">In questo momento non e\' possibile inviare il tuo messagio SMS. Sara\' inviato quando la communicazione e\' disponibile</string>
|
||||
<!--auto_initiate_activity-->
|
||||
<string name="auto_initiate_activity__you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_secure_session">Hai ricevuto un messaggio da qualcuno che supporta una sessione cifrata di TextSecure. Vuoi iniziare una sessione sicura?</string>
|
||||
<string name="auto_initiate_activity__initiate_exchange">Inizio scambio delle chiavi</string>
|
||||
@@ -198,21 +237,40 @@
|
||||
<string name="conversation_activity__send">Invia</string>
|
||||
<string name="conversation_activity__remove">Elimina</string>
|
||||
<!--conversation_item_sent-->
|
||||
<string name="conversation_item_sent__download">Scarica</string>
|
||||
<string name="conversation_item_sent__downloading">Caricamento in corso</string>
|
||||
<!--conversation_item_received-->
|
||||
<string name="conversation_item_received__download">Scarica</string>
|
||||
<string name="conversation_item_received__downloading">Caricamento in corso</string>
|
||||
<!--conversation_fragment_cab-->
|
||||
<string name="conversation_fragment_cab__batch_selection_mode">Modalità di selezione di gruppo</string>
|
||||
<!--create_passphrase_activity-->
|
||||
<string name="create_passphrase_activity__please_choose_a_passphrase_that_will_be_used_to_locally_encrypt_your_data_this_should_be_a_strong_passphrase">Scegli una password che verrà usata per cifrata i tuoi dati localmente. Attenzione a scegliere una password robusta.</string>
|
||||
<string name="create_passphrase_activity__passphrase">Password:</string>
|
||||
<string name="create_passphrase_activity__repeat">Ripeti:</string>
|
||||
<string name="create_passphrase_activity__continue">Continua</string>
|
||||
<string name="create_passphrase_activity__generating_secrets">CREAZIONE SEGRETI</string>
|
||||
<!--database_migration_activity-->
|
||||
<string name="database_migration_activity__would_you_like_to_import_your_existing_text_messages">Desderi importare i tuoi SMS esistenti nel database cifrato di TextSecure?</string>
|
||||
<string name="database_migration_activity__the_default_system_database_will_not_be_modified">Il database di default non verrà modificat o alterato in nessun modo.</string>
|
||||
<string name="database_migration_activity__skip">Salta</string>
|
||||
<string name="database_migration_activity__import">Importa</string>
|
||||
<string name="database_migration_activity__this_could_take_a_moment_please_be_patient">Potrebbe volerci un pò. Attendi per favore, verrai notificato quando l\'importazione sarà completata.</string>
|
||||
<string name="database_migration_activity__importing">COPIA</string>
|
||||
<!--database_upgrade_activity-->
|
||||
<string name="database_upgrade_activity__updating_database">Aggiornamento Database...</string>
|
||||
<!--prompt_passphrase_activity-->
|
||||
<string name="prompt_passphrase_activity__textsecure_passphrase">PASSWORD TEXTSECURE</string>
|
||||
<string name="prompt_passphrase_activity__unlock">Sblocca</string>
|
||||
<!--prompt_apn_activity-->
|
||||
<string name="prompt_apn_activity__textsecure_requires_apn_settings_to_deliver_media_messages_via_your_wireless_carrier">TextSecure richiede le impostazioni del APN per inviare messaggi multimediali ( MMS ) con il tuo provider. Il tuo dispositivo non ha queste impostazioni disponibili, il che è occasionalmente vero per device con operatore bloccato o altre configurazioni restrittive.</string>
|
||||
<string name="prompt_apn_activity__mmsc_url_required">MMSC URL ( RICHIESTO )</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_host_optional">MMS INDIRIZZO PROXY ( OPZIONALE )</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_port_optional">MMS PORTA PROXY ( OPZIONALE )</string>
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sessione</string>
|
||||
<string name="receive_key_activity__identities">Identità</string>
|
||||
<string name="receive_key_activity__complete_exchange">Completa lo scambio</string>
|
||||
<string name="receive_key_activity__complete">Completato</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">A</string>
|
||||
<!--review_identities-->
|
||||
@@ -247,6 +305,7 @@
|
||||
<string name="AndroidManifest__complete_key_exchange">Completa lo scambio della chiave</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">Verifica le identità importate</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">Generale</string>
|
||||
<string name="preferences__use_settings">Usa le impostazioni</string>
|
||||
<string name="preferences__pref_all_sms_title">Utilizza per tutti gli SMS</string>
|
||||
<string name="preferences__pref_all_mms_title">Utilizza per tutti gli MMS</string>
|
||||
@@ -259,7 +318,9 @@
|
||||
<string name="preferences__choose_identity">Scegli un\'identità</string>
|
||||
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">Scegli il tuo contatto dalla rubrica.</string>
|
||||
<string name="preferences__encryption_settings">Impostazioni di cifratura</string>
|
||||
<string name="preferences__change_passphrase">Cambia passphrase</string>
|
||||
<string name="preferences__change_my_passphrase">Cambia la mia password</string>
|
||||
<string name="preferences__complete_key_exchanges">Scambio di chiavi completato</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">Completa lo scambio della chiave automaticamente per le nuove sessione con la stessa chiave di identità</string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">Includi un tag \'spazio\' al termine di ogni messaggio non cifrato</string>
|
||||
<string name="preferences__include_whitespace_tag">Include un tag \'spazio\'</string>
|
||||
@@ -270,9 +331,12 @@
|
||||
<string name="preferences__pref_timeout_interval_dialogtitle">Seleziona un timeout per la password</string>
|
||||
<string name="preferences__pref_timeout_interval_title">Intervallo di tempo</string>
|
||||
<string name="preferences__the_amount_of_time_to_wait_before_forgetting_passphrase">La quantità di tempo prima di dimenticare la password</string>
|
||||
<string name="preferences__identity_key_settings">Chiavi personali</string>
|
||||
<string name="preferences__view_my_identity_key">La mia chiave di identità</string>
|
||||
<string name="preferences__export_my_identity_key">Esporta la mia chiave di identità</string>
|
||||
<string name="preferences__import_contacts_key">Importa la chiave di un contatto</string>
|
||||
<string name="preferences__import_an_identity_key_from_a_contact">Importa una chiave di identità da un contatto</string>
|
||||
<string name="preferences__manage_identity_keys">Controlla le chiave dei contatti</string>
|
||||
<string name="preferences__manage_configured_identity_keys">Controlla le chiavi di identità configurate</string>
|
||||
<string name="preferences__notification_settings">Impostazioni notifiche</string>
|
||||
<string name="preferences__notifications">Notifiche</string>
|
||||
@@ -298,7 +362,25 @@
|
||||
<string name="preferences__normal">Normale</string>
|
||||
<string name="preferences__slow">Lento</string>
|
||||
<string name="preferences__custom">Personalizzato</string>
|
||||
<string name="preferences__advanced">Avanzate</string>
|
||||
<string name="preferences__passphrase">Passphrase</string>
|
||||
<string name="preferences__advanced_mms_access_point_names">Fallback MMSC</string>
|
||||
<string name="preferences__enable_fallback_mmsc">Fallback MMSC Abilitato</string>
|
||||
<string name="preferences__use_mmsc_information_configured_here_when_system_apn_information_is_unavailable">Usa le informazioni MMSC impostate quì quando l\'APN di sistema non è disponibile</string>
|
||||
<string name="preferences__mmsc_url_required">URL MMSC (Richiesto)</string>
|
||||
<string name="preferences__mms_proxy_host_optional">MMS - Indirizzo Proxy ( Opzionale )</string>
|
||||
<string name="preferences__mms_proxy_port_optional">MMS - Porta Proxy ( Opzionale )</string>
|
||||
<string name="preferences__delivery_reports">Rapporto di consegna</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Richiedi un rapporto di consegna per ogni SMS inviato</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_mms_message_you_send">Richiedi un rapporto di consegna per ogni MMS inviato</string>
|
||||
<string name="preferences__mms_delivery_reports">Rapporti di consegna MMS</string>
|
||||
<string name="preferences__sms_delivery_reports">Rapporti di consegna SMS</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Elimina automaticamente i messaggi più vecchi quando un thread di conversazione supera una lunghezza determinata.</string>
|
||||
<string name="preferences__delete_old_messages">Elimina i messagi vecchi</string>
|
||||
<string name="preferences__storage">Stoccaggio</string>
|
||||
<string name="preferences__conversation_length_limit">Limite di lunghezza conversazione</string>
|
||||
<string name="preferences__trim_all_threads_now">Ritaglia tutti i thread ora</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Analizza tutti i thread delle conversazioni e far rispettare il limite di lunghezza delle conversazioni.</string>
|
||||
<!--****************************************-->
|
||||
<!--menus-->
|
||||
<!--****************************************-->
|
||||
@@ -324,7 +406,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Cerca</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Sicurezza</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verifica la sessione</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verifica il destinatario</string>
|
||||
@@ -333,6 +414,10 @@
|
||||
<string name="conversation__menu_add_attachment">Aggiungi allegato</string>
|
||||
<string name="conversation__menu_delete_thread">Cancella conversazione</string>
|
||||
<!--conversation_group_options-->
|
||||
<string name="convesation_group_options__recipients_list">La lista dei destinatari</string>
|
||||
<string name="conversation_group_options__delivery">Invio</string>
|
||||
<string name="conversation_group_options__conversation">Conversazione</string>
|
||||
<string name="conversation_group_options__broadcast">Broadcast</string>
|
||||
<!--key_scanning-->
|
||||
<string name="key_scanning__menu_compare">Controlla</string>
|
||||
<string name="key_scanning__menu_get_scanned_to_compare">Scansionato per controllare</string>
|
||||
@@ -346,8 +431,8 @@
|
||||
<string name="text_secure_normal__menu_import">Importa</string>
|
||||
<string name="text_secure_normal__menu_export">Esporta</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Cancella password</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Segna come gia\' letto</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Verificato</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,444 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">TextSecure</string>
|
||||
<string name="yes">はい</string>
|
||||
<string name="no">いいえ</string>
|
||||
<string name="delete">削除</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">データベースと設定をインポートしますか?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">SDカードから、TextSecureのデータベース、鍵及び設定を取り込みますか?\n\n警告: この操作を行うと、携帯端末にあるすべてのメッセージ、鍵及び設定が消去されます。</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">データベースと鍵をインポート</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">SMSデータベース、鍵及び設定をインポート中…</string>
|
||||
<string name="ApplicationExportManager_export_database_question">データベースをエクスポートしますか?</string>
|
||||
<string name="ApplicationExportManager_export_textsecure_database_keys_and_settings_prompt">SDカードにTextSecureのデータベース、鍵及び設定をエクスポートしますか?</string>
|
||||
<string name="ApplicationExportManager_exporting_database_and_keys">データベースと鍵をエクスポート</string>
|
||||
<string name="ApplicationExportManager_exporting_your_sms_database_keys_and_settings">SMSデータベース及び鍵と設定をエクスポート中…</string>
|
||||
<string name="ApplicationExportManager_no_sd_card_found_exclamation">SDカードがありません。</string>
|
||||
<string name="ApplicationExportManager_error_exporting_to_sd_exclamation">SDカードにエクポートできません。</string>
|
||||
<string name="ApplicationExportManager_import_successful_exclamation">インポートできました。</string>
|
||||
<string name="ApplicationExportManager_export_successful_exclamation">エクスポートできました。</string>
|
||||
<string name="ApplicationExportManager_import">インポート</string>
|
||||
<string name="ApplicationExportManager_export">エクスポート</string>
|
||||
<!--ApplicationPreferencesActivity-->
|
||||
<string name="ApplicationPreferencesActivity_currently_s">現在: %s</string>
|
||||
<string name="ApplicationPreferenceActivity_not_found_exclamation">見つかりません。</string>
|
||||
<string name="ApplicationPreferenceActivity_no_valid_identity_key_was_found_in_the_specified_contact">指定された連絡先に、有効な認証キーは見つかりませんでした。</string>
|
||||
<string name="ApplicationPreferenceActivity_you_don_t_have_an_identity_key_exclamation">認証キーがありません。</string>
|
||||
<string name="ApplicationPreferenceActivity_you_have_not_yet_defined_a_contact_for_yourself">ご自身の連絡先が指定されていません!設定メニューから選んでください。</string>
|
||||
<string name="ApplicationPreferenceActivity_exported_to_contacts_database">連絡先のデータベースにエクスポートされました。</string>
|
||||
<string name="ApplicationPreferenceActivity_you_need_to_have_entered_your_passphrase_before_importing_keys">鍵をインポートする前に、パスワードを入力して下さい。</string>
|
||||
<string name="ApplicationPreferenceActivity_you_need_to_have_entered_your_passphrase_before_managing_keys">鍵を管理する前に、パスワードを入力して下さい。</string>
|
||||
<string name="ApplicationPreferenceActivity_you_havent_set_a_passphrase_yet">パスワードが登録されていません。</string>
|
||||
<string name="ApplicationPreferencesActivity_messages_per_conversation">スレッド1本におけるメッセージ数</string>
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">全ての古いメッセージを今、削除しますか?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">今すぐ全ての会話スレッドを最新メッセージ%s通にまで縮小(トリム)しますか?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">削除</string>
|
||||
<string name="ApplicationPreferencesActivity_my">自分のフィンガープリント</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">写真</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">動画</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_audio">音声</string>
|
||||
<!--ConversationItem-->
|
||||
<string name="ConversationItem_message_size_d_kb">メッセージのサイズ: %d KB</string>
|
||||
<string name="ConversationItem_expires_s">有効期限: %s</string>
|
||||
<string name="ConversationItem_error_sending_message">メッセージが送信できませんでした。</string>
|
||||
<string name="ConversationItem_sending">送信中…</string>
|
||||
<string name="ConversationItem_saving_attachment">添付ファイルを保存</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">SDカードに添付ファイルを保存中…</string>
|
||||
<string name="ConversationItem_save_to_sd_card">SDカードに保存しますか?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">このファイルは暗号化されたデータベースに保存されています。SDカードに保存される方のバージョンは暗号化されませんが、この作業を続けますか?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">SDカードへの添付ファイル保存中にエラーが起きました。</string>
|
||||
<string name="ConversationItem_success_exclamation">できました。</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">SDカードに書き込めません。</string>
|
||||
<string name="ConversationItem_view_secure_media_question">暗号化されたファイルを表示しますか?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_external_viewer_warning">このファイルは暗号化されたデータベースに保存されています。外部コンテンツのビューアで見るには、データを一時的に復号し、ディスクに書き込まなければなりません。この作業を実行してもいいですか?</string>
|
||||
<string name="ConversationItem_key_exchange_message">鍵交換のメッセージ</string>
|
||||
<string name="ConversationItem_received_and_processed_key_exchange_message">鍵交換のメッセージを受信、処理しました。</string>
|
||||
<string name="ConversationItem_error_received_stale_key_exchange_message">エラー、古い鍵交換のメッセージを受信してしまいました。</string>
|
||||
<string name="ConversationItem_received_key_exchange_message_click_to_process">鍵交換のメッセージを受信しました。クリックして処理してください。</string>
|
||||
<!--ConversationActivity-->
|
||||
<string name="ConversationActivity_initiate_secure_session_question">セキュア・セッションを開始しますか?</string>
|
||||
<string name="ConversationActivity_initiate_secure_session_with_s_question">%sさんとセキュア・セッションを開始しますか?</string>
|
||||
<string name="ConversationActivity_abort_secure_session_confirmation">セキュア・セッションの確認を中止</string>
|
||||
<string name="ConversationActivity_are_you_sure_that_you_want_to_abort_this_secure_session_question">セキュア・セッションを中止してもいいですか?</string>
|
||||
<string name="ConversationActivity_delete_thread_confirmation">スレッド削除の確認</string>
|
||||
<string name="ConversationActivity_are_you_sure_that_you_want_to_permanently_delete_this_conversation_question">この会話を完全に削除してもよろしいですか?</string>
|
||||
<string name="ConversationActivity_add_attachment">添付</string>
|
||||
<string name="ConversationActivity_compose_message">メッセージ作成</string>
|
||||
<string name="ConversationActivity_sorry_there_was_an_error_setting_your_attachment">添付中にエラーが発生しました。</string>
|
||||
<string name="ConversationActivity_sorry_the_selected_video_exceeds_message_size_restrictions">選択された動画は容量を超えています。</string>
|
||||
<string name="ConversationActivity_sorry_the_selected_audio_exceeds_message_size_restrictions">選択された音声ファイルは容量を超えています。</string>
|
||||
<string name="ConversationActivity_recipient_is_not_a_valid_sms_or_email_address_exclamation">受信先のSMS又はEメールアドレスが有効ではありません。</string>
|
||||
<string name="ConversationActivity_message_is_empty_exclamation">メッセージが空です。</string>
|
||||
<string name="ConversationActivity_forward_message_prefix">転送:</string>
|
||||
<string name="ConversationActivity_group_conversation_recipients">グループ通信の受信者</string>
|
||||
<string name="ConversationActivity_group_conversation">グループ通信</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">グループの受信者は%d人です</string>
|
||||
<string name="ConversationActivity_saving_draft">下書き保存中…</string>
|
||||
<string name="ConversationActivity_invalid_recipient">受信先が無効です。</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">メッセージの詳細</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">送信者: %1$s\n通信: %2$s\n送信/受信:%3$s</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_s_received_s">送信者: %1$s\n通信: %2$s\n送信: %3$s\n受信:%4$s</string>
|
||||
<string name="ConversationFragment_confirm_message_delete">メッセージ削除の確認</string>
|
||||
<string name="ConversationFragment_are_you_sure_you_want_to_permanently_delete_this_message">このメッセージを完全に削除してもよろしいですか?</string>
|
||||
<!--ConversationListAdapter-->
|
||||
<string name="ConversationListAdapter_encrypted_message_enter_passphrase">暗号化されたメッセージです。パスワードを入力してください。</string>
|
||||
<string name="ConversationListAdapter_key_exchange_message">鍵交換のメッセージ…</string>
|
||||
<!--ConversationListFragment-->
|
||||
<string name="ConversationListFragment_delete_threads_question">スレッドを削除しますか?</string>
|
||||
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">選択したすべての会話スレッドを、本当に削除してもよろしいですか?</string>
|
||||
<string name="ConversationListFragment_deleting">削除</string>
|
||||
<string name="ConversationListFragment_deleting_selected_threads">選択したスレッドを削除中…</string>
|
||||
<!--ConversationListItem-->
|
||||
<string name="ConversationListItem_key_exchange_message">鍵交換のメッセージ…</string>
|
||||
<!--KeyScanningActivity-->
|
||||
<string name="KeyScanningActivity_no_scanned_key_found_exclamation">スキャンした鍵はありません。</string>
|
||||
<!--MmsDownloader-->
|
||||
<string name="MmsDownloader_no_connectivity_available_for_mms_download_try_again_later">MMSをダウンロードするための接続ができません、後でもう一度試してください…</string>
|
||||
<string name="MmsDownloader_error_storing_mms">MMS保存中にエラーがありました。</string>
|
||||
<string name="MmsDownloader_error_connecting_to_mms_provider">MMSのプロバイダー接続中にエラーが発生しました…</string>
|
||||
<!--NotificationMmsMessageRecord-->
|
||||
<string name="NotificationMmsMessageRecord_multimedia_message">MMS</string>
|
||||
<!--PassphraseChangeActivity-->
|
||||
<string name="PassphraseChangeActivity_passphrases_dont_match_exclamation">パスワードが正しくありません。</string>
|
||||
<string name="PassphraseChangeActivity_incorrect_old_passphrase_exclamation">古いパスワードが正しくありません。</string>
|
||||
<!--PassphraseCreateActivity-->
|
||||
<string name="PassphraseCreateActivity_passphrases_dont_match">パスワードが正しくありません。</string>
|
||||
<string name="PassphraseCreateActivity_you_must_specify_a_password">パスワードを指定して下さい</string>
|
||||
<!--PassphrasePromptActivity-->
|
||||
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">無効なパスワードです。</string>
|
||||
<!--PromptApnActivity-->
|
||||
<string name="PromptApnActivity_you_must_specify_an_mmsc_url_for_your_carrier">お使いの通信事業者のMMSセンター用URLを指定して下さい。</string>
|
||||
<string name="PromptApnActivity_mms_settings_updated">MMSの設定を更新しました</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">TextSecure設定メニューから、これらの値をいつでも変更できます。</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">エラー:\n\n受信した公開鍵は壊れていて、処理できません。セキュア・セッションをもう一度開始してください。</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">エラー:\n\n受信した公開鍵は、対応されていないプロトコルのバージョンからのもので、処理できません。セキュア・セッションをもう一度開始してください。</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">この鍵交換メッセージには、電子署名がありません。</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">この鍵交換メッセージには電子署名がありますが、まだ信用されていません。</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">この鍵交換メッセージには電子署名があり、%sで信用されています。</string>
|
||||
<string name="ReceiveKeyActivity_this_is_the_key_that_you_sent_to_start_your_current_encrypted_session_with_s">この鍵は、%sさんとの暗号化されている現在のセッションを開始するときに送ったものです。</string>
|
||||
<string name="ReceiveKeyActivity_this_is_the_key_that_you_received_to_start_your_current_encrypted_session_with_s">この鍵は、%sさんとの暗号化されている現在のセッションを開始するときに受け取ったものです。</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_warning_you_already_have_an_encrypted_session">%sさんから鍵交換のメッセージを受信しました。\n\n警告:この連絡先との暗号化されたセッションがすでに行われています。この鍵交換メッセージを許可すると、現在のセッションは破棄され、再認証が必要になります。この鍵交換を完了させますか?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">%sさんから鍵交換のメッセージを受信しました。この連絡先とのセッションは開始されています。この鍵を許可すると鍵交換が完了します。この作業を完了させますか?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">%sさんと鍵交換メッセージを開始しましたが、返信はまだありません。</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">%sさんから鍵交換のメッセージを受信しました。この連絡先とのセッションは現在ありません。この鍵交換を完了させますか?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">この\n鍵交換の電子署名は、以前この連絡先から受信したものと違っています。\n誰かがあなたの通信を傍受しようとしているか、もしくは\n単にこの連絡先がTextSecureを再インストールしたため、認証キーが新しくなった可能性があります。</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">この連絡先を\n照合することが推奨されています。</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">この\n鍵交換の電子署名は信用されていますが、「自動で鍵交換を完了する」設定は\n無効になっています。</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">壊れた認証キーを見ることはできません。</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">IDを削除しますか?</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity_are_you_sure_you_want_to_delete_this_identity_key">この認証キーを完全に削除してもよろしいですか?</string>
|
||||
<string name="ReviewIdentitiesActivity_invalid_identity">IDが無効です!</string>
|
||||
<!--SaveIdentityActivity-->
|
||||
<string name="SaveIdentityActivity_you_must_specify_a_name_for_this_identity_exclamation">この認証キーの持ち主の名前を入れてください。</string>
|
||||
<string name="SaveIdentityActivity_identity_name_exists_exclamation">認証キーの持ち主の名前は存在しています。</string>
|
||||
<string name="SaveIdentityActivity_an_identity_key_with_the_specified_name_already_exists">指定された名前の認証キーはすでに存在しています。</string>
|
||||
<string name="SaveIdentityActivity_manage_identities">認証キーを管理</string>
|
||||
<!--VerifyIdentityActivity-->
|
||||
<string name="VerifyIdentityActivity_mark_identity_verified_question">認証キーを「照合済」にしますか?</string>
|
||||
<string name="VerifyIdentityActivity_are_you_sure_you_have_validated_the_recipients_identity_fingerprint_and_would_like_to_mark_it_as_verified">受信者のフィンガープリントを確認した上で、「確認済」にしてもよろしいですか?</string>
|
||||
<string name="VerifyIdentityActivity_mark_verified">確認済にする</string>
|
||||
<string name="VerifyIdentityActivity_you_do_not_have_an_identity_key">認証キーがありません。</string>
|
||||
<string name="VerifyIdentityActivity_recipient_has_no_identity_key">受信者は認証キーがありません。</string>
|
||||
<string name="VerifyIdentityActivity_recipient_has_no_identity_key_exclamation">受信者は認証キーがありません!</string>
|
||||
<string name="VerifyIdentityActivity_scan_their_key_to_compare">鍵をスキャンして比較</string>
|
||||
<string name="VerifyIdentityActivity_get_my_key_scanned">自分の鍵をスキャン</string>
|
||||
<string name="VerifyIdentityActivity_warning_the_scanned_key_does_not_match_please_check_the_fingerprint_text_carefully">警告、スキャンした鍵が正しくありません!フィンガープリントのテキストを慎重にチェックしてください。</string>
|
||||
<string name="VerifyIdentityActivity_not_verified_exclamation">照合できませんでした!</string>
|
||||
<string name="VerifyIdentityActivity_their_key_is_correct_it_is_also_necessary_to_verify_your_key_with_them_as_well">相手の鍵が正しくありません。これらの鍵と一緒に、自分の鍵も照合する必要があります。</string>
|
||||
<string name="VerifyIdentityActivity_verified_exclamation">照合しました。</string>
|
||||
<string name="VerifyIdentityActivity_you_don_t_have_an_identity_key_exclamation">認証キーがありません。</string>
|
||||
<!--VerifyImportedIdentityActivity-->
|
||||
<string name="VerifyImportedIdentityActivity_you_must_specify_a_name_for_this_contact_exclamation">この連絡先の名前を入れてください。</string>
|
||||
<string name="VerifyImportedIdentityActivity_save_identity_key_question">認証キーを保存しますか?</string>
|
||||
<string name="VerifyImportedIdentityActivity_error_saving_identity_key_exclamation">認証キーの保存中にエラーが発生しました。</string>
|
||||
<string name="VerifyImportedIdentityActivity_this_identity_key_or_an_identity_key_with_the_same_name_already_exists_please_edit_your_key_database">この認証キー、または同じ名前による認証キーがすでに存在しています。認証キー・データベースを編集してください。</string>
|
||||
<string name="VerifyImportedIdentityActivity_scan_to_compare">スキャンして比較</string>
|
||||
<string name="VerifyImportedIdentityActivity_get_scanned_to_compare">スキャンしてもらって比較</string>
|
||||
<string name="VerifyImportedIdentityActivity_not_verified_exclamation">照合できませんでした!</string>
|
||||
<string name="VerifyImportedIdentityActivity_warning_the_scanned_key_does_not_match_exclamation">警告、スキャンした鍵が正しくありません!</string>
|
||||
<string name="VerifyImportedIdentityActivity_the_scanned_key_matches_exclamation">スキャンした鍵が一致しました!</string>
|
||||
<string name="VerifyImportedIdentityActivity_verified_exclamation">照合できました!</string>
|
||||
<string name="VerifyImportedIdentityActivity_are_you_sure_that_you_would_like_to_mark_this_as_a_valid_identity_key_for_all_future_correspondence_with_s">今後すべての%sさんとのやり取りにおいて、この認証キーを有効にしてもよろしいですか?必ずフィンガープリントを実際に照合した上で、有効にしてください。</string>
|
||||
<!--VerifyKeysActivity-->
|
||||
<string name="VerifyKeysActivity_mark_session_verified_question">セッションを「確認済」にしますか?</string>
|
||||
<string name="VerifyKeysActivity_are_you_sure_that_you_have_validated_these_fingerprints_and_would_like_to_mark_this_session_as_verified">これらのフィンガープリントを確認した上で、このセッションを「確認済」にしてもよろしいですか?</string>
|
||||
<string name="VerifyKeysActivity_mark_verified">確認済にする</string>
|
||||
<string name="VerifyKeysActivity_get_my_fingerprint_scanned">自分のフィンガープリントをスキャン</string>
|
||||
<string name="VerifyKeysActivity_scan_their_fingerprint">フィンガープリントをスキャン</string>
|
||||
<string name="VerifyKeysActivity_warning_the_scanned_key_does_not_match_please_check_the_fingerprint_text_carefully2">警告、スキャンした鍵が正しくありません!フィンガープリントのテキストを慎重にチェックしてください。</string>
|
||||
<string name="VerifyKeysActivity_not_verified_exclamation">照合できませんでした!</string>
|
||||
<string name="VerifyKeysActivity_their_key_is_correct_it_is_also_necessary_to_get_your_fingerprint_scanned_as_well">相手の鍵は正しいです。自分のフィンガープリントもスキャンする必要があります。</string>
|
||||
<string name="VerifyKeysActivity_verified_exclamation">照合できました。</string>
|
||||
<!--ViewIdentityActivity-->
|
||||
<string name="ViewIdentityActivity_you_do_not_have_an_identity_key">認証キーがありません。</string>
|
||||
<string name="ViewIdentityActivity_scan_to_compare">スキャンして比較</string>
|
||||
<string name="ViewIdentityActivity_get_scanned_to_compare">スキャンさせて比較する</string>
|
||||
<string name="ViewIdentityActivity_warning_the_scanned_key_does_not_match_exclamation">警告、スキャンした鍵が正しくありません!</string>
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">照合できませんでした!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">スキャンした鍵が一致しました!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">照合できました。</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">認証フィンガープリント</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">既存のリクエストがありますが、鍵交換を開始しますか?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">セッション開始のリクエストはすでにこの受信者に送られています。別のリクエストをまた送ってもよろしいですか?送信すると、最初に送ったリクエストは無効になります。</string>
|
||||
<string name="KeyExchangeInitiator_send">送信</string>
|
||||
<!--MessageDisplayHelper-->
|
||||
<string name="MessageDisplayHelper_bad_encrypted_message">メッセージが正しく暗号化されていません…</string>
|
||||
<string name="MessageDisplayHelper_decrypting_please_wait">復号しています。お待ち下さい…</string>
|
||||
<string name="MessageDisplayHelper_message_encrypted_for_non_existing_session">メッセージは存在しないセッションのために暗号化されています…</string>
|
||||
<string name="MessageDisplayHelper_decryption_error_local_message_corrupted_mac_doesn_t_match_potential_tampering_question">復号化エラー:ローカル・メッセージが壊れており、MACが一致しません。改竄された可能性があります。</string>
|
||||
<!--MmsDatabase-->
|
||||
<string name="MmsDatabase_connecting_to_mms_server">MMSサーバーに接続中…</string>
|
||||
<string name="MmsDatabase_downloading_mms">MMSをダウンロード中…</string>
|
||||
<string name="MmsDatabase_mms_download_failed">MMSのダウンロードに失敗しました!</string>
|
||||
<string name="MmsDatabase_downloading">ダウンロード中…</string>
|
||||
<string name="MmsDatabase_anonymous">匿名</string>
|
||||
<!--MmsMessageRecord-->
|
||||
<string name="MmsMessageRecord_decrypting_mms_please_wait">MMSを復号しています。お待ち下さい…</string>
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">MMSメッセージが正しく暗号化されていません…</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">MMSメッセージは存在しないセッションのために暗号化されています…</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">現在、このMMSは送信できません。</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">インポート中</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">テキストメッセージをインポート中</string>
|
||||
<!--KeyCachingService-->
|
||||
<string name="KeyCachingService_textsecure_passphrase_cached">TextSecureパスワードがキャッシュされています</string>
|
||||
<string name="KeyCachingService_passphrase_cached">パスワードがキャッシュされています</string>
|
||||
<!--MessageNotifier-->
|
||||
<string name="MessageNotifier_d_new_messages">%d 新しいメッセージ</string>
|
||||
<string name="MessageNotifier_most_recent_from_s">最新の送信者: %s</string>
|
||||
<string name="MessageNotifier_key_exchange">鍵交換…</string>
|
||||
<string name="MessageNotifier_encrypted_message">暗号化されたメッセージ…</string>
|
||||
<string name="MessageNotifier_corrupted_ciphertext">壊れた暗号文</string>
|
||||
<string name="MessageNotifier_no_subject">(件名なし)</string>
|
||||
<string name="MessageNotifier_message_delivery_failed">メッセージの配信に失敗しました。</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">メッセージの配信に失敗しました。</string>
|
||||
<string name="MessageNotifier_error_delivering_message">メッセージ配信中にエラーがありました。</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">すべて既読にする</string>
|
||||
<string name="MessageNotifier_mark_as_read">既読にする</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">現在、このSMSは送信できません。サービスが利用可能になると、すぐに送信されます。</string>
|
||||
<!--auto_initiate_activity-->
|
||||
<string name="auto_initiate_activity__you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_secure_session">TextSecure暗号化セッションをサポートする人からメッセージが来ています。セキュア・セッションを開始しますか?</string>
|
||||
<string name="auto_initiate_activity__initiate_exchange">交換開始</string>
|
||||
<!--change_passphrase_activity-->
|
||||
<string name="change_passphrase_activity__old_passphrase">既存のパスワード:</string>
|
||||
<string name="change_passphrase_activity__new_passphrase">新規のパスワード:</string>
|
||||
<string name="change_passphrase_activity__repeat_new_passphrase">新規のパスワードを再入力:</string>
|
||||
<!--contact_selection_group_activity-->
|
||||
<!--contact_selection_list_activity-->
|
||||
<string name="contact_selection_group_activity__no_contacts">連絡先はありません。</string>
|
||||
<!--ContactSelectionListFragment-->
|
||||
<string name="ContactSelectionlistFragment_select_for">選択</string>
|
||||
<!--contact_selection_recent_activity-->
|
||||
<string name="contact_selection_recent_activity__no_recent_calls">最近の通話はありません。</string>
|
||||
<!--conversation_activity-->
|
||||
<string name="conversation_activity__type_message">メッセージを入力</string>
|
||||
<string name="conversation_activity__send">送信</string>
|
||||
<string name="conversation_activity__remove">削除</string>
|
||||
<!--conversation_item_sent-->
|
||||
<string name="conversation_item_sent__download">ダウンロード</string>
|
||||
<string name="conversation_item_sent__downloading">ダウンロード中</string>
|
||||
<!--conversation_item_received-->
|
||||
<string name="conversation_item_received__download">ダウンロード</string>
|
||||
<string name="conversation_item_received__downloading">ダウンロード中</string>
|
||||
<!--conversation_fragment_cab-->
|
||||
<string name="conversation_fragment_cab__batch_selection_mode">一括選択モード</string>
|
||||
<!--create_passphrase_activity-->
|
||||
<string name="create_passphrase_activity__please_choose_a_passphrase_that_will_be_used_to_locally_encrypt_your_data_this_should_be_a_strong_passphrase">あなたのデータをローカルで暗号化するためのパスワードを選んでください。\n\n安全性の高いパスワードにしてください。</string>
|
||||
<string name="create_passphrase_activity__passphrase">パスワード:</string>
|
||||
<string name="create_passphrase_activity__repeat">再入力:</string>
|
||||
<string name="create_passphrase_activity__continue">続行</string>
|
||||
<string name="create_passphrase_activity__generating_secrets">暗号鍵の生成</string>
|
||||
<!--database_migration_activity-->
|
||||
<string name="database_migration_activity__would_you_like_to_import_your_existing_text_messages">TextSecureの暗号化されたデータベースに、今あるテキストメッセージをインポートしてもよろしいですか?</string>
|
||||
<string name="database_migration_activity__the_default_system_database_will_not_be_modified">携帯端末にある既定データベースは変更されません。</string>
|
||||
<string name="database_migration_activity__skip">スキップする</string>
|
||||
<string name="database_migration_activity__import">インポート</string>
|
||||
<string name="database_migration_activity__this_could_take_a_moment_please_be_patient">この作業は時間がかかります。しばらくお待ち下さい。インポートが完了すると、通知されます。</string>
|
||||
<string name="database_migration_activity__importing">インポート中</string>
|
||||
<!--database_upgrade_activity-->
|
||||
<string name="database_upgrade_activity__updating_database">データベースを更新中…</string>
|
||||
<!--prompt_passphrase_activity-->
|
||||
<string name="prompt_passphrase_activity__textsecure_passphrase">TextSecureパスワード</string>
|
||||
<string name="prompt_passphrase_activity__unlock">ロック解除</string>
|
||||
<!--prompt_apn_activity-->
|
||||
<string name="prompt_apn_activity__textsecure_requires_apn_settings_to_deliver_media_messages_via_your_wireless_carrier">TextSecureでは、無線通信事業者からファイル付きメッセージを配信するのに、APN設定が必要です。お使いの携帯端末では、この設定のための情報が取得できません。ロックされた端末であるか、その他の制限設定があると、このような状況が生じます。</string>
|
||||
<string name="prompt_apn_activity__to_send_media_messages_please_complete_the_necessary_apn_information_below">ファイル付きメッセージを配信するのに必要な以下のAPN情報を入力してください。お使いの通信事業者への設定値は、通常\'&lt;your carrier&gt; APN\'検索によって設定されます。この作業は一度だけでいいです。</string>
|
||||
<string name="prompt_apn_activity__mmsc_url_required">MMSC URL (必須):</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_host_optional">MMSプロキシ・ホスト (自由選択):</string>
|
||||
<string name="prompt_apn_activity__mms_proxy_port_optional">MMSプロキシ・ポート (自由選択)</string>
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">セッション</string>
|
||||
<string name="receive_key_activity__identities">認証キー</string>
|
||||
<string name="receive_key_activity__complete">完了</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">宛先</string>
|
||||
<!--review_identities-->
|
||||
<string name="review_identities__you_don_t_currently_have_any_identity_keys_in_your_trust_database">信用した鍵のデータベースに認証キーは現在ありません。</string>
|
||||
<!--save_identity_activity-->
|
||||
<string name="save_identity_activity__identity_name">IDネーム:</string>
|
||||
<!--verify_identity_activity-->
|
||||
<string name="verify_identity_activity__their_identity_they_read">相手の認証キー(通信相手が読む):</string>
|
||||
<string name="verify_identity_activity__your_identity_you_read">自分の認証キー(自分が読む):</string>
|
||||
<!--verify_import_identity_activity-->
|
||||
<string name="verify_import_identity_activity__identity_name_n">IDネーム:\\n</string>
|
||||
<string name="verify_import_identity_activity__imported_identity_n">インポートした認証キー:\\n</string>
|
||||
<string name="verify_import_identity_activity__verified">照合できました。</string>
|
||||
<string name="verify_import_identity_activity__compare">比較</string>
|
||||
<!--verify_keys_activity-->
|
||||
<string name="verify_keys_activity__they_read_this">相手が読む:</string>
|
||||
<string name="verify_keys_activity__you_read_this">自分が読む:</string>
|
||||
<!--view_identity_activity-->
|
||||
<string name="view_identity_activity__identity">ID:</string>
|
||||
<string name="view_identity_activity__qr_code">QRコード</string>
|
||||
<!--AndroidManifest.xml-->
|
||||
<string name="AndroidManifest__create_passphrase">パスワードの作成</string>
|
||||
<string name="AndroidManifest__enter_passphrase">パスワード入力</string>
|
||||
<string name="AndroidManifest__select_contacts">連絡先を選択</string>
|
||||
<string name="AndroidManifest__textsecure_detected">TextSecureが検出されました</string>
|
||||
<string name="AndroidManifest__public_identity_key">公開認証キー</string>
|
||||
<string name="AndroidManifest__change_passphrase">パスワードの変更</string>
|
||||
<string name="AndroidManifest__verify_session">セッションの認証キーを照合</string>
|
||||
<string name="AndroidManifest__verify_identity">IDを照合</string>
|
||||
<string name="AndroidManifest__save_identity">IDを保存</string>
|
||||
<string name="AndroidManifest__manage_identity_keys">認証キーを管理</string>
|
||||
<string name="AndroidManifest__complete_key_exchange">鍵交換を完了</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">インポートした認証キーを照合</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">一般設定</string>
|
||||
<string name="preferences__use_settings">使用設定</string>
|
||||
<string name="preferences__pref_all_sms_title">すべてのSMSに使用</string>
|
||||
<string name="preferences__pref_all_mms_title">すべてのMMSに使用</string>
|
||||
<string name="preferences__use_textsecure_for_viewing_and_storing_all_incoming_text_messages">すべての受信テキスト・メッセージを表示および保存するのにTextSecureを使用する</string>
|
||||
<string name="preferences__use_textsecure_for_viewing_and_storing_all_incoming_multimedia_messages">受信するすべてのファイル付きメッセージを表示および保存するのにTextSecureを使用する</string>
|
||||
<string name="preferences__input_settings">設定入力</string>
|
||||
<string name="preferences__pref_enter_sends_title">Enterキーで送信</string>
|
||||
<string name="preferences__pressing_the_enter_key_will_send_text_messages">Enterキーを押すとテキストメッセージが送信されます。</string>
|
||||
<string name="preferences__display_settings">表示設定</string>
|
||||
<string name="preferences__choose_identity">IDを選択</string>
|
||||
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">連絡先リストからあなたの連絡先を選んでください。</string>
|
||||
<string name="preferences__encryption_settings">暗号設定</string>
|
||||
<string name="preferences__change_passphrase">パスワードの変更</string>
|
||||
<string name="preferences__change_my_passphrase">パスワードの変更</string>
|
||||
<string name="preferences__complete_key_exchanges">鍵交換の自動完了</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">同じIDネームとの新しいセッション、又は現在のセッションをするのに鍵交換を自動で完了させる</string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">すべての暗号化されていないメッセージの最後に空白タグを含める</string>
|
||||
<string name="preferences__include_whitespace_tag">空白タグを含める</string>
|
||||
<string name="preferences__sign_key_exchange_messages_with_identity_key">認証キーで鍵交換メッセージに署名</string>
|
||||
<string name="preferences__sign_key_exchange">鍵交換に署名</string>
|
||||
<string name="preferences__forget_passphrase_from_memory_after_some_interval">一定時間経過するとメモリからパスワードを消去する</string>
|
||||
<string name="preferences__timeout_passphrase">パスワードのタイムアウト</string>
|
||||
<string name="preferences__pref_timeout_interval_dialogtitle">パスワードの有効時間を選択</string>
|
||||
<string name="preferences__pref_timeout_interval_title">タイムアウトの間隔</string>
|
||||
<string name="preferences__the_amount_of_time_to_wait_before_forgetting_passphrase">メモリからパスワードを消去するまでの待ち時間です</string>
|
||||
<string name="preferences__identity_key_settings">認証キー</string>
|
||||
<string name="preferences__view_my_identity_key">自分の認証キーを表示</string>
|
||||
<string name="preferences__export_my_identity_key">自分の認証キーをエクスポート</string>
|
||||
<string name="preferences__import_contacts_key">連絡先の認証キーをインポート</string>
|
||||
<string name="preferences__import_an_identity_key_from_a_contact">連絡先から認証キーをインポート</string>
|
||||
<string name="preferences__manage_identity_keys">認証キーを管理</string>
|
||||
<string name="preferences__manage_configured_identity_keys">設定済みの認証キーを管理</string>
|
||||
<string name="preferences__notification_settings">通知設定</string>
|
||||
<string name="preferences__notifications">通知</string>
|
||||
<string name="preferences__display_message_notifications_in_status_bar">通知メッセージをステータスバーに表示</string>
|
||||
<string name="preferences__led_color">LED色</string>
|
||||
<string name="preferences__change_notification_led_color">通知するLED色を変更</string>
|
||||
<string name="preferences__pref_led_blink_title">LED点滅パターン</string>
|
||||
<string name="preferences__change_notification_blink_pattern">通知LED点滅パターンの変更</string>
|
||||
<string name="preferences__pref_led_blink_dialogtitle">LED点滅パターンを選択</string>
|
||||
<string name="preferences__select_led_color">LED色を選択</string>
|
||||
<string name="preferences__select_ringtone">着信音を選択</string>
|
||||
<string name="preferences__vibrate">振動</string>
|
||||
<string name="preferences__also_vibrate_when_notified">通知する時に振動もする</string>
|
||||
<string name="preferences__minutes">分</string>
|
||||
<string name="preferences__hours">時間</string>
|
||||
<string name="preferences__green">緑</string>
|
||||
<string name="preferences__red">赤</string>
|
||||
<string name="preferences__blue">青</string>
|
||||
<string name="preferences__orange">オレンジ</string>
|
||||
<string name="preferences__cyan">水色</string>
|
||||
<string name="preferences__magenta">赤紫</string>
|
||||
<string name="preferences__fast">速い</string>
|
||||
<string name="preferences__normal">普通</string>
|
||||
<string name="preferences__slow">遅い</string>
|
||||
<string name="preferences__custom">カスタム</string>
|
||||
<string name="preferences__advanced">詳細設定</string>
|
||||
<string name="preferences__passphrase">パスワード</string>
|
||||
<string name="preferences__advanced_mms_access_point_names">MMSCのフォールバック</string>
|
||||
<string name="preferences__enable_fallback_mmsc">MMSCのフォールバックを有効にする</string>
|
||||
<string name="preferences__use_mmsc_information_configured_here_when_system_apn_information_is_unavailable">APNからの情報が携帯端末で利用できない時に、ここで設定されたMMSセンターからの情報を使う。</string>
|
||||
<string name="preferences__mmsc_url_required">MMSC URL (必須)</string>
|
||||
<string name="preferences__mms_proxy_host_optional">MMSプロキシ・ホスト(選択自由)</string>
|
||||
<string name="preferences__mms_proxy_port_optional">MMSプロキシ・ポート(選択自由)</string>
|
||||
<string name="preferences__delivery_reports">配信報告</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">送信する全てのSMSに配信報告をつける</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_mms_message_you_send">送信する全てのMMSに配信報告をつける</string>
|
||||
<string name="preferences__mms_delivery_reports">MMS配信報告</string>
|
||||
<string name="preferences__sms_delivery_reports">SMS配信報告</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">会話スレッドが一定の長さを超えると、古いメッセージが自動的に削除されます</string>
|
||||
<string name="preferences__delete_old_messages">古いメッセージの削除</string>
|
||||
<string name="preferences__storage">ストレージ</string>
|
||||
<string name="preferences__conversation_length_limit">会話の最大の長さ</string>
|
||||
<string name="preferences__trim_all_threads_now">すべてのスレッドを今、トリムする</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">すべての会話スレッドをスキャンして、会話の長さ制限を強制します</string>
|
||||
<!--****************************************-->
|
||||
<!--menus-->
|
||||
<!--****************************************-->
|
||||
<!--contact_selection_list-->
|
||||
<string name="contact_selection_list__menu_select_all">すべて選択</string>
|
||||
<string name="contact_selection_list__menu_unselect_all">すべて選択解除</string>
|
||||
<!--contact_selection-->
|
||||
<string name="contact_selection__menu_finished">終了</string>
|
||||
<!--conversation_button_context-->
|
||||
<string name="conversation_button_context__menu_send_unencrypted">暗号化しないで送信</string>
|
||||
<!--conversation_callable-->
|
||||
<string name="conversation_callable__menu_call">通話</string>
|
||||
<!--conversation_context-->
|
||||
<string name="conversation_context__menu_message_details">メッセージの詳細</string>
|
||||
<string name="conversation_context__menu_copy_text">テキストをコピー</string>
|
||||
<string name="conversation_context__menu_delete_message">メッセージの削除</string>
|
||||
<string name="conversation_context__menu_forward_message">メッセージの転送</string>
|
||||
<!--conversation_insecure-->
|
||||
<string name="conversation_insecure__menu_start_secure_session">セキュア・セッションを開始</string>
|
||||
<!--conversation_list_batch-->
|
||||
<string name="conversation_list_batch__menu_delete_selected">選択したものを削除</string>
|
||||
<string name="conversation_list_batch__menu_select_all">すべて選択</string>
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">検索</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<string name="conversation_secure_verified__menu_security">セキュリティ</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">セッションを照合</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">受信者を照合</string>
|
||||
<string name="conversation_secure_verified__menu_abort_secure_session">セキュア・セッションを中止</string>
|
||||
<!--conversation-->
|
||||
<string name="conversation__menu_add_attachment">添付</string>
|
||||
<string name="conversation__menu_delete_thread">スレッドを削除</string>
|
||||
<!--conversation_group_options-->
|
||||
<string name="convesation_group_options__recipients_list">受信者リスト</string>
|
||||
<string name="conversation_group_options__delivery">配信</string>
|
||||
<string name="conversation_group_options__conversation">会話</string>
|
||||
<string name="conversation_group_options__broadcast">一斉送信</string>
|
||||
<!--key_scanning-->
|
||||
<string name="key_scanning__menu_compare">比較</string>
|
||||
<string name="key_scanning__menu_get_scanned_to_compare">スキャンしてもらって比較</string>
|
||||
<string name="key_scanning__menu_scan_to_compare">スキャンして比較</string>
|
||||
<!--text_secure_locked-->
|
||||
<string name="text_secure_locked__menu_unlock">ロック解除</string>
|
||||
<!--text_secure_normal-->
|
||||
<string name="text_secure_normal__menu_new_message">新規メッセージ</string>
|
||||
<string name="text_secure_normal__menu_settings">設定</string>
|
||||
<string name="text_secure_normal__menu_import_export">インポート/エクスポート</string>
|
||||
<string name="text_secure_normal__menu_import">インポート</string>
|
||||
<string name="text_secure_normal__menu_export">エクスポート</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">パスワード消去</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">すべて既読にする</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">確認済み</string>
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
@@ -6,7 +6,6 @@
|
||||
<string name="delete">ဖျက်ရန်</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Database နှင့် ဆက်တင်များကို တင်သွင်းမည်လား?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">စာသားလံုခြုံမှုဆိုင်ရာ ဒေတာဘေ့၊ ကီးများ နှင့် ဆက်တင်များကို SDကဒ်မှ တင်သွင်းမည်လား၊ သတိပေးချက်၊ နဂိုရှိပြီးသား စာသား၊ ကီး၊ ဆက်တင်များကို အမှားမှားအယွင်းယွင်း ဖြစ်သွားစေနိုင်သည်။ </string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">ဒေတာဘေ့နှင့်ကီးများထည့်သွင်းနေ</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">သင်၏ SMS ဒေတာဘေ့၊ ကီးများနှင့် ဆက်တင်များ သွင်းယူးနေ...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">ဒေတာဘေ့ကိုထုတ်ယူမည်လား?</string>
|
||||
@@ -45,7 +44,6 @@
|
||||
<string name="ConversationItem_saving_attachment">ပူးတွဲပါအရာအားသိမ်းဆည်းနေ</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">ပူးတွဲပါအား SD ကဒ်သို့သိမ်းဆည်းနေ...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">SD ကဒ်သို့သိမ်းမည်လား</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">ဤမီဒီယာမှာ စာဝှက်စနစ်သံုး ဒေတာဘေ့တွင် သိမ်းဆည်းထားသည်၊ SDကဒ်သို့ သိမ်းမည့်မူကွဲတွင် စာဝှက်စနစ် မပါတော့ပါ။ ဆက်လက်လုပ်ဆောင်မည်လား။ </string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">ပူးတွဲမှုအား SDကဒ်သို့ သိမ်းဆည်းနေစဉ်အမှားပေါ်ပေါက်</string>
|
||||
<string name="ConversationItem_success_exclamation">အောင်မြင်!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">SDကဒ်သို့ ရေးမှတ်ခြင်းမပြုနိုင်</string>
|
||||
@@ -110,8 +108,6 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">MMS ဆက်တင် အဆင့်မြှင့်ပြီး</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">သင်သည် ဤတန်ဖိုးတွေကို စာသာလံုခြုံမှု ဆက်တင်မီနူးမှနေ၍ အချိန်မရွေး ပြင်ဆင်နိုင်</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ပြဿနာ\n\n ရရှိလာသော Public ကီးမှာ ပျက်ဆီးနေပါသည်။ ၎င်းကီးကို ရှေ့ဆက်ဆောင်ရွက်၍ မရပါ။ ကျေးဇူးပြုပြီး ဆက်ရှင် ပြန်စပါ။</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ပြဿနာ\n\nလက်ခံရရှိလာသော public ကီးမှာ ထောက်ပံထားခြင်းမရှိသည့် ပရိုတိုကောမှ ဖြစ်ပါသည်။ ၎င်းကီးကို ရှေ့ဆက်ဆောင်ရွက်၍ မရပါ။ ကျေးဇူးပြုပြီး ဆက်ရှင် ပြန်စပါ။</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">ဤ ကီးပြောင်းလဲခြင်း အကြောင်းကြားချက်တွင် အသိအမှတ်ပြုအမှတ်အသား မပါဝင်</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">ဤ ကီးပြောင်းလဲခြင်း အကြောင်းကြားချက်တွင် အသိအမှတ်ပြုအမှတ်အသား ပါဝင်၊ you do not yet trust it.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">ဒီကီးအလဲအလှယ်စာသားတွင် အသင်ယုံကြည်သော %S အိုင်ဒီလက်မှတ်ပါပါသည်။</string>
|
||||
@@ -265,7 +261,6 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">ဆက်ရှင်</string>
|
||||
<string name="receive_key_activity__identities">အသိအမှတ်ပြုမှုများ</string>
|
||||
<string name="receive_key_activity__complete_exchange">ပြောင်းလဲခြင်းပြီး</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">သို့</string>
|
||||
<!--review_identities-->
|
||||
@@ -392,7 +387,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">ရှာရန်</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">လုံခြုံရေး</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">ဆက်ရှင်အတည်ပြု</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">လက်ခံကိုစစ်ဆေးပါ</string>
|
||||
@@ -417,6 +411,5 @@
|
||||
<string name="text_secure_normal__menu_clear_passphrase">စကားဝှက်ကိုရှင်းလင်းပါ</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">စစ်ဆေးပြီး</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Verwijder</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importeer Database en Instellingen?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importeer TextSecure database, sleutels en instellingen vanaf de SD-kaart?\n\nWAARSCHUWING: Dit kan bestaande berichten, sleutels en instellingen aantasten!</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">TextSecure database, sleutels en instellingen vanaf de SD-kaart importeren?\n\nWAARSCHUWING: Dit zal bestaande berichten, sleutels en instellingen aantasten!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importeren van Database en Sleutels</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">SMS database, sleutels en instellingen aan het importeren...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Exporteer Database?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Nu alle oude berichten verwijderen?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Weet u zeker dat u bij alle conversaties alleen de laatste %s berichten behouden wilt?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Verwijderen</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Mijn</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Afbeelding</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
|
||||
@@ -45,7 +46,7 @@
|
||||
<string name="ConversationItem_saving_attachment">Bijlage Opslaan</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Bijlage aan het opslaan op de SD-kaart...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Opslaan op SD-kaart?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Deze media is opgeslagen in een versleutelde database. De versie die u opslaat op de SD-kaart is niet langer versleuteld, wilt u doorgaan?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Deze media is opgeslagen in een versleutelde database. De versie die u op de SD-kaart opslaat, zal niet langer versleuteld zijn. Wilt u doorgaan?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Fout tijdens het opslaan van de bijlage naar de SD-kaart!</string>
|
||||
<string name="ConversationItem_success_exclamation">Succesvol!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">SD-kaart niet beschrijfbaar!</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Groepsconversatie</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d ontvangers in groep</string>
|
||||
<string name="ConversationActivity_saving_draft">Concept opslaan...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Ongeldige ontvanger!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Bericht details</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Verzender: %1$s\nTransport: %2$s\nVerstuurd/Ontvangen:%3$s</string>
|
||||
@@ -111,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">MMS Instellingen Geupdate</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">U kunt deze instellingen op elk gewenst moment wijzigen via het TextSecure instellingen menu.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">FOUT: U heeft een corrupte publieke sleutel ontvangen. Deze sleutel kan niet verwerkt worden, herinitiëer alstublieft een beveiligde sessie.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">FOUT: U heeft een publieke sleutel ontvangen van een niet ondersteunde versie van het protocol. Deze sleutel kan niet verwerkt worden, herinitiëer alstublieft een beveiligde sessie.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">FOUT:\n\nU heeft een corrupte publieke sleutel ontvangen. Deze sleutel kan niet verwerkt worden, herinitiëer alstublieft een beveiligde sessie.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">FOUT:\n\nU heeft een publieke sleutel ontvangen van een niet ondersteunde versie van het protocol. Deze sleutel kan niet verwerkt worden, herinitiëer alstublieft een beveiligde sessie.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Dit sleuteluitwisselingsbericht bevat geen identiteitshandtekening.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Dit sleuteluitwisselingsbericht bevat een identiteitshandtekening, maar u vertrouwt deze nog niet.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Dit sleuteluitwisselingsbericht bevat een identiteitshandtekening welke u vertrouwt voor: %s</string>
|
||||
@@ -122,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">U heeft een Sleuteluitwisselingsbericht ontvangen van %s. U heeft voorheen een sessie geïnitieerd met deze contactpersoon en door deze sleutel te accepteren voltooid u de sleuteluitwisseling. Wilt u de sleuteluitwisseling voltooien?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">U heeft een Sleuteluitwisselingsbericht verstuurd naar %s en heeft nog geen reactie ontvangen.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">U heeft een Sleuteluitwisselingsbericht ontvangen van %s. U heeft geen bestaande sessie met deze contactpersoon, wilt u deze sleuteluitwisseling voltooien?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">De handtekening op deze sleuteluitwisseling is anders dan wat u eerder ontvangen heeft van dit contact. Dit kan betekenen dat iemand probeert uw communicatie the onderscheppen, of dat dit contact gewoon TextSecure opnieuw geïnstalleerd heeft en nu een nieuwe identiteitssleutel heeft.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">U kunt wensen dit contact te verifiëren.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">De handtekening op deze sleuteluitwisseling is vertrouwd, maar u heeft de \'automatisch aanvullen sleuteluitwisselingen\' instelling uitgeschakeld.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Niet in staat de corrupte identiteitssleutel te bekijken!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Verwijder identiteit?</string>
|
||||
@@ -176,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NIET Geverifieerd!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">De gescande sleutel komt overeen!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Geverifieerd!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Identiteitsvingerafdruk</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Initiëren Ondanks Bestaand Verzoek?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">U heeft reeds een sessieinititatieverzoek verstuurd naar deze ontvanger, weet u zeker dat u er nog een wilt sturen? Dit maakt het eerdere verzoek ongeldig.</string>
|
||||
@@ -196,7 +202,7 @@
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">Verkeerd versleuteld MMS-bericht...</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">MMS-bericht versleuteld voor niet bestaande sessie...</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">Momenteel niet in staat om uw MMS bericht te versturen.</string>
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">Momenteel niet in staat om uw MMS bericht te versturen.</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">Bezig met importeren</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">Tekstberichten aan het importeren</string>
|
||||
@@ -213,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Berichtaflevering mislukt.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Het bericht afleveren is mislukt.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Fout bij afleveren bericht.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Markeer alles als gelezen</string>
|
||||
<string name="MessageNotifier_mark_as_read">Markeer als gelezen</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Momenteel niet in staat om uw SMS bericht te versturen. Zodra de service beschikbaar is zal het verzonden worden .</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -268,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sessie</string>
|
||||
<string name="receive_key_activity__identities">Identiteiten</string>
|
||||
<string name="receive_key_activity__complete_exchange">Voltooi Uitwisseling</string>
|
||||
<string name="receive_key_activity__complete">Voltooid</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Aan</string>
|
||||
<!--review_identities-->
|
||||
@@ -404,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Zoeken</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Veiligheid</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verifieer Sessie</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verifieer Ontvanger</string>
|
||||
@@ -433,6 +440,5 @@
|
||||
<string name="text_secure_normal__mark_all_as_read">Markeer Alles Als Gelezen</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Geverifieerd</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
<string name="no">Nei</string>
|
||||
<string name="delete">Slett</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importer database og instillinger?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importer TextSecure meldingsdatabase, nøkler og innstillinger fra SD-kort? \n\nADVARSEL: Dette vil overskrive eksisterende meldinger, nøkler og innstillinger!</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importer database og innstillinger?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importer TextSecure database, nøkler og innstillinger fra SD-kortet?\n\nADVARSEL: Dette vil overskrive eksisterende meldinger, nøkler og innstillinger!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importerer database og nøkler</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importerer meldingsdatabasen din, nøkler og instillinger...</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importerer meldingsdatabasen din, samt nøkler og innstillinger...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Eksporter database?</string>
|
||||
<string name="ApplicationExportManager_export_textsecure_database_keys_and_settings_prompt">Eksporter TextSecure meldingsdatabase, nøkler og instillinger til SD-kort?</string>
|
||||
<string name="ApplicationExportManager_export_textsecure_database_keys_and_settings_prompt">Eksporter TextSecure meldingsdatabase, nøkler og innstillinger til SD-kort?</string>
|
||||
<string name="ApplicationExportManager_exporting_database_and_keys">Eksporterer database og nøkler</string>
|
||||
<string name="ApplicationExportManager_exporting_your_sms_database_keys_and_settings">Eksporterer meldingsdatabasen din, nøkler og instillinger...</string>
|
||||
<string name="ApplicationExportManager_exporting_your_sms_database_keys_and_settings">Eksporterer meldingsdatabasen din, samt nøkler og innstillinger...</string>
|
||||
<string name="ApplicationExportManager_no_sd_card_found_exclamation">SD-kort ikke funnet!</string>
|
||||
<string name="ApplicationExportManager_error_exporting_to_sd_exclamation">Feil ved export til SD-kort!</string>
|
||||
<string name="ApplicationExportManager_import_successful_exclamation">Import vellykket!</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Slette alle gamle meldinger nå?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Er du sikker på at du ønsker å umiddelbart trimme alle samtaletrådene til de siste %s meldinger?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Slett</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Min</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Bilde</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
|
||||
@@ -45,7 +46,7 @@
|
||||
<string name="ConversationItem_saving_attachment">Lagrer vedlegg</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Lagrer vedlegg til SD-kort...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Lagre til SD-kort?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Dette vedlegget har blitt lagret i en kryptert database. Den versjonen du lagrer på SD-kortet vil ikke lenger være kryptert, ønsker du å fortsette?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Dette mediet har blitt lagret i en kryptert database. Versjonen du lagrer på SD-kortet vil ikke lenger være kryptert. Vil du fortsette?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Kunne ikke lagre vedlegg til SD-kort!</string>
|
||||
<string name="ConversationItem_success_exclamation">Suksess!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Kunne ikke skrive til SD-kort!</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Gruppesamtale</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d mottakere i gruppen</string>
|
||||
<string name="ConversationActivity_saving_draft">Lagrer utkast...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Ugyldig mottaker!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Meldingsdetaljer</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Sender: %1$s⏎ Transport: %2$s⏎ Sendt/Mottatt:%3$s</string>
|
||||
@@ -111,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">MMS konfigurasjon oppdatert</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Du kan forandre disse verdiene når som helst i konfigurasjonsmenyen for TextSecure.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">EN FEIL HAR OPPSTÅTT:\n\nDu har mottatt en korrupt offentlig nøkkel. Denne nøkkelen kan ikke prosesseres; vær vennlig å gjenoppta en sikker sesjon.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">EN FEIL HAR OPPSTÅTT: \n\nDu har mottatt en offentlig nøkkel fra en usupportert versjon av protokollen. Denne nøkkelen kan ikke prosesseres; vær vennlig å gjenoppta en sikker sesjon.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">FEIL:\n\nDu har mottatt en korrupt offentlig nøkkel. Denne nøkkelen kan ikke behandles, vær vennlig å re-initiere en sikker sesjon.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">FEIL:\n\nDu har mottatt en offentlig nøkkel fra en versjon av protokollen som ikke støttes. Denne nøkkelen kan ikke behandles, vær vennlig å re-initiere en sikker sesjon.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Denne nøkkelutvekslingsmeldingen inneholder ikke en ID-signatur.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Denne nøkkelutvekslingsmeldingen inneholder en ID-signatur, men du har valgt å ikke stole på den ennå.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Denne nøkkelutvekslingsmeldingen inneholder en ID-signatur som du stoler på for: %s</string>
|
||||
@@ -122,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Du har mottatt en nøkkelutvekslingsmelding fra %s. Du har tidligere initiert en sesjon med denne kontakten. Ved å akseptere denne nøkkelen vil du fullføre nøkkelutvekslingen. Ønsker du å fullføre denne nøkkelutvekslingen?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Du har initiert en nøkkelutveksling med %s men du har ennå ikke fått noe svar på denne.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Du har mottatt en nøkkelutvekslingsmelding fra %s. Du har ingen eksisterende sesjon med denne kontakten. Ønsker du å fullføre nøkkelutvekslingen?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">Signaturen på denne nøkkelutvekslingen er ikke lik den du tidligere mottok fra denne\nkontakten. Det kan enten bety at noen prøver å avskjære kommunikasjonen din eller\nat denne kontakten har installert TextSecure på nytt og dermed fått en ny identitetsnøkkel.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Du bør verifisere\ndenne kontakten.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">Signaturen på denne nøkkelutvekslingen er til å stole på, men du har deaktivert innstillingen\n\'fullfør nøkkelutvekslinger automatisk\'.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Klarer ikke å vise korrupt ID-nøkkel!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Slett ID?</string>
|
||||
@@ -176,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">IKKE bekreftet!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">Den skannede nøkkelen stemmer overens!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Bekreftet!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Identitetens fingeravtrykk</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Initiere til tross for eksisterende forespørsel?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Du har allerede sendt en forespørsel om å initiere en sesjon til denne mottakeren. Er du sikker på at du vil sende en til? Dette vil ugyldiggjøre tidligere forespørsel.</string>
|
||||
@@ -213,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Levering av meldingen mislyktes.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Klarte ikke å levere meldingen.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Feil ved levering av meldingen.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Marker alle som lest</string>
|
||||
<string name="MessageNotifier_mark_as_read">Marker som lest</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Det er ikke mulig å sende SMS meldingen akkurat nå. Den vil sendes når tjenesten blir tilgjengelig igjen.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -268,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sesjon</string>
|
||||
<string name="receive_key_activity__identities">Identiteter</string>
|
||||
<string name="receive_key_activity__complete_exchange">Fullfør utveksling</string>
|
||||
<string name="receive_key_activity__complete">Complete</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Til</string>
|
||||
<!--review_identities-->
|
||||
@@ -404,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Søk</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Sikkerhet</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Bekreft sesjon</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Bekreft mottaker</string>
|
||||
@@ -433,6 +440,5 @@
|
||||
<string name="text_secure_normal__mark_all_as_read">Marker alle lest</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Bekreftet</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Apagar</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importar base de dados e configurações?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importar a base de dados, chaves e configurações TextSecure a partir do Cartão SD?⏎ ⏎ AVISO: Isto vai sobreescrever as mensagens, chaves e configurações existentes!</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importar do cartão SD a base de dados, chaves e configurações do TextSecure?\n\nATENÇÃO: Isto irá sobrescrever mensagens, chaves e configurações existentes!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importar base de dados e chaves</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">A importar a base de dados de SMS, chaves e configurações...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Exportar base de dados?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Deletar todas mensagens antigas agora?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Tem certeza que deseja manter apenas as %s mensagens mais recentes?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Deletar</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Minhas</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Imagem</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Vídeo</string>
|
||||
@@ -45,7 +46,7 @@
|
||||
<string name="ConversationItem_saving_attachment">A guardar anexo</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">A guardar anexo para o cartão SD...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Guardar para o cartão SD?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Este ficheiro foi armazenado numa base de dados cifrada. A versão que gravar no cartão SD deixará de estar cifrada, pretende continuar?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Este arquivo foi armazenado em uma base de dados criptografada. A versão salva no cartão SD não estará criptografada. Deseja continuar?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Erro a gravar anexo para o cartão SD...</string>
|
||||
<string name="ConversationItem_success_exclamation">Sucesso!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Não é possível escrever no cartão SD...</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Conversa em grupo</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d destinatários no grupo</string>
|
||||
<string name="ConversationActivity_saving_draft">Salvando rascunho...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Destinatário inválido!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Detalhes da mensagem</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Remetente: %1$s⏎ Transporte: %2$s⏎ Enviadas/Recebidas:%3$s</string>
|
||||
@@ -111,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">Configurações MMS Atualizadas</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Você pode modificar estes valores a qualquer momento nas configurações do TextSecure.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERRO:⏎ ⏎ Recebeu uma chave pública corrompida. Esta chave não pode ser processada, por favor reinicie uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERRO:⏎ ⏎ Recebeu uma chave pública de uma versão do protocolo não suportada. Esta chave não pode ser processada, por favor reinicie uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERRO:\n\nVocê recebeu uma chave pública corrompida. Esta chave não pode ser processada; favor reiniciar uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERRO:\n\nVocê recebeu uma chave pública de uma versão de protocolo não suportada. Esta chave não pode ser processada; favor reiniciar uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Esta mensagem de intercâmbio de chaves não inclúi uma assinatura de identidade.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Esta mensagem de intercâmbio de chaves inclúi uma assinatura de identidade, mas ainda não confia nela.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Esta mensagem de intercâmbio de chaves inclúi uma assinatura de identidade confiada para: %s</string>
|
||||
@@ -122,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Recebeu uma mensagem de intercâmbio de chaves de %s. Já tem uma sessão cifrada prévia com este contacto e ao aceitar esta chave, completará o intercâmbio de chaves. Deseja completar este intercâmbio de chaves?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Iniciou uma mensagem de intercâmbio de chaves com %s mas ainda não recebeu resposta.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Recebeu uma mensagem de intercâmbio de chaves de %s. Não tem nenhuma sessão prévia estabelecida com este contacto, deseja completar este intercâmbio de chaves?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">A\n assinatura nesta troca de chaves é diferente da que você recebeu anteriormente deste\n contato. Isto pode significar que alguém está tentando interceptar sua comunicação, ou\n que este contato reinstalou o TextSecure e agora tem uma nova chave de identidade.\n </string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Talvez você queira verificar\n este contato.\n </string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">A\n assinatura nesta troca de chaves é confiável, mas a opção \'completar troca de chaves automaticamente\'\n está desabilitada.\n </string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Não é possível visualizar a chave de identidade corrompida!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Apagar identidade?</string>
|
||||
@@ -176,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NÃO verificado!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">A chave lida coincide!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Verificado!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Impressão digital de identidade</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Iniciar apesar de pedido existente?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Já enviou um pedido de início de sessão para este destinatário, tem a certeza que pretende enviar outro? Isto invalidará o pedido anterior.</string>
|
||||
@@ -213,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Envio de mensagem falhou.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Falha ao enviar mensagem.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Erro ao enviar mensagem.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Marcar todas como lidas</string>
|
||||
<string name="MessageNotifier_mark_as_read">Marcar como lida</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Mensagem SMS não pôde ser enviada agora. Será enviada quando o serviço estiver disponível.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -268,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sessão</string>
|
||||
<string name="receive_key_activity__identities">Identidades</string>
|
||||
<string name="receive_key_activity__complete_exchange">Completar intercâmbio</string>
|
||||
<string name="receive_key_activity__complete">Concluído</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Para</string>
|
||||
<!--review_identities-->
|
||||
@@ -404,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Procurar</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Segurança</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verificar sessão</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verificar destinatário</string>
|
||||
@@ -433,6 +440,5 @@
|
||||
<string name="text_secure_normal__mark_all_as_read">Marcar todas como lidas</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Verificado</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Apagar</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importar base de dados e configurações?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importar a base de dados, chaves e configurações TextSecure a partir do Cartão SD?⏎ ⏎ AVISO: Isto vai sobreescrever as mensagens, chaves e configurações existentes!</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importar a base de dados TextSecure, chaves e configurações a partir do cartão SD? \n\nAVISO: Isto irá sobrescrever quaisquer mensagens, chaves e configurações existentes!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importar base de dados e chaves</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">A importar a base de dados de SMS, chaves e configurações...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Exportar base de dados?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Deletar todas mensagens antigas agora?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Tem certeza que deseja manter apenas as %s mensagens mais recentes?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Deletar</string>
|
||||
<string name="ApplicationPreferencesActivity_my">O meu</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Imagem</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Vídeo</string>
|
||||
@@ -45,7 +46,7 @@
|
||||
<string name="ConversationItem_saving_attachment">A guardar anexo</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">A guardar anexo para o cartão SD...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Guardar para o cartão SD?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Este ficheiro foi armazenado numa base de dados cifrada. A versão que gravar no cartão SD deixará de estar cifrada, pretende continuar?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Este ficheiro foi armazenado numa base de dados cifrada. A versão que guardar para o cartão SD não se encontrará cifrada. Deseja prosseguir?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Erro a gravar anexo para o cartão SD...</string>
|
||||
<string name="ConversationItem_success_exclamation">Sucesso!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Não é possível escrever no cartão SD...</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Conversa em grupo</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d destinatários no grupo</string>
|
||||
<string name="ConversationActivity_saving_draft">A guardar rascunho...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Destinatário inválido!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Detalhes da mensagem</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Remetente: %1$s⏎ Transporte: %2$s⏎ Enviadas/Recebidas:%3$s</string>
|
||||
@@ -111,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">Configuração MMS Actualizada</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Pode modificar estes valores a partir do menu de configuração TextSecure em qualquer altura.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERRO:⏎ ⏎ Recebeu uma chave pública corrompida. Esta chave não pode ser processada, por favor reinicie uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERRO:⏎ ⏎ Recebeu uma chave pública de uma versão do protocolo não suportada. Esta chave não pode ser processada, por favor reinicie uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERRO:\n\nRecebeu uma chave pública corrompida. Esta chave não pode ser processada, por favor reinicie uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERRO:\n\nRecebeu uma chave pública gerada por uma versão não suportada do protocolo. Esta chave não pode ser processada, por favor reinicie uma sessão segura.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Esta mensagem de intercâmbio de chaves não inclúi uma assinatura de identidade.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Esta mensagem de intercâmbio de chaves inclúi uma assinatura de identidade, mas ainda não confia nela.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Esta mensagem de intercâmbio de chaves inclúi uma assinatura de identidade confiada para: %s</string>
|
||||
@@ -122,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Recebeu uma mensagem de intercâmbio de chaves de %s. Já tem uma sessão cifrada prévia com este contacto e ao aceitar esta chave, completará o intercâmbio de chaves. Deseja completar este intercâmbio de chaves?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Iniciou uma mensagem de intercâmbio de chaves com %s mas ainda não recebeu resposta.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Recebeu uma mensagem de intercâmbio de chaves de %s. Não tem nenhuma sessão prévia estabelecida com este contacto, deseja completar este intercâmbio de chaves?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">A assinatura deste intercâmbio de chaves é diferente da previamente recebida deste contacto. Isto pode significar que alguém está a tentar interceptar esta comunicação ou simplesmente que este contacto reinstalou o TextSecure e tem agora uma nova chave de identidade.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Pode ser desejável verificar este contracto.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">A assinatura deste intercâmbio de chaves é confiada, mas tem a configuração \"completar automaticamente intercâmbio de chaves\" desactivada.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Não é possível visualizar a chave de identidade corrompida!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Apagar identidade?</string>
|
||||
@@ -176,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NÃO verificado!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">A chave lida coincide!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Verificado!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Impressão digital da identidade</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Iniciar apesar de pedido existente?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Já enviou um pedido de início de sessão para este destinatário, tem a certeza que pretende enviar outro? Isto invalidará o pedido anterior.</string>
|
||||
@@ -213,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">A remessa de mensagem falhou.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Falhou a remessa de mensagem.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Erro a remeter a mensagem.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Marcar todas como lidas</string>
|
||||
<string name="MessageNotifier_mark_as_read">Marcar como lidas</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Presentemente não é possível remeter a mensagem SMS. Será reenviada assim que o serviço esteja disponível.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -268,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Sessão</string>
|
||||
<string name="receive_key_activity__identities">Identidades</string>
|
||||
<string name="receive_key_activity__complete_exchange">Completar intercâmbio</string>
|
||||
<string name="receive_key_activity__complete">Completo</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Para</string>
|
||||
<!--review_identities-->
|
||||
@@ -404,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Procurar</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Segurança</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verificar sessão</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verificar destinatário</string>
|
||||
@@ -433,6 +440,5 @@
|
||||
<string name="text_secure_normal__mark_all_as_read">Marcar todas como lidas</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Verificado</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<string name="delete">Удалить</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Импортировать базу данных и настройки?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Импорт TextSecure базы данных, ключи и настройки на SD-карту ⏎ ⏎ ВНИМАНИЕ: Это сотрет любые существующие сообщения, ключи и настройки!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Импорт ключей и базы данных</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Импорт базы данных СМС, ключей и настроек...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Экспортировать базу данных?</string>
|
||||
@@ -45,7 +44,6 @@
|
||||
<string name="ConversationItem_saving_attachment">Сохранение приложения</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Сохранение приложения на SD карту</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Сохранить на SD карту?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Эта информация была сохранена в зашифрованной базе данных. Версия которую вы сохраните на карту памяти SD больше не будет зашифрованна. Хотите продолжать?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Ошибка при сохранении приложения на SD карту!</string>
|
||||
<string name="ConversationItem_success_exclamation">Успешно!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Невозможно произвести запись на SD карту!</string>
|
||||
@@ -110,8 +108,6 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">Настройки MMS Обновлены</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Вы можете изменить эти значения из TextSecure меню в любое время.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">Ошибка: Вы получили поврежденный ключ общего пользования. Этот ключ не действителен, пожалуйста, начните сессию сначала.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERROR:⏎ ⏎ You have received a public key from an unsupported version of the protocol. This key can not be processed, please re-initiate a secure session.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">В этом сообщении ключевого обмена отсутствует личная подпись.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Это сообщение ключевого обмена содержит личную подпись, но вы ей еще не доверяете.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Это сообщение ключевого обмена содержит личную подпись которой вы доверяете: %s</string>
|
||||
@@ -265,7 +261,6 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Сессия</string>
|
||||
<string name="receive_key_activity__identities">Личности</string>
|
||||
<string name="receive_key_activity__complete_exchange">Завершить Обмен</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">К</string>
|
||||
<!--review_identities-->
|
||||
@@ -392,7 +387,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Поиск</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Защита</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Проверь Сессию</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Проверь Получателя</string>
|
||||
@@ -417,6 +411,5 @@
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Удалить пароль</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Проверено</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<string name="delete">Zmaž</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importovať databázu a nastavenia?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importovať TextSecure databázu, kľúče a nastavenia z SD karty?\n\nPOZOR: Akcia zničí existujúce správy, kľúče a nastavenia!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importujem databázu a kľúče</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importujem SMS databázu, kľúče a nastavenia...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Exportovať databázu?</string>
|
||||
@@ -45,7 +44,6 @@
|
||||
<string name="ConversationItem_saving_attachment">Ukladám prílohu</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Ukladám prílohu na SD kartu...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Uložiť na SD kartu?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Tieto údaje sú uložené v kryptovanej databáze. Verzia ktorú ukladáte na SD kartu nebude kryptovaná. Chcete pokračovať?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Chyba počas ukladania na SD kartu!</string>
|
||||
<string name="ConversationItem_success_exclamation">Hotovo!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Nemôžem zapisovať na SD kartu!</string>
|
||||
@@ -102,8 +100,6 @@
|
||||
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">Nesprávne heslo!</string>
|
||||
<!--PromptApnActivity-->
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">CHYBA:\n\nDostali ste poškodený verejný kľúč. Tento kľúč sa nedá použiť. Spustite prosím znova vytvorenie bezpečnej session.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">CHYBA:\n\nDostali ste verejný kľúč nepodporovanej verzie protokolu. Tento kľúč sa nedá použiť. Spustite prosím znova vytvorenie bezpečnej session.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Táto správa vzájomnej výmeny kľúčov neobsahuje podpis totožnosti.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Táto správa vzájomnej výmeny kľúčov obsahuje podpis totožnosti, ale zatiaľ mu nedôverujete.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Táto správa vzájomnej výmeny kľúčov obsahuje podpis totožnosti ktorej dôverujete pre: %s</string>
|
||||
@@ -240,7 +236,6 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Session</string>
|
||||
<string name="receive_key_activity__identities">Identifikácie</string>
|
||||
<string name="receive_key_activity__complete_exchange">Dokončiť výmenu</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Pre</string>
|
||||
<!--review_identities-->
|
||||
@@ -367,7 +362,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Hľadaj</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Bezpečnosť</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Over session</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Over príjemcu</string>
|
||||
@@ -392,6 +386,5 @@
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Vymaž heslo</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Overené</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Izbriši</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Uvozim podatkovno zbirko in nastavitve?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Naj uvozim podatkovno zbirko TextSecure, ključe in nastavitve s kartice SD?\n\nPOZOR: To bo izbrisalo vsa obstoječa sporočila, ključe in nastavitve!</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Naj uvozim podatkovno zbirko TextSecure, ključe in nastavitve s kartice SD?\n\nPOZOR: To bo izbrisalo vsa obstoječa sporočila, ključe in nastavitve!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Uvoz podatkovne zbirke in ključev</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Uvažam vašo zbirko SMS sporočil, ključe in nastavitve...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Naj izvozim podatkovno zbirko?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Izbrišem stara sporočila?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Ste prepričani, da želite izbrisati vse stare pogovore, razen najnovejših?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Izbriši</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Moj</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Slika</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
|
||||
@@ -45,7 +46,7 @@
|
||||
<string name="ConversationItem_saving_attachment">Shranjevanje priponke</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Shranjujem priponko na kartico SD...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Shranim na kartico SD?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Ta datoteka je shranjena v šifrirani podatkovni zbirki. Verzija, ki jo boste shranili na SD kartico ne bo več šifrirana. Želite nadaljevati?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Ta datoteka je shranjena v kriptirani zbirki. Različica, ki jo boste shranili na SD kartico ne bo več kriptirana. Želite nadaljevati?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Napaka pri shranjevanju priponke na kartico SD!</string>
|
||||
<string name="ConversationItem_success_exclamation">Izvršeno!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Onemogočeno pisanje na kartico SD!</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Skupinski pogovor</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d prejemnikov v skupini</string>
|
||||
<string name="ConversationActivity_saving_draft">Shranjujem osnutek...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Neveljaven prejemnik!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Podrobnosti sporočila</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Pošiljatelj: %1$s\nPrenos: %2$s\nPoslano/Prejeto:%3$s</string>
|
||||
@@ -111,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">Nastavitve MMS posodobljene</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Vnešeno lahko kadarkoli popravite v nastavitvah TextSecure.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">POZOR:\n\nPrejeli ste okvarjen javni ključ. Ključa ne morem obdelati, prosim ponovno vzpostavite varno sejo.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">POZOR:\n\nPrejeli ste javni ključ nepodprte verzije protokola. Ključa ne morem obdelati, prosim ponovno vzpostavite varno sejo.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">POZOR:\n\nPrejeli ste okvarjen javni ključ. Ključa ne morem obdelati, prosim ponovno vzpostavite varno sejo.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">POZOR:\n\nPrejeli ste javni ključ nepodprte verzije protokola. Ključa ne morem obdelati, prosim ponovno vzpostavite varno sejo.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Sporočilo za izmejavo ključev ne vsebuje identifikacijskega podpisa.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">To sporočilo za izmejavo ključev vsebuje identifikacijski podpis, ki mu še ne zaupate.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">To sporočilo za izmejavo ključev vsebuje identifikacijski podpis, ki mu zaupate: %s</string>
|
||||
@@ -122,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Prejeli ste sporočilo za izmenjavo ključev od %s. S pošiljateljem ste predhodno že vzpostavili sejo, s potrditvijo tega ključa pa boste dokončali izmenjavo ključev. Želite dokončati izmenjavo ključev?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">%s ste poslali sporočilo za izmenjavo ključev, vendar niste prejeli odgovora.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Prejeli ste sporočilo za izmenjavo ključev od %s. S pošiljateljem nimate vzpostavljene seje. Želite dokončati izmenjavo ključev?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">Podpis pri tej izmenjavi se razlikuje od predhodno izmenjanih ključev s to osebo. To lahko pomeni, da nekdo prestreza komunikacijo, ali pa, da je oseba ponovno namestila TextSecure in ima sedaj nov ključ identitete.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Morda bi želeli overoviti⏎\nta stik.⏎</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">Podpis pri tej izmenjavi je zaupanja vreden, vendar imate izklopljeno možnost \'Samodejno dokončaj izmenjavo ključev\'.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Ogled okvarjenega identifikacijskega ključa ni mogoč!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Izbrišem identiteto?</string>
|
||||
@@ -176,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NI preverjeno!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">Skeniran ključ se ujema!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Preverjen!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Prstni odtis identitete</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Uveljavim kljub obstoječi zahtevi?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Prejemniku ste že poslali zahtevo za inicijacijo, ste prepričani, da želite poslati še eno? To bo razveljavilo prvo zahtevo.</string>
|
||||
@@ -213,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Dostava sporočila ni uspela.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Neuspešna dostava sporočila.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Napaka pri dostavi sporočila.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Označi vsa kot prebrana</string>
|
||||
<string name="MessageNotifier_mark_as_read">Označi kot prebrano</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Sporočila SMS trenutno ni mogoče poslati. Poslano bo, takoj ko bo mogoče.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -268,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Seja</string>
|
||||
<string name="receive_key_activity__identities">Identitete</string>
|
||||
<string name="receive_key_activity__complete_exchange">Zaključi izmenjavo</string>
|
||||
<string name="receive_key_activity__complete">Končano</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Za</string>
|
||||
<!--review_identities-->
|
||||
@@ -296,12 +304,12 @@
|
||||
<string name="AndroidManifest__textsecure_detected">TextSecure zaznan</string>
|
||||
<string name="AndroidManifest__public_identity_key">Javni identifikacijski ključ</string>
|
||||
<string name="AndroidManifest__change_passphrase">Zamenjaj geslo</string>
|
||||
<string name="AndroidManifest__verify_session">Preveri sejo</string>
|
||||
<string name="AndroidManifest__verify_identity">Preveri identiteto</string>
|
||||
<string name="AndroidManifest__verify_session">Overovi sejo</string>
|
||||
<string name="AndroidManifest__verify_identity">Overovi identiteto</string>
|
||||
<string name="AndroidManifest__save_identity">Shrani identiteto</string>
|
||||
<string name="AndroidManifest__manage_identity_keys">Upravljanje identifikacijskih ključev</string>
|
||||
<string name="AndroidManifest__complete_key_exchange">Dokončaj izmenjavo ključev</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">Preveri uvoženo identiteto</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">Overovi uvoženo identiteto</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">Splošno</string>
|
||||
<string name="preferences__use_settings">Nastavitve uporabe</string>
|
||||
@@ -318,8 +326,8 @@
|
||||
<string name="preferences__encryption_settings">Nastavitve šifriranja</string>
|
||||
<string name="preferences__change_passphrase">Zamenjaj geslo</string>
|
||||
<string name="preferences__change_my_passphrase">Zamenjaj geslo</string>
|
||||
<string name="preferences__complete_key_exchanges">Zaključi izmenjavo ključev</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">Avtomatično dokončaj izmenjavo ključev za vse nove seje ali seje z istim identifikacijskim ključem </string>
|
||||
<string name="preferences__complete_key_exchanges">Zaključi izmenjave ključev</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">Samodejno dokončaj izmenjavo ključev za vse nove seje ali seje z istim identifikacijskim ključem </string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">Dodaj prazno oznako na koncu vsakega nešifriranega sporočila</string>
|
||||
<string name="preferences__include_whitespace_tag">Dodaj prazno oznako</string>
|
||||
<string name="preferences__sign_key_exchange_messages_with_identity_key">Podpiši sporočilo za izmenjavo ključev z identifikacijskim ključem</string>
|
||||
@@ -404,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Iskanje</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Varnost</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Overovi sejo</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Overovi prejemnika</string>
|
||||
@@ -430,9 +437,8 @@
|
||||
<string name="text_secure_normal__menu_import">Uvoz</string>
|
||||
<string name="text_secure_normal__menu_export">Izvoz</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Počisti geslo</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Označi vse kot prebrane</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Označi vsa kot prebrana</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Overjeno</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<string name="delete">Radera</string>
|
||||
<!--ApplicationExportManager-->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Importera Databas och Inställningar?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importera TextSecure databas, nycklar, och inställningar från SD kort?\n\nVARNING: Detta kommer förstöra existerande meddelanden, nycklar, och inställningar.</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Importera TextSecure databas, nycklar och inställningar från SD-kortet?\n\nVARNING: Detta kommer förstöra alla existerande meddelanden, nycklar och inställningar!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importerar Databas och Nycklar</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importerar din SMS databas, nycklar, och inställningar...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Exportera Databas?</string>
|
||||
@@ -33,6 +33,7 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Radera alla gamla meddelanden nu?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Är du säker på att du omeddelbart vill trimma alla konversationstrådar till de %s senaste meddelandena?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Radera</string>
|
||||
<string name="ApplicationPreferencesActivity_my">Mitt</string>
|
||||
<!--AttachmentTypeSelectorAdapter-->
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Bild</string>
|
||||
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
|
||||
@@ -45,7 +46,7 @@
|
||||
<string name="ConversationItem_saving_attachment">Sparar Bilaga</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Sparar bilaga till SD kort...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Spara till SD kort?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Denna media har lagrats i en krypterad databas. Versionen du sparar till SD kortet kommer inte längre vara krypterad. Vill du fortsätta?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">Denna fil har lagrats i en krypterad databas. Versionen du sparar på SD-kortet kommer inte längre vara krypterad. Vill du fortsätta?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Error: Gick ej att skriva till SD kort!</string>
|
||||
<string name="ConversationItem_success_exclamation">Framgång!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Kan ej skriva till SD Kort!</string>
|
||||
@@ -74,6 +75,7 @@
|
||||
<string name="ConversationActivity_group_conversation">Gruppkonversation</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d mottagare i grupp</string>
|
||||
<string name="ConversationActivity_saving_draft">Sparar utkast...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Ogiltig mottagare!</string>
|
||||
<!--ConversationFragment-->
|
||||
<string name="ConversationFragment_message_details">Meddelande detaljer</string>
|
||||
<string name="ConversationFragment_sender_s_transport_s_sent_received_s">Avsändare: %1$s\nTransport: %2$s\nSkickat/Mottaget: %3$s</string>
|
||||
@@ -97,6 +99,7 @@
|
||||
<string name="MmsDownloader_error_storing_mms">Fel vid lagring av MMS!</string>
|
||||
<string name="MmsDownloader_error_connecting_to_mms_provider">Fel vid anslutning till MMS leverantör...</string>
|
||||
<!--NotificationMmsMessageRecord-->
|
||||
<string name="NotificationMmsMessageRecord_multimedia_message">Multimediameddelande</string>
|
||||
<!--PassphraseChangeActivity-->
|
||||
<string name="PassphraseChangeActivity_passphrases_dont_match_exclamation">Lösenorden Matchar Inte!</string>
|
||||
<string name="PassphraseChangeActivity_incorrect_old_passphrase_exclamation">Inkorrekt gammalt lösenord!</string>
|
||||
@@ -110,8 +113,8 @@
|
||||
<string name="PromptApnActivity_mms_settings_updated">MMS-inställningar uppdaterade</string>
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">Du kan modifiera dessa värden från TextSecure inställningsmenyn när du vill.</string>
|
||||
<!--ReceiveKeyActivity-->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">FEL: Du har tagit emot en korrupt publik nyckel. Denna nyckel kan inte bearbetas, var vänlig åter-initiera en säker session.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">FEL:\n\nDu har tagit emot en publik nyckel från en verison av protokollet utan stöd. Denna nyckel kan inte bearbetas, var vänlig åter-initiera en säker session.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">FEL:\n\nDu har mottagit en publik nyckel som är skadad. Denna nyckel kan inte behandlas, var vänlig initiera en säker session igen.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">Fel:\n\nDu har mottagit en publik nyckel från en version av protokollet som inte stöds. Denna nyckel kan inte behandlas, var vänlig initiera en säker session igen.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">Detta nyckelutbytesmeddelande inkluderar inte en identitetssignatur.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">Detta nyckelutbytesmeddelande inkluderar en meddelandesignatur, men du litar inte på den ännu.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">Detta nyckelutbytesmeddelande innehåller en identitetssignatur vilken du litar på för: %s</string>
|
||||
@@ -121,6 +124,9 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">Du har tagit emot ett nyckelutbytesmeddelande från %s. Du har tidigare initierat en session med denna kontakt, och genom att acceptera denna nyckel fullföljer du nyckelutbytet. Vill du fullfölja nyckelutbytet?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">Du har initierat ett nyckelutbytesmeddelande med %s men du har inte ännu fått något svar.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">Du har fått ett nyckelutbytesmeddelande från %s. Du har ingen existerade session med denna kontakt, vill du fullfölja nyckelutbytet?</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">Signaturen för detta nyckelutbytet skiljer sig från det som du tidigare har mottagit från denna kontakt.\nDetta kan innebära antingen att någon försöker avlyssna din kommunikation, eller att denna kontakt helt enkelt installerade om TextSecure och nu har en ny identitetsnyckel.</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">Det kan vara en bra idé att\nverifiera denna kontakt.</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">Signaturen för detta nyckelutbytet är betrodd, men du har inställningen \'fullborda nyckelutbyten automatiskt\' avstängd.</string>
|
||||
<!--ReviewIdentitiesActivity-->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Kan ej visa korrupt identitetsnyckel!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Radera identitet?</string>
|
||||
@@ -175,6 +181,7 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">INTE verifierad!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">Den skannade nyckeln matchar!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Verifierad!</string>
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Identitetens fingeravtryck</string>
|
||||
<!--KeyExchangeInitiator-->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Initiera trots existerade begäran?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Du har redan skickat en sessionsinitieringsbegäran till denna mottagare, är du säker på att du vill skicka en till? Detta kommer göra din första begäran ogiltig.</string>
|
||||
@@ -195,6 +202,7 @@
|
||||
<string name="MmsMessageRecord_bad_encrypted_mms_message">Dåligt krypterat MMS meddelande...</string>
|
||||
<string name="MmsMessageRecord_mms_message_encrypted_for_non_existing_session">MMS meddelande krypterat för icke-existerande session...</string>
|
||||
<!--MmsSender-->
|
||||
<string name="MmsSender_currently_unable_to_send_your_mms_message">Kan för tillfället inte skicka ditt MMS meddelande.</string>
|
||||
<!--ApplicationMigrationService-->
|
||||
<string name="ApplicationMigrationService_import_in_progress">Import pågår</string>
|
||||
<string name="ApplicationMigrationService_importing_text_messages">Importerar textmeddelanden</string>
|
||||
@@ -211,6 +219,8 @@
|
||||
<string name="MessageNotifier_message_delivery_failed">Meddelandeleverans misslyckades.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Kunde inte leverera meddelande.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Fel vid leverans av meddelande.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Markera alla som lästa</string>
|
||||
<string name="MessageNotifier_mark_as_read">Markera som läst</string>
|
||||
<!--SmsReceiver-->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Kan för tillfället inte skicka ditt SMS meddelande. Det kommer skickas när service blir tillgängligt.</string>
|
||||
<!--auto_initiate_activity-->
|
||||
@@ -253,6 +263,7 @@
|
||||
<string name="database_migration_activity__this_could_take_a_moment_please_be_patient">Detta kan ta en stund. Var tålmodig, vi notifierar dig när importen är klar.</string>
|
||||
<string name="database_migration_activity__importing">IMPORTERAR</string>
|
||||
<!--database_upgrade_activity-->
|
||||
<string name="database_upgrade_activity__updating_database">Uppdaterar databas ...</string>
|
||||
<!--prompt_passphrase_activity-->
|
||||
<string name="prompt_passphrase_activity__textsecure_passphrase">TEXTSECURE LÖSENORD</string>
|
||||
<string name="prompt_passphrase_activity__unlock">Lås upp</string>
|
||||
@@ -265,7 +276,7 @@
|
||||
<!--receive_key_activity-->
|
||||
<string name="receive_key_activity__session">Session</string>
|
||||
<string name="receive_key_activity__identities">Identiteter</string>
|
||||
<string name="receive_key_activity__complete_exchange">Fullborda utbyte</string>
|
||||
<string name="receive_key_activity__complete">Klart</string>
|
||||
<!--recipients_panel-->
|
||||
<string name="recipients_panel__to">Till</string>
|
||||
<!--review_identities-->
|
||||
@@ -300,6 +311,7 @@
|
||||
<string name="AndroidManifest__complete_key_exchange">Fullborda nyckelutbyte</string>
|
||||
<string name="AndroidManifest__verify_imported_identity">Verifiera importerad identitet</string>
|
||||
<!--preferences.xml-->
|
||||
<string name="preferences__general">Allmänna</string>
|
||||
<string name="preferences__use_settings">Användningsinställningar</string>
|
||||
<string name="preferences__pref_all_sms_title">Använd för alla SMS</string>
|
||||
<string name="preferences__pref_all_mms_title">Använd för alla MMS</string>
|
||||
@@ -312,7 +324,9 @@
|
||||
<string name="preferences__choose_identity">Välj identitet</string>
|
||||
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">Välj din kontakt från kontakt listan.</string>
|
||||
<string name="preferences__encryption_settings">Krypteringsinställningar</string>
|
||||
<string name="preferences__change_passphrase">Ändra lösenfras</string>
|
||||
<string name="preferences__change_my_passphrase">Ändra mitt lösenord</string>
|
||||
<string name="preferences__complete_key_exchanges">Fullborda nyckelutbyten</string>
|
||||
<string name="preferences__automatically_complete_key_exchanges_for_new_sessions_or_for_existing_sessions_with_the_same_identity_key">Fullfölj nyckelutbyten automatiskt för nya sessioner eller för existerande sessioner med samma identitetsnyckel</string>
|
||||
<string name="preferences__include_a_whitespace_tag_at_the_end_of_every_non_encrypted_message">Inkludera en blanksteg tagg i slutet av varje okrypterat meddelande.</string>
|
||||
<string name="preferences__include_whitespace_tag">Inkludera blanktecken tagg</string>
|
||||
@@ -323,9 +337,12 @@
|
||||
<string name="preferences__pref_timeout_interval_dialogtitle">Välj lösenordstimeout</string>
|
||||
<string name="preferences__pref_timeout_interval_title">Timeout intervall</string>
|
||||
<string name="preferences__the_amount_of_time_to_wait_before_forgetting_passphrase">Väntetiden innan lösenordet glöms från minnet</string>
|
||||
<string name="preferences__identity_key_settings">Identitetsnycklar</string>
|
||||
<string name="preferences__view_my_identity_key">Visa min identitetsnyckel</string>
|
||||
<string name="preferences__export_my_identity_key">Exportera min identitetsnyckel</string>
|
||||
<string name="preferences__import_contacts_key">Importera nyckeln för en kontakt</string>
|
||||
<string name="preferences__import_an_identity_key_from_a_contact">Importera en identitetsnyckel från en kontakt</string>
|
||||
<string name="preferences__manage_identity_keys">Hantera identitetsnycklar</string>
|
||||
<string name="preferences__manage_configured_identity_keys">Hantera konfigurerade identitetsnycklar</string>
|
||||
<string name="preferences__notification_settings">Notifikationsinställningar</string>
|
||||
<string name="preferences__notifications">Notifikationer</string>
|
||||
@@ -351,6 +368,9 @@
|
||||
<string name="preferences__normal">Normal</string>
|
||||
<string name="preferences__slow">Långsam</string>
|
||||
<string name="preferences__custom">Skräddarsydd</string>
|
||||
<string name="preferences__advanced">Avancerade</string>
|
||||
<string name="preferences__passphrase">Lösenfras</string>
|
||||
<string name="preferences__advanced_mms_access_point_names">Reserv MMSC</string>
|
||||
<string name="preferences__enable_fallback_mmsc">Aktivera Fallback MMSC</string>
|
||||
<string name="preferences__use_mmsc_information_configured_here_when_system_apn_information_is_unavailable">Använd MMSC information konfugerad här när system APN information är otillgänglig.</string>
|
||||
<string name="preferences__mmsc_url_required">MMSC URL (nödvändigt)</string>
|
||||
@@ -392,7 +412,6 @@
|
||||
<!--conversation_list-->
|
||||
<string name="conversation_list__menu_search">Sök</string>
|
||||
<!--conversation_secure_verified-->
|
||||
<!--conversation_secure_unverified-->
|
||||
<string name="conversation_secure_verified__menu_security">Säkerhet</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verifiera Session</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verifiera mottagare</string>
|
||||
@@ -402,6 +421,9 @@
|
||||
<string name="conversation__menu_delete_thread">Radera tråd</string>
|
||||
<!--conversation_group_options-->
|
||||
<string name="convesation_group_options__recipients_list">Mottagare lista</string>
|
||||
<string name="conversation_group_options__delivery">Leverans</string>
|
||||
<string name="conversation_group_options__conversation">Konversation</string>
|
||||
<string name="conversation_group_options__broadcast">Sändning</string>
|
||||
<!--key_scanning-->
|
||||
<string name="key_scanning__menu_compare">Jämför</string>
|
||||
<string name="key_scanning__menu_get_scanned_to_compare">Bli skannad för att jämföra</string>
|
||||
@@ -415,8 +437,8 @@
|
||||
<string name="text_secure_normal__menu_import">Importera</string>
|
||||
<string name="text_secure_normal__menu_export">Exportera</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Rensa lösenord</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Markera alla som lästa</string>
|
||||
<!--verify_keys-->
|
||||
<string name="verify_keys__menu_verified">Verifierad</string>
|
||||
<!--Misc. piggybacking-->
|
||||
<!--EOF-->
|
||||
</resources>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
<!-- ApplicationExportManager -->
|
||||
<string name="ApplicationExportManager_import_database_and_settings_title">Import Database and Settings?</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Import TextSecure database, keys, and settings from the SD Card?\n\nWARNING: This will clobber any existing messages, keys, and settings!</string>
|
||||
<string name="ApplicationExportManager_import_database_and_settings_message">Import TextSecure database, keys, and settings from the SD Card?\n\nWARNING: This will clobber any existing messages, keys, and settings!</string>
|
||||
<string name="ApplicationExportManager_importing_database_and_keys">Importing Database and Keys</string>
|
||||
<string name="ApplicationExportManager_importing_your_sms_database_keys_and_settings">Importing your SMS database, keys, and settings...</string>
|
||||
<string name="ApplicationExportManager_export_database_question">Export Database?</string>
|
||||
@@ -35,7 +35,8 @@
|
||||
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Delete all old messages now?</string>
|
||||
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Are you sure you would like to immediately trim all conversation threads to the %s most recent messages?</string>
|
||||
<string name="ApplicationPreferencesActivity_delete">Delete</string>
|
||||
|
||||
<string name="ApplicationPreferencesActivity_my">My</string>
|
||||
|
||||
<!-- AttachmentTypeSelectorAdapter -->
|
||||
|
||||
<string name="AttachmentTypeSelectorAdapter_picture">Picture</string>
|
||||
@@ -50,7 +51,7 @@
|
||||
<string name="ConversationItem_saving_attachment">Saving Attachment</string>
|
||||
<string name="ConversationItem_saving_attachment_to_sd_card">Saving attachment to SD card...</string>
|
||||
<string name="ConversationItem_save_to_sd_card">Save to SD Card?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">This media has been stored in an encrypted database. The version you save to the SD card will no longer be encrypted, would you like to continue?</string>
|
||||
<string name="ConversationItem_this_media_has_been_stored_in_an_encrypted_database_warning">This media has been stored in an encrypted database. The version you save to the SD card will no longer be encrypted. Would you like to continue?</string>
|
||||
<string name="ConversationItem_error_while_saving_attachment_to_sd_card">Error while saving attachment to SD card!</string>
|
||||
<string name="ConversationItem_success_exclamation">Success!</string>
|
||||
<string name="ConversationItem_unable_to_write_to_sd_card_exclamation">Unable to write to SD Card!</string>
|
||||
@@ -80,6 +81,9 @@
|
||||
<string name="ConversationActivity_group_conversation">Group Conversation</string>
|
||||
<string name="ConversationActivity_d_recipients_in_group">%d recipients in group</string>
|
||||
<string name="ConversationActivity_saving_draft">Saving draft...</string>
|
||||
<string name="ConversationActivity_invalid_recipient">Invalid recipient!</string>
|
||||
<string name="ConversationActivity_calls_not_supported">Calls Not Supported</string>
|
||||
<string name="ConversationActivity_this_device_does_not_appear_to_support_dial_actions">This device does not appear to support dial actions.</string>
|
||||
|
||||
<!-- ConversationFragment -->
|
||||
<string name="ConversationFragment_message_details">Message details</string>
|
||||
@@ -129,8 +133,8 @@
|
||||
<string name="PromptApnActivity_you_can_modify_these_values_from_the_textsecure_settings_menu_at_any_time_">You can modify these values from the TextSecure settings menu at any time.</string>
|
||||
|
||||
<!-- ReceiveKeyActivity -->
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERROR:\n\nYou have received a corrupted public key. This key can not be processed, please re-initiate a secure session.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERROR:\n\nYou have received a public key from an unsupported version of the protocol. This key can not be processed, please re-initiate a secure session.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key">ERROR:\n\nYou have received a corrupted public key. This key cannot be processed, please re-initiate a secure session.</string>
|
||||
<string name="ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol">ERROR:\n\nYou have received a public key from an unsupported version of the protocol. This key cannot be processed, please re-initiate a secure session.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature">This key exchange message does not include an identity signature.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it">This key exchange message includes an identity signature, but you do not yet trust it.</string>
|
||||
<string name="ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s">This key exchange message includes an identity signature which you trust for: %s</string>
|
||||
@@ -140,7 +144,20 @@
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated">You have received a Key Exchange message from %s. You have previously initiated a session with this contact, and by accepting this key you will complete the key exchange. Would you like to complete this key exchange?</string>
|
||||
<string name="ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply">You have initiated a Key Exchange message with %s but have not yet received a reply.</string>
|
||||
<string name="ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session">You have received a Key Exchange message from %s. You have no existing session with this contact, would you like to complete this key exchange?</string>
|
||||
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different">The
|
||||
signature on this key exchange is different than what you\'ve previously received from this
|
||||
contact. This could either mean that someone is trying to intercept your communication, or
|
||||
that this contact simply re-installed TextSecure and now has a new identity key.
|
||||
</string>
|
||||
<string name="ReceiveKeyActivity_you_may_wish_to_verify_this_contact">You may wish to verify
|
||||
this contact.
|
||||
</string>
|
||||
<string name="ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but">The
|
||||
signature on this key exchange is trusted, but you have the \'automatically complete key
|
||||
exchanges\' setting disabled.
|
||||
</string>
|
||||
|
||||
|
||||
<!-- ReviewIdentitiesActivity -->
|
||||
<string name="ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation">Unable to view corrupted identity key!</string>
|
||||
<string name="ReviewIdentitiesActivity_delete_identity">Delete identity?</string>
|
||||
@@ -200,7 +217,8 @@
|
||||
<string name="ViewIdentityActivity_not_verified_exclamation">NOT Verified!</string>
|
||||
<string name="ViewIdentityActivity_the_scanned_key_matches_exclamation">The scanned key matches!</string>
|
||||
<string name="ViewIdentityActivity_verified_exclamation">Verified!</string>
|
||||
|
||||
<string name="ViewIdentityActivity_identity_fingerprint">Identity Fingerprint</string>
|
||||
|
||||
<!-- KeyExchangeInitiator -->
|
||||
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Initiate Despite Existing Request?</string>
|
||||
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">You\'ve already sent a session initiation request to this recipient, are you sure you\'d like to send another? This will invalidate the first request.</string>
|
||||
@@ -244,8 +262,10 @@
|
||||
<string name="MessageNotifier_no_subject">(No Subject)</string>
|
||||
<string name="MessageNotifier_message_delivery_failed">Message delivery failed.</string>
|
||||
<string name="MessageNotifier_failed_to_deliver_message">Failed to deliver message.</string>
|
||||
<string name="MessageNotifier_error_delivering_message">Error delivering message.</string>
|
||||
|
||||
<string name="MessageNotifier_error_delivering_message">Error delivering message.</string>
|
||||
<string name="MessageNotifier_mark_all_as_read">Mark all as read</string>
|
||||
<string name="MessageNotifier_mark_as_read">Mark as read</string>
|
||||
|
||||
<!-- SmsReceiver -->
|
||||
<string name="SmsReceiver_currently_unable_to_send_your_sms_message">Currently unable to send your SMS message. It will be sent once service becomes available.</string>
|
||||
|
||||
@@ -316,8 +336,8 @@
|
||||
<!-- receive_key_activity -->
|
||||
<string name="receive_key_activity__session">Session</string>
|
||||
<string name="receive_key_activity__identities">Identities</string>
|
||||
<string name="receive_key_activity__complete_exchange">Complete Exchange</string>
|
||||
|
||||
<string name="receive_key_activity__complete">Complete</string>
|
||||
|
||||
<!-- recipients_panel -->
|
||||
<string name="recipients_panel__to">To</string>
|
||||
|
||||
@@ -473,7 +493,6 @@
|
||||
<string name="conversation_list__menu_search">Search</string>
|
||||
|
||||
<!-- conversation_secure_verified -->
|
||||
<!-- conversation_secure_unverified -->
|
||||
<string name="conversation_secure_verified__menu_security">Security</string>
|
||||
<string name="conversation_secure_verified__menu_verify_session">Verify Session</string>
|
||||
<string name="conversation_secure_verified__menu_verify_recipient">Verify Recipient</string>
|
||||
@@ -508,9 +527,6 @@
|
||||
|
||||
<!-- verify_keys -->
|
||||
<string name="verify_keys__menu_verified">Verified</string>
|
||||
|
||||
<!-- Misc. piggybacking -->
|
||||
|
||||
<!-- EOF -->
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -123,14 +123,6 @@
|
||||
android:title="@string/preferences__view_my_identity_key"
|
||||
android:summary="@string/preferences__view_my_identity_key"/>
|
||||
|
||||
<Preference android:key="pref_export_identity"
|
||||
android:title="@string/preferences__export_my_identity_key"
|
||||
android:summary="@string/preferences__export_my_identity_key"/>
|
||||
|
||||
<Preference android:key="pref_import_identity"
|
||||
android:title="@string/preferences__import_contacts_key"
|
||||
android:summary="@string/preferences__import_an_identity_key_from_a_contact"/>
|
||||
|
||||
<Preference android:key="pref_manage_identity"
|
||||
android:title="@string/preferences__manage_identity_keys"
|
||||
android:summary="@string/preferences__manage_configured_identity_keys"/>
|
||||
|
||||
@@ -55,7 +55,6 @@ import java.util.List;
|
||||
public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPreferenceActivity {
|
||||
|
||||
private static final int PICK_IDENTITY_CONTACT = 1;
|
||||
private static final int IMPORT_IDENTITY_ID = 2;
|
||||
|
||||
public static final String RINGTONE_PREF = "pref_key_ringtone";
|
||||
public static final String VIBRATE_PREF = "pref_key_vibrate";
|
||||
@@ -107,10 +106,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
|
||||
this.findPreference(VIEW_MY_IDENTITY_PREF)
|
||||
.setOnPreferenceClickListener(new ViewMyIdentityClickListener());
|
||||
this.findPreference(EXPORT_MY_IDENTITY_PREF)
|
||||
.setOnPreferenceClickListener(new ExportMyIdentityClickListener());
|
||||
this.findPreference(IMPORT_CONTACT_IDENTITY_PREF)
|
||||
.setOnPreferenceClickListener(new ImportContactIdentityClickListener());
|
||||
this.findPreference(MANAGE_IDENTITIES_PREF)
|
||||
.setOnPreferenceClickListener(new ManageIdentitiesClickListener());
|
||||
this.findPreference(CHANGE_PASSPHRASE_PREF)
|
||||
@@ -123,7 +118,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
MemoryCleaner.clean((MasterSecret)getIntent().getParcelableExtra("master_secret"));
|
||||
MemoryCleaner.clean((MasterSecret) getIntent().getParcelableExtra("master_secret"));
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@@ -133,8 +128,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
switch (reqCode) {
|
||||
case (PICK_IDENTITY_CONTACT) : handleIdentitySelection(data); break;
|
||||
case IMPORT_IDENTITY_ID: importIdentityKey(data.getData()); break;
|
||||
case PICK_IDENTITY_CONTACT: handleIdentitySelection(data); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -163,7 +157,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference pref, Object newValue) {
|
||||
preference.setSummary(newValue == null ? "Not set" : ((String)newValue));
|
||||
preference.setSummary(newValue == null ? "Not set" : ((String) newValue));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
@@ -209,25 +203,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
}
|
||||
}
|
||||
|
||||
private void importIdentityKey(Uri uri) {
|
||||
IdentityKey identityKey = ContactAccessor.getInstance().importIdentityKey(this, uri);
|
||||
String contactName = ContactAccessor.getInstance().getNameFromContact(this, uri);
|
||||
|
||||
if (identityKey == null) {
|
||||
Dialogs.displayAlert(this,
|
||||
getString(R.string.ApplicationPreferenceActivity_not_found_exclamation),
|
||||
getString(R.string.ApplicationPreferenceActivity_no_valid_identity_key_was_found_in_the_specified_contact),
|
||||
android.R.drawable.ic_dialog_alert);
|
||||
return;
|
||||
}
|
||||
|
||||
Intent verifyImportedKeyIntent = new Intent(this, VerifyImportedIdentityActivity.class);
|
||||
verifyImportedKeyIntent.putExtra("master_secret", getIntent().getParcelableExtra("master_secret"));
|
||||
verifyImportedKeyIntent.putExtra("identity_key", identityKey);
|
||||
verifyImportedKeyIntent.putExtra("contact_name", contactName);
|
||||
startActivity(verifyImportedKeyIntent);
|
||||
}
|
||||
|
||||
private class IdentityPreferenceClickListener implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
@@ -243,63 +218,14 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent viewIdentityIntent = new Intent(ApplicationPreferencesActivity.this, ViewIdentityActivity.class);
|
||||
viewIdentityIntent.putExtra("identity_key", IdentityKeyUtil.getIdentityKey(ApplicationPreferencesActivity.this));
|
||||
viewIdentityIntent.putExtra("title", getString(R.string.ApplicationPreferencesActivity_my) + " " +
|
||||
getString(R.string.ViewIdentityActivity_identity_fingerprint));
|
||||
startActivity(viewIdentityIntent);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private class ExportMyIdentityClickListener implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
if (!IdentityKeyUtil.hasIdentityKey(ApplicationPreferencesActivity.this)) {
|
||||
Toast.makeText(ApplicationPreferencesActivity.this,
|
||||
R.string.ApplicationPreferenceActivity_you_don_t_have_an_identity_key_exclamation,
|
||||
Toast.LENGTH_LONG).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
List<Long> rawContactIds = ContactIdentityManager
|
||||
.getInstance(ApplicationPreferencesActivity.this)
|
||||
.getSelfIdentityRawContactIds();
|
||||
|
||||
if (rawContactIds== null) {
|
||||
Toast.makeText(ApplicationPreferencesActivity.this,
|
||||
R.string.ApplicationPreferenceActivity_you_have_not_yet_defined_a_contact_for_yourself,
|
||||
Toast.LENGTH_LONG).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
ContactAccessor.getInstance().insertIdentityKey(ApplicationPreferencesActivity.this, rawContactIds,
|
||||
IdentityKeyUtil.getIdentityKey(ApplicationPreferencesActivity.this));
|
||||
|
||||
Toast.makeText(ApplicationPreferencesActivity.this,
|
||||
R.string.ApplicationPreferenceActivity_exported_to_contacts_database,
|
||||
Toast.LENGTH_LONG).show();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private class ImportContactIdentityClickListener implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
MasterSecret masterSecret = (MasterSecret)getIntent().getParcelableExtra("master_secret");
|
||||
|
||||
if (masterSecret != null) {
|
||||
Intent importIntent = new Intent(Intent.ACTION_PICK);
|
||||
importIntent.setType(ContactsContract.Contacts.CONTENT_TYPE);
|
||||
startActivityForResult(importIntent, IMPORT_IDENTITY_ID);
|
||||
} else {
|
||||
Toast.makeText(ApplicationPreferencesActivity.this,
|
||||
R.string.ApplicationPreferenceActivity_you_need_to_have_entered_your_passphrase_before_importing_keys,
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private class ManageIdentitiesClickListener implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
@@ -84,7 +84,7 @@ public class ContactSelectionActivity extends PassphraseRequiredSherlockFragment
|
||||
private void handleSelectionFinished() {
|
||||
recipients = contactsFragment.getSelectedContacts();
|
||||
recipients.append(recentFragment.getSelectedContacts());
|
||||
recipients.append(groupsFragment.getSelectedContacts());
|
||||
recipients.append(groupsFragment.getSelectedContacts(this));
|
||||
|
||||
Intent resultIntent = getIntent();
|
||||
resultIntent.putExtra("recipients", this.recipients);
|
||||
|
||||
@@ -84,12 +84,12 @@ public class ContactSelectionGroupsFragment extends SherlockListFragment
|
||||
this.getListView().setFocusable(true);
|
||||
}
|
||||
|
||||
public Recipients getSelectedContacts() {
|
||||
public Recipients getSelectedContacts(Context context) {
|
||||
List<Recipient> recipientList = new LinkedList<Recipient>();
|
||||
|
||||
for (GroupData groupData : selectedGroups.values()) {
|
||||
List<ContactData> contactDataList = ContactAccessor.getInstance()
|
||||
.getGroupMembership(getActivity(), groupData.id);
|
||||
.getGroupMembership(context, groupData.id);
|
||||
|
||||
Log.w("GroupSelectionListActivity", "Got contacts in group: " + contactDataList.size());
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@@ -48,7 +49,6 @@ import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuInflater;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import org.thoughtcrime.securesms.components.RecipientsPanel;
|
||||
import org.thoughtcrime.securesms.crypto.AuthenticityCalculator;
|
||||
import org.thoughtcrime.securesms.crypto.KeyExchangeInitiator;
|
||||
import org.thoughtcrime.securesms.crypto.KeyExchangeProcessor;
|
||||
import org.thoughtcrime.securesms.crypto.KeyUtil;
|
||||
@@ -73,6 +73,7 @@ import org.thoughtcrime.securesms.service.KeyCachingService;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.thoughtcrime.securesms.sms.OutgoingEncryptedMessage;
|
||||
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
||||
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
||||
import org.thoughtcrime.securesms.util.CharacterCalculator;
|
||||
import org.thoughtcrime.securesms.util.EncryptedCharacterCalculator;
|
||||
import org.thoughtcrime.securesms.util.InvalidMessageException;
|
||||
@@ -124,6 +125,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
private long threadId;
|
||||
private int distributionType;
|
||||
private boolean isEncryptedConversation;
|
||||
private boolean isAuthenticatedConversation;
|
||||
private boolean isMmsEnabled = true;
|
||||
|
||||
private CharacterCalculator characterCalculator = new CharacterCalculator();
|
||||
@@ -210,10 +212,10 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
|
||||
if (isSingleConversation() && isEncryptedConversation)
|
||||
{
|
||||
if (isAuthenticatedSession()) {
|
||||
inflater.inflate(R.menu.conversation_secure_verified, menu);
|
||||
if (isAuthenticatedConversation) {
|
||||
inflater.inflate(R.menu.conversation_secure_identity, menu);
|
||||
} else {
|
||||
inflater.inflate(R.menu.conversation_secure_unverified, menu);
|
||||
inflater.inflate(R.menu.conversation_secure_no_identity, menu);
|
||||
}
|
||||
} else if (isSingleConversation()) {
|
||||
inflater.inflate(R.menu.conversation_insecure, menu);
|
||||
@@ -299,6 +301,12 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
}
|
||||
|
||||
private void handleStartSecureSession() {
|
||||
if (getRecipients() == null) {
|
||||
Toast.makeText(this, getString(R.string.ConversationActivity_invalid_recipient),
|
||||
Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
|
||||
final Recipient recipient = getRecipients().getPrimaryRecipient();
|
||||
String recipientName = (recipient.getName() == null ? recipient.getNumber() : recipient.getName());
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
@@ -372,11 +380,18 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
}
|
||||
|
||||
private void handleDial(Recipient recipient) {
|
||||
if (recipient == null) return;
|
||||
try {
|
||||
if (recipient == null) return;
|
||||
|
||||
Intent dialIntent = new Intent(Intent.ACTION_DIAL,
|
||||
Uri.parse("tel:" + recipient.getNumber()));
|
||||
startActivity(dialIntent);
|
||||
Intent dialIntent = new Intent(Intent.ACTION_DIAL,
|
||||
Uri.parse("tel:" + recipient.getNumber()));
|
||||
startActivity(dialIntent);
|
||||
} catch (ActivityNotFoundException anfe) {
|
||||
Log.w("ConversationActivity", anfe);
|
||||
Util.showAlertDialog(this,
|
||||
getString(R.string.ConversationActivity_calls_not_supported),
|
||||
getString(R.string.ConversationActivity_this_device_does_not_appear_to_support_dial_actions));
|
||||
}
|
||||
}
|
||||
|
||||
private void handleDisplayGroupRecipients() {
|
||||
@@ -434,16 +449,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
String subtitle = null;
|
||||
|
||||
if (isSingleConversation()) {
|
||||
|
||||
if (isEncryptedConversation) {
|
||||
title = AuthenticityCalculator.getAuthenticatedName(this,
|
||||
getRecipients().getPrimaryRecipient(),
|
||||
masterSecret);
|
||||
}
|
||||
|
||||
if (title == null || title.trim().length() == 0) {
|
||||
title = getRecipients().getPrimaryRecipient().getName();
|
||||
}
|
||||
title = getRecipients().getPrimaryRecipient().getName();
|
||||
|
||||
if (title == null || title.trim().length() == 0) {
|
||||
title = getRecipients().getPrimaryRecipient().getNumber();
|
||||
@@ -511,12 +517,14 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
KeyUtil.isSessionFor(this, getRecipients().getPrimaryRecipient()))
|
||||
{
|
||||
sendButton.setImageResource(R.drawable.ic_send_encrypted_holo_light);
|
||||
this.isEncryptedConversation = true;
|
||||
this.characterCalculator = new EncryptedCharacterCalculator();
|
||||
this.isEncryptedConversation = true;
|
||||
this.isAuthenticatedConversation = KeyUtil.isIdentityKeyFor(this, masterSecret, getRecipients().getPrimaryRecipient());
|
||||
this.characterCalculator = new EncryptedCharacterCalculator();
|
||||
} else {
|
||||
sendButton.setImageResource(R.drawable.ic_send_holo_light);
|
||||
this.isEncryptedConversation = false;
|
||||
this.characterCalculator = new CharacterCalculator();
|
||||
this.isEncryptedConversation = false;
|
||||
this.isAuthenticatedConversation = false;
|
||||
this.characterCalculator = new CharacterCalculator();
|
||||
}
|
||||
|
||||
calculateCharactersRemaining();
|
||||
@@ -619,10 +627,15 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
try {
|
||||
attachmentManager.setImage(imageUri);
|
||||
} catch (IOException e) {
|
||||
Log.w("ConversationActivity", e);
|
||||
attachmentManager.clear();
|
||||
Toast.makeText(this, R.string.ConversationActivity_sorry_there_was_an_error_setting_your_attachment,
|
||||
Toast.LENGTH_LONG).show();
|
||||
} catch (BitmapDecodingException e) {
|
||||
Log.w("ConversationActivity", e);
|
||||
attachmentManager.clear();
|
||||
Toast.makeText(this, R.string.ConversationActivity_sorry_there_was_an_error_setting_your_attachment,
|
||||
Toast.LENGTH_LONG).show();
|
||||
Log.w("ComposeMessageActivity", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -722,12 +735,6 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
return getRecipients() != null && !getRecipients().isSingleRecipient();
|
||||
}
|
||||
|
||||
private boolean isAuthenticatedSession() {
|
||||
return AuthenticityCalculator.isAuthenticated(this,
|
||||
getRecipients().getPrimaryRecipient(),
|
||||
masterSecret);
|
||||
}
|
||||
|
||||
private Recipients getRecipients() {
|
||||
try {
|
||||
if (isExistingConversation()) return this.recipients;
|
||||
|
||||
@@ -322,6 +322,7 @@ public class ConversationItem extends LinearLayout {
|
||||
intent.putExtra("recipient", messageRecord.getIndividualRecipient());
|
||||
intent.putExtra("body", messageRecord.getBody().getBody());
|
||||
intent.putExtra("thread_id", messageRecord.getThreadId());
|
||||
intent.putExtra("message_id", messageRecord.getId());
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
intent.putExtra("sent", messageRecord.isOutgoing());
|
||||
context.startActivity(intent);
|
||||
@@ -495,7 +496,7 @@ public class ConversationItem extends LinearLayout {
|
||||
public void onClick(View v) {
|
||||
if (failedIconHandler != null && !messageRecord.isKeyExchange()) {
|
||||
Message message = Message.obtain();
|
||||
message.obj = messageRecord.getBody();
|
||||
message.obj = messageRecord.getBody().getBody();
|
||||
failedIconHandler.dispatchMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.LoaderManager;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -54,7 +55,10 @@ public class ConversationListFragment extends SherlockListFragment
|
||||
|
||||
private ConversationSelectedListener listener;
|
||||
private MasterSecret masterSecret;
|
||||
private ActionMode actionMode;
|
||||
|
||||
private String queryFilter = "";
|
||||
private boolean batchMode = false;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
|
||||
@@ -96,8 +100,15 @@ public class ConversationListFragment extends SherlockListFragment
|
||||
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||
if (v instanceof ConversationListItem) {
|
||||
ConversationListItem headerView = (ConversationListItem) v;
|
||||
handleCreateConversation(headerView.getThreadId(), headerView.getRecipients(),
|
||||
headerView.getDistributionType());
|
||||
Log.w("ConversationListFragment", "Batch mode: " + batchMode);
|
||||
if (!batchMode) {
|
||||
handleCreateConversation(headerView.getThreadId(), headerView.getRecipients(),
|
||||
headerView.getDistributionType());
|
||||
} else {
|
||||
ConversationListAdapter adapter = (ConversationListAdapter)getListAdapter();
|
||||
adapter.addToBatchSet(headerView.getThreadId());
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,10 +142,11 @@ public class ConversationListFragment extends SherlockListFragment
|
||||
@Override
|
||||
public boolean onItemLongClick(AdapterView<?> arg0, View v, int position, long id) {
|
||||
ConversationListAdapter adapter = (ConversationListAdapter)getListAdapter();
|
||||
getSherlockActivity().startActionMode(ConversationListFragment.this);
|
||||
actionMode = getSherlockActivity().startActionMode(ConversationListFragment.this);
|
||||
batchMode = true;
|
||||
|
||||
adapter.initializeBatchMode(true);
|
||||
adapter.addToBatchSet(((ConversationListItem)v).getThreadId());
|
||||
adapter.addToBatchSet(((ConversationListItem) v).getThreadId());
|
||||
adapter.notifyDataSetChanged();
|
||||
|
||||
return true;
|
||||
@@ -183,6 +195,11 @@ public class ConversationListFragment extends SherlockListFragment
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
dialog.dismiss();
|
||||
if (actionMode != null) {
|
||||
actionMode.finish();
|
||||
actionMode = null;
|
||||
batchMode = false;
|
||||
}
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
@@ -32,8 +32,6 @@ import android.text.style.ForegroundColorSpan;
|
||||
import android.text.style.StyleSpan;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.QuickContactBadge;
|
||||
import android.widget.RelativeLayout;
|
||||
@@ -63,7 +61,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
private TextView subjectView;
|
||||
private TextView fromView;
|
||||
private TextView dateView;
|
||||
private CheckBox checkbox;
|
||||
private long count;
|
||||
private boolean read;
|
||||
|
||||
@@ -85,16 +82,14 @@ public class ConversationListItem extends RelativeLayout
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
this.subjectView = (TextView)findViewById(R.id.subject);
|
||||
this.fromView = (TextView)findViewById(R.id.from);
|
||||
this.dateView = (TextView)findViewById(R.id.date);
|
||||
this.checkbox = (CheckBox)findViewById(R.id.checkbox);
|
||||
this.subjectView = (TextView) findViewById(R.id.subject);
|
||||
this.fromView = (TextView) findViewById(R.id.from);
|
||||
this.dateView = (TextView) findViewById(R.id.date);
|
||||
|
||||
this.contactPhotoBadge = (QuickContactBadge)findViewById(R.id.contact_photo_badge);
|
||||
this.contactPhotoImage = (ImageView)findViewById(R.id.contact_photo_image);
|
||||
this.contactPhotoBadge = (QuickContactBadge) findViewById(R.id.contact_photo_badge);
|
||||
this.contactPhotoImage = (ImageView) findViewById(R.id.contact_photo_image);
|
||||
|
||||
initializeContactWidgetVisibility();
|
||||
intializeListeners();
|
||||
}
|
||||
|
||||
public void set(ThreadRecord thread, Set<Long> selectedThreads, boolean batchMode) {
|
||||
@@ -112,12 +107,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
if (thread.getDate() > 0)
|
||||
this.dateView.setText(DateUtils.getRelativeTimeSpanString(getContext(), thread.getDate(), false));
|
||||
|
||||
if (selectedThreads != null)
|
||||
this.checkbox.setChecked(selectedThreads.contains(threadId));
|
||||
|
||||
if (batchMode) checkbox.setVisibility(View.VISIBLE);
|
||||
else checkbox.setVisibility(View.GONE);
|
||||
|
||||
setBackground(read, batchMode);
|
||||
setContactPhoto(this.recipients.getPrimaryRecipient());
|
||||
}
|
||||
@@ -126,10 +115,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
this.recipients.removeListener(this);
|
||||
}
|
||||
|
||||
private void intializeListeners() {
|
||||
checkbox.setOnCheckedChangeListener(new CheckedChangedListener());
|
||||
}
|
||||
|
||||
private void initializeContactWidgetVisibility() {
|
||||
if (isBadgeEnabled()) {
|
||||
contactPhotoBadge.setVisibility(View.VISIBLE);
|
||||
@@ -163,7 +148,7 @@ public class ConversationListItem extends RelativeLayout
|
||||
}
|
||||
|
||||
private void setBackground(boolean read, boolean batch) {
|
||||
if (batch && checkbox.isChecked()) {
|
||||
if (batch && selectedThreads.contains(threadId)) {
|
||||
setBackgroundResource(R.drawable.list_selected_holo_light);
|
||||
} else if (read) {
|
||||
setBackgroundResource(R.drawable.conversation_list_item_background_read);
|
||||
@@ -207,16 +192,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
return distributionType;
|
||||
}
|
||||
|
||||
private class CheckedChangedListener implements CompoundButton.OnCheckedChangeListener {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
if (isChecked) selectedThreads.add(threadId);
|
||||
else selectedThreads.remove(threadId);
|
||||
|
||||
setBackground(read, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onModified(Recipient recipient) {
|
||||
handler.post(new Runnable() {
|
||||
|
||||
@@ -21,10 +21,11 @@ public class DatabaseUpgradeActivity extends Activity {
|
||||
|
||||
public static final int NO_MORE_KEY_EXCHANGE_PREFIX_VERSION = 46;
|
||||
public static final int MMS_BODY_VERSION = 46;
|
||||
|
||||
public static final int TOFU_IDENTITIES_VERSION = 50;
|
||||
|
||||
private static final SortedSet<Integer> UPGRADE_VERSIONS = new TreeSet<Integer>() {{
|
||||
add(NO_MORE_KEY_EXCHANGE_PREFIX_VERSION);
|
||||
add(TOFU_IDENTITIES_VERSION);
|
||||
}};
|
||||
|
||||
private MasterSecret masterSecret;
|
||||
|
||||
@@ -17,45 +17,96 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.QuickContactBadge;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||
|
||||
/**
|
||||
* List item view for displaying user identity keys.
|
||||
*
|
||||
* @author Moxie Marlinspike
|
||||
*/
|
||||
public class IdentityKeyView extends RelativeLayout {
|
||||
public class IdentityKeyView extends RelativeLayout
|
||||
implements Recipient.RecipientModifiedListener
|
||||
{
|
||||
|
||||
private TextView identityName;
|
||||
private String identityKeyString;
|
||||
private TextView identityName;
|
||||
private TextView fingerprint;
|
||||
private QuickContactBadge contactBadge;
|
||||
private ImageView contactImage;
|
||||
|
||||
private Recipients recipients;
|
||||
private IdentityKey identityKey;
|
||||
|
||||
private final Handler handler = new Handler();
|
||||
|
||||
public IdentityKeyView(Context context) {
|
||||
super(context);
|
||||
|
||||
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
li.inflate(R.layout.identity_key_view, this, true);
|
||||
|
||||
initializeResources();
|
||||
}
|
||||
|
||||
public IdentityKeyView(Context context, AttributeSet attributeSet) {
|
||||
super(context, attributeSet);
|
||||
}
|
||||
|
||||
public void set(String name, String identityKeyString) {
|
||||
identityName.setText(name);
|
||||
this.identityKeyString = identityKeyString;
|
||||
}
|
||||
|
||||
public String getIdentityKeyString() {
|
||||
return this.identityKeyString;
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
@Override
|
||||
public void onFinishInflate() {
|
||||
this.identityName = (TextView)findViewById(R.id.identity_name);
|
||||
this.fingerprint = (TextView)findViewById(R.id.fingerprint);
|
||||
this.contactBadge = (QuickContactBadge)findViewById(R.id.contact_photo_badge);
|
||||
this.contactImage = (ImageView)findViewById(R.id.contact_photo_image);
|
||||
|
||||
if (isBadgeEnabled()) {
|
||||
this.contactBadge.setVisibility(View.VISIBLE);
|
||||
this.contactImage.setVisibility(View.GONE);
|
||||
} else {
|
||||
this.contactBadge.setVisibility(View.GONE);
|
||||
this.contactImage.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public void set(IdentityDatabase.Identity identity) {
|
||||
this.recipients = identity.getRecipients();
|
||||
this.identityKey = identity.getIdentityKey();
|
||||
|
||||
this.recipients.addListener(this);
|
||||
|
||||
identityName.setText(recipients.toShortString());
|
||||
fingerprint.setText(identity.getIdentityKey().getFingerprint());
|
||||
|
||||
contactBadge.setImageBitmap(recipients.getPrimaryRecipient().getContactPhoto());
|
||||
contactBadge.assignContactFromPhone(recipients.getPrimaryRecipient().getNumber(), true);
|
||||
contactImage.setImageBitmap(recipients.getPrimaryRecipient().getContactPhoto());
|
||||
}
|
||||
|
||||
public IdentityKey getIdentityKey() {
|
||||
return this.identityKey;
|
||||
}
|
||||
|
||||
public Recipient getRecipient() {
|
||||
return this.recipients.getPrimaryRecipient();
|
||||
}
|
||||
|
||||
private boolean isBadgeEnabled() {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onModified(Recipient recipient) {
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
IdentityKeyView.this.identityName.setText(recipients.toShortString());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuInflater;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
|
||||
public abstract class KeyVerifyingActivity extends KeyScanningActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
|
||||
MenuInflater inflater = this.getSupportMenuInflater();
|
||||
inflater.inflate(R.menu.verify_keys, menu);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_session_verified: handleVerified(); return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected abstract void handleVerified();
|
||||
|
||||
}
|
||||
@@ -16,14 +16,19 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidKeyException;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidVersionException;
|
||||
import org.thoughtcrime.securesms.crypto.KeyExchangeMessage;
|
||||
@@ -42,36 +47,32 @@ import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
public class ReceiveKeyActivity extends PassphraseRequiredSherlockActivity {
|
||||
|
||||
private TextView descriptionText;
|
||||
private TextView signatureText;
|
||||
|
||||
private Button confirmButton;
|
||||
private Button cancelButton;
|
||||
private Button verifySessionButton;
|
||||
private Button verifyIdentityButton;
|
||||
|
||||
private Recipient recipient;
|
||||
private long threadId;
|
||||
private long messageId;
|
||||
|
||||
private MasterSecret masterSecret;
|
||||
private KeyExchangeMessage keyExchangeMessage;
|
||||
private KeyExchangeProcessor keyExchangeProcessor;
|
||||
|
||||
private boolean sent;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle state) {
|
||||
super.onCreate(state);
|
||||
setContentView(R.layout.receive_key_activity);
|
||||
|
||||
initializeResources();
|
||||
|
||||
try {
|
||||
initializeKey();
|
||||
initializeText();
|
||||
} catch (InvalidKeyException ike) {
|
||||
Log.w("ReceiveKeyActivity", ike);
|
||||
initializeCorruptedKeyText();
|
||||
} catch (InvalidVersionException ive) {
|
||||
initializeBadVersionText();
|
||||
Log.w("ReceiveKeyActivity", ive);
|
||||
}
|
||||
initializeListeners();
|
||||
}
|
||||
@@ -83,64 +84,30 @@ public class ReceiveKeyActivity extends PassphraseRequiredSherlockActivity {
|
||||
}
|
||||
|
||||
private void initializeText() {
|
||||
if (keyExchangeProcessor.hasCompletedSession()) initializeTextForExistingSession();
|
||||
else initializeTextForNewSession();
|
||||
|
||||
initializeSignatureText();
|
||||
if (keyExchangeProcessor.isTrusted(keyExchangeMessage)) initializeTrustedText();
|
||||
else initializeUntrustedText();
|
||||
}
|
||||
|
||||
private void initializeCorruptedKeyText() {
|
||||
descriptionText.setText(R.string.ReceiveKeyActivity_error_you_have_received_a_corrupted_public_key);
|
||||
confirmButton.setVisibility(View.GONE);
|
||||
private void initializeTrustedText() {
|
||||
descriptionText.setText(getString(R.string.ReceiveKeyActivity_the_signature_on_this_key_exchange_is_trusted_but));
|
||||
}
|
||||
|
||||
private void initializeBadVersionText() {
|
||||
descriptionText.setText(R.string.ReceiveKeyActivity_error_you_have_received_a_public_key_from_an_unsupported_version_of_the_protocol);
|
||||
confirmButton.setVisibility(View.GONE);
|
||||
}
|
||||
private void initializeUntrustedText() {
|
||||
SpannableString spannableString = new SpannableString(getString(R.string.ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different) + " " +
|
||||
getString(R.string.ReceiveKeyActivity_you_may_wish_to_verify_this_contact));
|
||||
spannableString.setSpan(new ClickableSpan() {
|
||||
@Override
|
||||
public void onClick(View widget) {
|
||||
Intent intent = new Intent(ReceiveKeyActivity.this, VerifyIdentityActivity.class);
|
||||
intent.putExtra("recipient", recipient);
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
startActivity(intent);
|
||||
}
|
||||
}, getString(R.string.ReceiveKeyActivity_the_signature_on_this_key_exchange_is_different).length() +1,
|
||||
spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
private void initializeSignatureText() {
|
||||
if (!keyExchangeMessage.hasIdentityKey()) {
|
||||
signatureText.setText(R.string.ReceiveKeyActivity_this_key_exchange_message_does_not_include_an_identity_signature);
|
||||
return;
|
||||
}
|
||||
|
||||
IdentityKey identityKey = keyExchangeMessage.getIdentityKey();
|
||||
String identityName = DatabaseFactory.getIdentityDatabase(this).getNameForIdentity(masterSecret, identityKey);
|
||||
|
||||
if (identityName == null) {
|
||||
signatureText.setText(R.string.ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_but_you_do_not_yet_trust_it);
|
||||
} else {
|
||||
signatureText.setText(String.format(getString(R.string.ReceiveKeyActivity_this_key_exchange_message_includes_an_identity_signature_which_you_trust_for_s), identityName));
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeTextForExistingSession() {
|
||||
if (keyExchangeProcessor.isRemoteKeyExchangeForExistingSession(keyExchangeMessage)) {
|
||||
descriptionText.setText(String.format(getString(R.string.ReceiveKeyActivity_this_is_the_key_that_you_sent_to_start_your_current_encrypted_session_with_s), recipient.toShortString()));
|
||||
this.confirmButton.setVisibility(View.GONE);
|
||||
this.verifySessionButton.setVisibility(View.VISIBLE);
|
||||
this.verifyIdentityButton.setVisibility(View.VISIBLE);
|
||||
} else if (keyExchangeProcessor.isLocalKeyExchangeForExistingSession(keyExchangeMessage)) {
|
||||
descriptionText.setText(String.format(getString(R.string.ReceiveKeyActivity_this_is_the_key_that_you_received_to_start_your_current_encrypted_session_with_s), recipient.toShortString()));
|
||||
this.confirmButton.setVisibility(View.GONE);
|
||||
this.verifySessionButton.setVisibility(View.VISIBLE);
|
||||
this.verifyIdentityButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
descriptionText.setText(String.format(getString(R.string.ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_warning_you_already_have_an_encrypted_session), recipient.toShortString()));
|
||||
this.confirmButton.setVisibility(View.VISIBLE);
|
||||
this.verifyIdentityButton.setVisibility(View.GONE);
|
||||
this.verifySessionButton.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeTextForNewSession() {
|
||||
if (keyExchangeProcessor.hasInitiatedSession() && !this.sent)
|
||||
descriptionText.setText(String.format(getString(R.string.ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_previously_initiated), recipient.toShortString()));
|
||||
else if (keyExchangeProcessor.hasInitiatedSession() && this.sent)
|
||||
descriptionText.setText(String.format(getString(R.string.ReceiveKeyActivity_you_have_initiated_a_key_exchange_message_with_s_but_have_not_yet_received_a_reply), recipient.toShortString()));
|
||||
else if (!keyExchangeProcessor.hasInitiatedSession() && !this.sent)
|
||||
descriptionText.setText(String.format(getString(R.string.ReceiveKeyActivity_you_have_received_a_key_exchange_message_from_s_you_have_no_existing_session), recipient.toShortString()));
|
||||
descriptionText.setText(spannableString);
|
||||
descriptionText.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
}
|
||||
|
||||
private void initializeKey() throws InvalidKeyException, InvalidVersionException {
|
||||
@@ -150,52 +117,46 @@ public class ReceiveKeyActivity extends PassphraseRequiredSherlockActivity {
|
||||
|
||||
private void initializeResources() {
|
||||
this.descriptionText = (TextView) findViewById(R.id.description_text);
|
||||
this.signatureText = (TextView) findViewById(R.id.signature_text);
|
||||
this.confirmButton = (Button) findViewById(R.id.ok_button);
|
||||
this.cancelButton = (Button) findViewById(R.id.cancel_button);
|
||||
this.verifyIdentityButton = (Button) findViewById(R.id.verify_identity_button);
|
||||
this.verifySessionButton = (Button) findViewById(R.id.verify_session_button);
|
||||
this.recipient = getIntent().getParcelableExtra("recipient");
|
||||
this.threadId = getIntent().getLongExtra("thread_id", -1);
|
||||
this.messageId = getIntent().getLongExtra("message_id", -1);
|
||||
this.masterSecret = (MasterSecret)getIntent().getParcelableExtra("master_secret");
|
||||
this.sent = getIntent().getBooleanExtra("sent", false);
|
||||
this.keyExchangeProcessor = new KeyExchangeProcessor(this, masterSecret, recipient);
|
||||
}
|
||||
|
||||
private void initializeListeners() {
|
||||
this.confirmButton.setOnClickListener(new OkListener());
|
||||
this.cancelButton.setOnClickListener(new CancelListener());
|
||||
this.verifyIdentityButton.setOnClickListener(new VerifyIdentityListener());
|
||||
this.verifySessionButton.setOnClickListener(new VerifySessionListener());
|
||||
}
|
||||
|
||||
private class VerifyIdentityListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(ReceiveKeyActivity.this, VerifyIdentityActivity.class);
|
||||
intent.putExtra("recipient", recipient);
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
private class VerifySessionListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(ReceiveKeyActivity.this, VerifyKeysActivity.class);
|
||||
intent.putExtra("recipient", recipient);
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
private class OkListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
keyExchangeProcessor.processKeyExchangeMessage(keyExchangeMessage, threadId);
|
||||
finish();
|
||||
new AsyncTask<Void, Void, Void> () {
|
||||
private ProgressDialog dialog;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
dialog = ProgressDialog.show(ReceiveKeyActivity.this, "Processing",
|
||||
"Processing key exchange...", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
keyExchangeProcessor.processKeyExchangeMessage(keyExchangeMessage, threadId);
|
||||
DatabaseFactory.getEncryptingSmsDatabase(ReceiveKeyActivity.this)
|
||||
.markAsProcessedKeyExchange(messageId);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
dialog.dismiss();
|
||||
finish();
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,5 +166,4 @@ public class ReceiveKeyActivity extends PassphraseRequiredSherlockActivity {
|
||||
ReceiveKeyActivity.this.finish();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,192 +16,24 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CursorAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockListActivity;
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidKeyException;
|
||||
import org.thoughtcrime.securesms.crypto.MasterCipher;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
||||
import org.thoughtcrime.securesms.util.Base64;
|
||||
import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Activity for reviewing/managing saved identity keys.
|
||||
*
|
||||
* @author Moxie Marlinspike
|
||||
*/
|
||||
public class ReviewIdentitiesActivity extends SherlockListActivity {
|
||||
|
||||
private static final int MENU_OPTION_DELETE = 2;
|
||||
|
||||
private MasterSecret masterSecret;
|
||||
private MasterCipher masterCipher;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
this.setContentView(R.layout.review_identities);
|
||||
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
initializeResources();
|
||||
registerForContextMenu(this.getListView());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
masterCipher = null;
|
||||
System.gc();
|
||||
MemoryCleaner.clean(masterSecret);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(ListView listView, View view, int position, long id) {
|
||||
viewIdentity(((IdentityKeyView)view).getIdentityKeyString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||
menu.add(0, MENU_OPTION_DELETE, Menu.NONE, R.string.delete);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onContextItemSelected(android.view.MenuItem item) {
|
||||
Cursor cursor = ((CursorAdapter)this.getListAdapter()).getCursor();
|
||||
String identityKeyString = cursor.getString(cursor.getColumnIndexOrThrow(IdentityDatabase.IDENTITY_KEY));
|
||||
String identityName = cursor.getString(cursor.getColumnIndexOrThrow(IdentityDatabase.IDENTITY_NAME));
|
||||
|
||||
|
||||
switch(item.getItemId()) {
|
||||
case MENU_OPTION_DELETE:
|
||||
deleteIdentity(identityName, identityKeyString);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
public class ReviewIdentitiesActivity extends SherlockFragmentActivity {
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
setContentView(R.layout.review_identities);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home: finish(); return true;
|
||||
case android.R.id.home: finish(); return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void initializeResources() {
|
||||
this.masterSecret = (MasterSecret)getIntent().getParcelableExtra("master_secret");
|
||||
this.masterCipher = new MasterCipher(masterSecret);
|
||||
|
||||
Cursor cursor = DatabaseFactory.getIdentityDatabase(this).getIdentities();
|
||||
this.startManagingCursor(cursor);
|
||||
this.setListAdapter(new IdentitiesListAdapter(this, cursor));
|
||||
}
|
||||
|
||||
private void viewIdentity(String identityKeyString) {
|
||||
try {
|
||||
Intent viewIntent = new Intent(this, ViewIdentityActivity.class);
|
||||
viewIntent.putExtra("identity_key", new IdentityKey(Base64.decode(identityKeyString), 0));
|
||||
startActivity(viewIntent);
|
||||
} catch (InvalidKeyException ike) {
|
||||
Log.w("ReviewIdentitiesActivity", ike);
|
||||
Toast.makeText(this, R.string.ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation,
|
||||
Toast.LENGTH_LONG).show();
|
||||
} catch (IOException e) {
|
||||
Log.w("ReviewIdentitiesActivity", e);
|
||||
Toast.makeText(this, R.string.ReviewIdentitiesActivity_unable_to_view_corrupted_identity_key_exclamation,
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteIdentity(String name, String keyString) {
|
||||
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
|
||||
alertDialog.setTitle(R.string.ReviewIdentitiesActivity_delete_identity);
|
||||
alertDialog.setMessage(R.string.ReviewIdentitiesActivity_delete_identity_are_you_sure_you_want_to_delete_this_identity_key);
|
||||
alertDialog.setCancelable(true);
|
||||
alertDialog.setNegativeButton(R.string.no, null);
|
||||
alertDialog.setPositiveButton(R.string.yes, new DeleteIdentityListener(name, keyString));
|
||||
alertDialog.show();
|
||||
}
|
||||
|
||||
private class DeleteIdentityListener implements OnClickListener {
|
||||
private final String name;
|
||||
private final String keyString;
|
||||
|
||||
public DeleteIdentityListener(String name, String keyString) {
|
||||
this.name = name;
|
||||
this.keyString = keyString;
|
||||
}
|
||||
|
||||
public void onClick(DialogInterface arg0, int arg1) {
|
||||
DatabaseFactory.getIdentityDatabase(ReviewIdentitiesActivity.this)
|
||||
.deleteIdentity(name, keyString);
|
||||
}
|
||||
}
|
||||
|
||||
private class IdentitiesListAdapter extends CursorAdapter {
|
||||
|
||||
public IdentitiesListAdapter(Context context, Cursor cursor) {
|
||||
super(context, cursor);
|
||||
}
|
||||
|
||||
public IdentitiesListAdapter(Context context, Cursor c, boolean autoRequery) {
|
||||
super(context, c, autoRequery);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(View view, Context context, Cursor cursor) {
|
||||
IdentityKey identityKey;
|
||||
boolean valid;
|
||||
|
||||
String identityKeyString = cursor.getString(cursor.getColumnIndexOrThrow(IdentityDatabase.IDENTITY_KEY));
|
||||
String identityName = cursor.getString(cursor.getColumnIndexOrThrow(IdentityDatabase.IDENTITY_NAME));
|
||||
|
||||
try {
|
||||
String mac = cursor.getString(cursor.getColumnIndexOrThrow(IdentityDatabase.MAC));
|
||||
valid = masterCipher.verifyMacFor(identityName + identityKeyString, Base64.decode(mac));
|
||||
identityKey = new IdentityKey(Base64.decode(identityKeyString), 0);
|
||||
} catch (InvalidKeyException ike) {
|
||||
Log.w("ReviewIdentitiesActivity",ike);
|
||||
valid = false;
|
||||
} catch (IOException e) {
|
||||
Log.w("ReviewIdentitiesActivity",e);
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (!valid)
|
||||
identityName = getString(R.string.ReviewIdentitiesActivity_invalid_identity);
|
||||
|
||||
((IdentityKeyView)view).set(identityName, identityKeyString);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
||||
IdentityKeyView identityKeyView = new IdentityKeyView(context);
|
||||
bindView(identityKeyView, context, cursor);
|
||||
return identityKeyView;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.LoaderManager;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CursorAdapter;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockListFragment;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
||||
import org.thoughtcrime.securesms.database.loaders.IdentityLoader;
|
||||
|
||||
public class ReviewIdentitiesFragment extends SherlockListFragment
|
||||
implements LoaderManager.LoaderCallbacks<Cursor>
|
||||
{
|
||||
private MasterSecret masterSecret;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
|
||||
return inflater.inflate(R.layout.review_identities_fragment, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle bundle) {
|
||||
super.onActivityCreated(bundle);
|
||||
this.masterSecret = getSherlockActivity().getIntent().getParcelableExtra("master_secret");
|
||||
|
||||
initializeListAdapter();
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(ListView listView, View view, int position, long id) {
|
||||
Intent viewIntent = new Intent(getActivity(), ViewIdentityActivity.class);
|
||||
viewIntent.putExtra("identity_key", ((IdentityKeyView)view).getIdentityKey());
|
||||
viewIntent.putExtra("title", ((IdentityKeyView)view).getRecipient().toShortString() + " " +
|
||||
getString(R.string.ViewIdentityActivity_identity_fingerprint));
|
||||
startActivity(viewIntent);
|
||||
}
|
||||
|
||||
private void initializeListAdapter() {
|
||||
this.setListAdapter(new IdentitiesListAdapter(getActivity(), null, masterSecret));
|
||||
getLoaderManager().restartLoader(0, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
||||
return new IdentityLoader(getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
|
||||
((CursorAdapter)getListAdapter()).changeCursor(cursor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<Cursor> loader) {
|
||||
((CursorAdapter)getListAdapter()).changeCursor(null);
|
||||
}
|
||||
|
||||
private class IdentitiesListAdapter extends CursorAdapter {
|
||||
private final MasterSecret masterSecret;
|
||||
private final LayoutInflater inflater;
|
||||
|
||||
public IdentitiesListAdapter(Context context, Cursor cursor, MasterSecret masterSecret) {
|
||||
super(context, cursor);
|
||||
this.masterSecret = masterSecret;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(View view, Context context, Cursor cursor) {
|
||||
IdentityDatabase.Reader reader = DatabaseFactory.getIdentityDatabase(context)
|
||||
.readerFor(masterSecret, cursor);
|
||||
|
||||
((IdentityKeyView)view).set(reader.getCurrent());
|
||||
}
|
||||
|
||||
@Override
|
||||
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
||||
return inflater.inflate(R.layout.identity_key_view, parent, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,123 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2011 Whisper Systems
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidKeyException;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
|
||||
/**
|
||||
* Activity that provides interface for users to save
|
||||
* identity keys they receive.
|
||||
*
|
||||
* @author Moxie Marlinspike
|
||||
*/
|
||||
public class SaveIdentityActivity extends PassphraseRequiredSherlockActivity {
|
||||
|
||||
private MasterSecret masterSecret;
|
||||
private IdentityKey identityKey;
|
||||
|
||||
private EditText identityName;
|
||||
private Button okButton;
|
||||
private Button cancelButton;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
setContentView(R.layout.save_identity_activity);
|
||||
|
||||
initializeResources();
|
||||
initializeListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
MemoryCleaner.clean(masterSecret);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
String nameSuggestion = getIntent().getStringExtra("name_suggestion");
|
||||
|
||||
this.masterSecret = (MasterSecret)getIntent().getParcelableExtra("master_secret");
|
||||
this.identityKey = (IdentityKey)getIntent().getParcelableExtra("identity_key");
|
||||
this.identityName = (EditText)findViewById(R.id.identity_name);
|
||||
this.okButton = (Button)findViewById(R.id.ok_button);
|
||||
this.cancelButton = (Button)findViewById(R.id.cancel_button);
|
||||
|
||||
if ((nameSuggestion != null) && (nameSuggestion.trim().length() > 0)) {
|
||||
this.identityName.setText(nameSuggestion);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeListeners() {
|
||||
this.okButton.setOnClickListener(new OkListener());
|
||||
this.cancelButton.setOnClickListener(new CancelListener());
|
||||
}
|
||||
|
||||
private class OkListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (identityName.getText() == null || identityName.getText().toString().trim().length() == 0) {
|
||||
Toast.makeText(SaveIdentityActivity.this,
|
||||
R.string.SaveIdentityActivity_you_must_specify_a_name_for_this_identity_exclamation,
|
||||
Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
DatabaseFactory.getIdentityDatabase(SaveIdentityActivity.this).saveIdentity(masterSecret, identityKey, identityName.getText().toString());
|
||||
} catch (InvalidKeyException e) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(SaveIdentityActivity.this);
|
||||
builder.setTitle(R.string.SaveIdentityActivity_identity_name_exists_exclamation);
|
||||
builder.setMessage(R.string.SaveIdentityActivity_an_identity_key_with_the_specified_name_already_exists);
|
||||
builder.setPositiveButton(R.string.SaveIdentityActivity_manage_identities,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Intent intent = new Intent(SaveIdentityActivity.this, ReviewIdentitiesActivity.class);
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
builder.show();
|
||||
return;
|
||||
}
|
||||
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
private class CancelListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,13 +16,11 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
@@ -35,7 +33,7 @@ import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
*
|
||||
* @author Moxie Marlinspike
|
||||
*/
|
||||
public class VerifyIdentityActivity extends KeyVerifyingActivity {
|
||||
public class VerifyIdentityActivity extends KeyScanningActivity {
|
||||
|
||||
private Recipient recipient;
|
||||
private MasterSecret masterSecret;
|
||||
@@ -46,6 +44,7 @@ public class VerifyIdentityActivity extends KeyVerifyingActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle state) {
|
||||
super.onCreate(state);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setContentView(R.layout.verify_identity_activity);
|
||||
|
||||
initializeResources();
|
||||
@@ -59,35 +58,12 @@ public class VerifyIdentityActivity extends KeyVerifyingActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleVerified() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setIcon(android.R.drawable.ic_dialog_alert);
|
||||
builder.setTitle(R.string.VerifyIdentityActivity_mark_identity_verified_question);
|
||||
builder.setMessage(R.string.VerifyIdentityActivity_are_you_sure_you_have_validated_the_recipients_identity_fingerprint_and_would_like_to_mark_it_as_verified);
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home: finish(); return true;
|
||||
}
|
||||
|
||||
builder.setPositiveButton(R.string.VerifyIdentityActivity_mark_verified,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
SessionRecord sessionRecord = new SessionRecord(VerifyIdentityActivity.this,
|
||||
masterSecret, recipient);
|
||||
IdentityKey identityKey = sessionRecord.getIdentityKey();
|
||||
String recipientName = recipient.getName();
|
||||
|
||||
Intent intent = new Intent(VerifyIdentityActivity.this,
|
||||
SaveIdentityActivity.class);
|
||||
|
||||
intent.putExtra("name_suggestion", recipientName);
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
intent.putExtra("identity_key", identityKey);
|
||||
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
builder.show();
|
||||
return false;
|
||||
}
|
||||
|
||||
private void initializeLocalIdentityKey() {
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2011 Whisper Systems
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidKeyException;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.util.Dialogs;
|
||||
import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
|
||||
/**
|
||||
* Activity for verifying identities keys as they are imported.
|
||||
*
|
||||
* @author Moxie Marlinspike
|
||||
*/
|
||||
|
||||
public class VerifyImportedIdentityActivity extends KeyScanningActivity {
|
||||
|
||||
private MasterSecret masterSecret;
|
||||
private String contactName;
|
||||
private IdentityKey identityKey;
|
||||
private EditText identityName;
|
||||
private TextView identityFingerprint;
|
||||
|
||||
private Button compareButton;
|
||||
private Button verifiedButton;
|
||||
private Button cancelButton;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle state) {
|
||||
super.onCreate(state);
|
||||
setContentView(R.layout.verify_imported_identity_activity);
|
||||
|
||||
initializeResources();
|
||||
initializeFingerprints();
|
||||
initializeListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
MemoryCleaner.clean(masterSecret);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void initializeListeners() {
|
||||
verifiedButton.setOnClickListener(new VerifiedButtonListener());
|
||||
cancelButton.setOnClickListener(new CancelButtonListener());
|
||||
compareButton.setOnClickListener(new CompareButtonListener());
|
||||
}
|
||||
|
||||
private void initializeFingerprints() {
|
||||
if (contactName != null)
|
||||
identityName.setText(contactName);
|
||||
identityFingerprint.setText(identityKey.getFingerprint());
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
masterSecret = (MasterSecret)this.getIntent().getParcelableExtra("master_secret");
|
||||
identityFingerprint = (TextView)findViewById(R.id.imported_identity);
|
||||
identityName = (EditText)findViewById(R.id.identity_name);
|
||||
identityKey = (IdentityKey)this.getIntent().getParcelableExtra("identity_key");
|
||||
contactName = (String)this.getIntent().getStringExtra("contact_name");
|
||||
verifiedButton = (Button)findViewById(R.id.verified_button);
|
||||
cancelButton = (Button)findViewById(R.id.cancel_button);
|
||||
compareButton = (Button)findViewById(R.id.compare_button);
|
||||
}
|
||||
|
||||
private class CancelButtonListener implements View.OnClickListener {
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
private class CompareButtonListener implements View.OnClickListener {
|
||||
public void onClick(View v) {
|
||||
registerForContextMenu(compareButton);
|
||||
compareButton.showContextMenu();
|
||||
}
|
||||
}
|
||||
|
||||
private class VerifiedButtonListener implements View.OnClickListener {
|
||||
public void onClick(View v) {
|
||||
if (identityName.getText() == null || identityName.getText().length() == 0) {
|
||||
Toast.makeText(VerifyImportedIdentityActivity.this,
|
||||
R.string.VerifyImportedIdentityActivity_you_must_specify_a_name_for_this_contact_exclamation,
|
||||
Toast.LENGTH_LONG);
|
||||
return;
|
||||
}
|
||||
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(VerifyImportedIdentityActivity.this);
|
||||
dialogBuilder.setTitle(R.string.VerifyImportedIdentityActivity_save_identity_key_question);
|
||||
dialogBuilder.setIcon(android.R.drawable.ic_dialog_info);
|
||||
dialogBuilder.setMessage(String.format(getString(R.string.VerifyImportedIdentityActivity_are_you_sure_that_you_would_like_to_mark_this_as_a_valid_identity_key_for_all_future_correspondence_with_s), identityName.getText()));
|
||||
dialogBuilder.setCancelable(true);
|
||||
dialogBuilder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface arg0, int arg1) {
|
||||
try {
|
||||
DatabaseFactory.getIdentityDatabase(VerifyImportedIdentityActivity.this).saveIdentity(masterSecret, identityKey, identityName.getText().toString());
|
||||
} catch (InvalidKeyException ike) {
|
||||
Log.w("VerifiedButtonListener", ike);
|
||||
Dialogs.displayAlert(VerifyImportedIdentityActivity.this,
|
||||
getString(R.string.VerifyImportedIdentityActivity_error_saving_identity_key_exclamation),
|
||||
getString(R.string.VerifyImportedIdentityActivity_this_identity_key_or_an_identity_key_with_the_same_name_already_exists_please_edit_your_key_database),
|
||||
android.R.drawable.ic_dialog_alert);
|
||||
return;
|
||||
}
|
||||
|
||||
finish();
|
||||
}
|
||||
});
|
||||
dialogBuilder.setNegativeButton(R.string.no, null);
|
||||
dialogBuilder.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getScanString() {
|
||||
return getString(R.string.VerifyImportedIdentityActivity_scan_to_compare);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDisplayString() {
|
||||
return getString(R.string.VerifyImportedIdentityActivity_get_scanned_to_compare);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IdentityKey getIdentityKeyToCompare() {
|
||||
return identityKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IdentityKey getIdentityKeyToDisplay() {
|
||||
return identityKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getNotVerifiedMessage() {
|
||||
return getString(R.string.VerifyImportedIdentityActivity_warning_the_scanned_key_does_not_match_exclamation);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getNotVerifiedTitle() {
|
||||
return getString(R.string.VerifyImportedIdentityActivity_not_verified_exclamation);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getVerifiedMessage() {
|
||||
return getString(R.string.VerifyImportedIdentityActivity_the_scanned_key_matches_exclamation);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getVerifiedTitle() {
|
||||
return getString(R.string.VerifyImportedIdentityActivity_verified_exclamation);
|
||||
}
|
||||
}
|
||||
@@ -16,8 +16,6 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
|
||||
@@ -34,7 +32,7 @@ import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
* @author Moxie Marlinspike
|
||||
*
|
||||
*/
|
||||
public class VerifyKeysActivity extends KeyVerifyingActivity {
|
||||
public class VerifyKeysActivity extends KeyScanningActivity {
|
||||
|
||||
private byte[] yourFingerprintBytes;
|
||||
private byte[] theirFingerprintBytes;
|
||||
@@ -60,28 +58,6 @@ public class VerifyKeysActivity extends KeyVerifyingActivity {
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleVerified() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setIcon(android.R.drawable.ic_dialog_alert);
|
||||
builder.setTitle(R.string.VerifyKeysActivity_mark_session_verified_question);
|
||||
builder.setMessage(R.string.VerifyKeysActivity_are_you_sure_that_you_have_validated_these_fingerprints_and_would_like_to_mark_this_session_as_verified);
|
||||
builder.setPositiveButton(R.string.VerifyKeysActivity_mark_verified,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
SessionRecord sessionRecord = new SessionRecord(VerifyKeysActivity.this, masterSecret,
|
||||
recipient);
|
||||
sessionRecord.setVerifiedSessionKey(true);
|
||||
sessionRecord.save();
|
||||
VerifyKeysActivity.this.finish();
|
||||
}
|
||||
});
|
||||
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
builder.show();
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
this.recipient = (Recipient)this.getIntent().getParcelableExtra("recipient");
|
||||
this.masterSecret = (MasterSecret)this.getIntent().getParcelableExtra("master_secret");
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
@@ -30,18 +28,16 @@ import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
*/
|
||||
public class ViewIdentityActivity extends KeyScanningActivity {
|
||||
|
||||
private TextView identityFingerprint;
|
||||
private Button compareButton;
|
||||
private Button okButton;
|
||||
private TextView identityFingerprint;
|
||||
private IdentityKey identityKey;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle state) {
|
||||
super.onCreate(state);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setContentView(R.layout.view_identity_activity);
|
||||
|
||||
initializeResources();
|
||||
initializeListeners();
|
||||
initializeFingerprint();
|
||||
}
|
||||
|
||||
@@ -53,27 +49,13 @@ public class ViewIdentityActivity extends KeyScanningActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeListeners() {
|
||||
this.okButton.setOnClickListener(new OkButtonListener());
|
||||
this.compareButton.setOnClickListener(new CompareListener());
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
this.identityKey = (IdentityKey)getIntent().getParcelableExtra("identity_key");
|
||||
this.identityFingerprint = (TextView)findViewById(R.id.identity_fingerprint);
|
||||
this.okButton = (Button)findViewById(R.id.ok_button);
|
||||
this.compareButton = (Button)findViewById(R.id.compare_button);
|
||||
}
|
||||
String title = getIntent().getStringExtra("title");
|
||||
|
||||
private class CompareListener implements View.OnClickListener {
|
||||
public void onClick(View v) {
|
||||
initiateDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
private class OkButtonListener implements View.OnClickListener {
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
if (title != null) {
|
||||
getSupportActionBar().setTitle(getIntent().getStringExtra("title"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2011 Whisper Systems
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.thoughtcrime.securesms.crypto;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.keys.SessionRecord;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
|
||||
public class AuthenticityCalculator {
|
||||
|
||||
private static boolean isAuthenticatedIdentity(Context context,
|
||||
MasterSecret masterSecret,
|
||||
IdentityKey identityKey)
|
||||
{
|
||||
String identityName = DatabaseFactory.getIdentityDatabase(context)
|
||||
.getNameForIdentity(masterSecret, identityKey);
|
||||
|
||||
if (identityName == null) return false;
|
||||
else return true;
|
||||
}
|
||||
|
||||
public static String getAuthenticatedName(Context context,
|
||||
Recipient recipient,
|
||||
MasterSecret masterSecret)
|
||||
{
|
||||
SessionRecord session = new SessionRecord(context, masterSecret, recipient);
|
||||
return DatabaseFactory.getIdentityDatabase(context)
|
||||
.getNameForIdentity(masterSecret, session.getIdentityKey());
|
||||
}
|
||||
|
||||
public static boolean isAuthenticated(Context context,
|
||||
Recipient recipient,
|
||||
MasterSecret masterSecret)
|
||||
{
|
||||
SessionRecord session = new SessionRecord(context, masterSecret, recipient);
|
||||
|
||||
if (session.isVerifiedSession()) {
|
||||
return true;
|
||||
} else if (session.getIdentityKey() != null) {
|
||||
return isAuthenticatedIdentity(context, masterSecret, session.getIdentityKey());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -190,7 +190,21 @@ public class DecryptingQueue {
|
||||
synchronized (SessionCipher.CIPHER_LOCK) {
|
||||
Log.w("DecryptingQueue", "Decrypting: " + Hex.toString(ciphertextPduBytes));
|
||||
SessionCipher cipher = new SessionCipher(context, masterSecret, recipient, new TextTransport());
|
||||
plaintextPduBytes = cipher.decryptMessage(ciphertextPduBytes);
|
||||
try {
|
||||
plaintextPduBytes = cipher.decryptMessage(ciphertextPduBytes);
|
||||
} catch (InvalidMessageException ime) {
|
||||
// XXX - For some reason, Sprint seems to append a single character to the
|
||||
// end of message text segments. I don't know why, so here we just try
|
||||
// truncating the message by one if the MAC fails.
|
||||
if (ciphertextPduBytes.length > 2) {
|
||||
Log.w("DecryptingQueue", "Attempting truncated decrypt...");
|
||||
byte[] truncated = new byte[ciphertextPduBytes.length - 1];
|
||||
System.arraycopy(ciphertextPduBytes, 0, truncated, 0, truncated.length);
|
||||
plaintextPduBytes = cipher.decryptMessage(truncated);
|
||||
} else {
|
||||
throw ime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MultimediaMessagePdu plaintextGenericPdu = (MultimediaMessagePdu)new PduParser(plaintextPduBytes).parse();
|
||||
@@ -307,9 +321,7 @@ public class DecryptingQueue {
|
||||
|
||||
if (processor.isStale(keyExchangeMessage)) {
|
||||
DatabaseFactory.getEncryptingSmsDatabase(context).markAsStaleKeyExchange(messageId);
|
||||
} else if (!processor.hasCompletedSession() ||
|
||||
processor.hasSameSessionIdentity(keyExchangeMessage))
|
||||
{
|
||||
} else if (processor.isTrusted(keyExchangeMessage)) {
|
||||
DatabaseFactory.getEncryptingSmsDatabase(context).markAsProcessedKeyExchange(messageId);
|
||||
processor.processKeyExchangeMessage(keyExchangeMessage, threadId);
|
||||
}
|
||||
|
||||
@@ -90,7 +90,8 @@ public class KeyExchangeMessage {
|
||||
this.serialized = messageBody;
|
||||
|
||||
if (messageVersion > Message.SUPPORTED_VERSION)
|
||||
throw new InvalidVersionException("Key exchange with version: " + messageVersion + " but we only support: " + Message.SUPPORTED_VERSION);
|
||||
throw new InvalidVersionException("Key exchange with version: " + messageVersion +
|
||||
" but we only support: " + Message.SUPPORTED_VERSION);
|
||||
|
||||
if (messageVersion >= 1)
|
||||
keyBytes = Base64.decodeWithoutPadding(messageBody);
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import org.bouncycastle.util.Arrays;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.keys.LocalKeyRecord;
|
||||
import org.thoughtcrime.securesms.database.keys.RemoteKeyRecord;
|
||||
import org.thoughtcrime.securesms.database.keys.SessionRecord;
|
||||
@@ -58,16 +59,13 @@ public class KeyExchangeProcessor {
|
||||
this.sessionRecord = new SessionRecord(context, masterSecret, recipient);
|
||||
}
|
||||
|
||||
public boolean hasCompletedSession() {
|
||||
return sessionRecord.getLocalFingerprint() != null;
|
||||
}
|
||||
public boolean isTrusted(KeyExchangeMessage message) {
|
||||
if (!message.hasIdentityKey()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean hasSameSessionIdentity(KeyExchangeMessage message) {
|
||||
return
|
||||
(this.sessionRecord.getIdentityKey() != null) &&
|
||||
(message.getIdentityKey() != null) &&
|
||||
(this.sessionRecord.getIdentityKey().equals(message.getIdentityKey()) &&
|
||||
!isRemoteKeyExchangeForExistingSession(message));
|
||||
return DatabaseFactory.getIdentityDatabase(context).isValidIdentity(masterSecret, recipient,
|
||||
message.getIdentityKey());
|
||||
}
|
||||
|
||||
public boolean hasInitiatedSession() {
|
||||
@@ -78,14 +76,6 @@ public class KeyExchangeProcessor {
|
||||
return !hasInitiatedSession() || remoteKeyRecord.getCurrentRemoteKey() != null;
|
||||
}
|
||||
|
||||
public boolean isRemoteKeyExchangeForExistingSession(KeyExchangeMessage message) {
|
||||
return Arrays.areEqual(message.getPublicKey().getFingerprintBytes(), sessionRecord.getRemoteFingerprint());
|
||||
}
|
||||
|
||||
public boolean isLocalKeyExchangeForExistingSession(KeyExchangeMessage message) {
|
||||
return Arrays.areEqual(message.getPublicKey().getFingerprintBytes(), sessionRecord.getLocalFingerprint());
|
||||
}
|
||||
|
||||
public boolean isStale(KeyExchangeMessage message) {
|
||||
int responseKeyId = Conversions.highBitsToMedium(message.getPublicKey().getId());
|
||||
|
||||
@@ -121,6 +111,9 @@ public class KeyExchangeProcessor {
|
||||
|
||||
sessionRecord.save();
|
||||
|
||||
DatabaseFactory.getIdentityDatabase(context)
|
||||
.saveIdentity(masterSecret, recipient, message.getIdentityKey());
|
||||
|
||||
DecryptingQueue.scheduleRogueMessages(context, masterSecret, recipient);
|
||||
|
||||
Intent intent = new Intent(SECURITY_UPDATE_EVENT);
|
||||
|
||||
@@ -91,6 +91,14 @@ public class KeyUtil {
|
||||
(RemoteKeyRecord.hasRecord(context, recipient)) &&
|
||||
(SessionRecord.hasSession(context, recipient));
|
||||
}
|
||||
|
||||
public static boolean isIdentityKeyFor(Context context,
|
||||
MasterSecret masterSecret,
|
||||
Recipient recipient)
|
||||
{
|
||||
return isSessionFor(context, recipient) &&
|
||||
new SessionRecord(context, masterSecret, recipient).getIdentityKey() != null;
|
||||
}
|
||||
|
||||
public static LocalKeyRecord initializeRecordFor(Recipient recipient, Context context, MasterSecret masterSecret) {
|
||||
Log.w("KeyUtil", "Initializing local key pairs...");
|
||||
|
||||
@@ -103,7 +103,7 @@ public class ApplicationExporter {
|
||||
File directory = new File(getExportDirectoryPath() + File.separator + directoryName);
|
||||
File importDirectory = new File(context.getFilesDir().getParent() + File.separator + directoryName);
|
||||
|
||||
if (directory.exists()) {
|
||||
if (directory.exists() && directory.isDirectory()) {
|
||||
importDirectory.mkdirs();
|
||||
|
||||
File[] contents = directory.listFiles();
|
||||
@@ -112,7 +112,7 @@ public class ApplicationExporter {
|
||||
if (exportedFile.isFile()) {
|
||||
File localFile = new File(importDirectory.getAbsolutePath() + File.separator + exportedFile.getName());
|
||||
migrateFile(exportedFile, localFile);
|
||||
} else {
|
||||
} else if (exportedFile.isDirectory()) {
|
||||
importDirectory(context, directoryName + File.separator + exportedFile.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,12 @@ import android.util.Log;
|
||||
import org.thoughtcrime.securesms.DatabaseUpgradeActivity;
|
||||
import org.thoughtcrime.securesms.crypto.DecryptingPartInputStream;
|
||||
import org.thoughtcrime.securesms.crypto.DecryptingQueue;
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.MasterCipher;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.keys.SessionRecord;
|
||||
import org.thoughtcrime.securesms.notifications.MessageNotifier;
|
||||
import org.thoughtcrime.securesms.util.Base64;
|
||||
import org.thoughtcrime.securesms.util.InvalidMessageException;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
@@ -40,14 +43,15 @@ import ws.com.google.android.mms.ContentType;
|
||||
|
||||
public class DatabaseFactory {
|
||||
|
||||
private static final int INTRODUCED_IDENTITIES_VERSION = 2;
|
||||
private static final int INTRODUCED_INDEXES_VERSION = 3;
|
||||
private static final int INTRODUCED_DATE_SENT_VERSION = 4;
|
||||
private static final int INTRODUCED_DRAFTS_VERSION = 5;
|
||||
private static final int INTRODUCED_NEW_TYPES_VERSION = 6;
|
||||
private static final int INTRODUCED_MMS_BODY_VERSION = 7;
|
||||
private static final int INTRODUCED_MMS_FROM_VERSION = 8;
|
||||
private static final int DATABASE_VERSION = 8;
|
||||
private static final int INTRODUCED_IDENTITIES_VERSION = 2;
|
||||
private static final int INTRODUCED_INDEXES_VERSION = 3;
|
||||
private static final int INTRODUCED_DATE_SENT_VERSION = 4;
|
||||
private static final int INTRODUCED_DRAFTS_VERSION = 5;
|
||||
private static final int INTRODUCED_NEW_TYPES_VERSION = 6;
|
||||
private static final int INTRODUCED_MMS_BODY_VERSION = 7;
|
||||
private static final int INTRODUCED_MMS_FROM_VERSION = 8;
|
||||
private static final int INTRODUCED_TOFU_IDENTITY_VERSION = 9;
|
||||
private static final int DATABASE_VERSION = 9;
|
||||
|
||||
private static final String DATABASE_NAME = "messages.db";
|
||||
private static final Object lock = new Object();
|
||||
@@ -357,6 +361,36 @@ public class DatabaseFactory {
|
||||
}
|
||||
}
|
||||
|
||||
if (fromVersion < DatabaseUpgradeActivity.TOFU_IDENTITIES_VERSION) {
|
||||
File sessionDirectory = new File(context.getFilesDir() + File.separator + "sessions");
|
||||
|
||||
if (sessionDirectory.exists() && sessionDirectory.isDirectory()) {
|
||||
File[] sessions = sessionDirectory.listFiles();
|
||||
|
||||
if (sessions != null) {
|
||||
for (File session : sessions) {
|
||||
String name = session.getName();
|
||||
|
||||
if (name.matches("[0-9]+")) {
|
||||
long recipientId = Long.parseLong(name);
|
||||
SessionRecord sessionRecord = new SessionRecord(context, masterSecret, recipientId);
|
||||
IdentityKey identityKey = sessionRecord.getIdentityKey();
|
||||
|
||||
if (identityKey != null) {
|
||||
MasterCipher masterCipher = new MasterCipher(masterSecret);
|
||||
String identityKeyString = Base64.encodeBytes(identityKey.serialize());
|
||||
String macString = Base64.encodeBytes(masterCipher.getMacFor(recipientId +
|
||||
identityKeyString));
|
||||
|
||||
db.execSQL("REPLACE INTO identities (recipient, key, mac) VALUES (?, ?, ?)",
|
||||
new String[] {recipientId+"", identityKeyString, macString});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
|
||||
@@ -566,6 +600,11 @@ public class DatabaseFactory {
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
if (oldVersion < INTRODUCED_TOFU_IDENTITY_VERSION) {
|
||||
db.execSQL("DROP TABLE identities");
|
||||
db.execSQL("CREATE TABLE identities (_id INTEGER PRIMARY KEY, recipient INTEGER UNIQUE, key TEXT, mac TEXT);");
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
@@ -28,6 +28,9 @@ import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidKeyException;
|
||||
import org.thoughtcrime.securesms.crypto.MasterCipher;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientFactory;
|
||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||
import org.thoughtcrime.securesms.util.Base64;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -38,13 +41,15 @@ public class IdentityDatabase extends Database {
|
||||
|
||||
private static final String TABLE_NAME = "identities";
|
||||
private static final String ID = "_id";
|
||||
public static final String RECIPIENT = "recipient";
|
||||
public static final String IDENTITY_KEY = "key";
|
||||
public static final String IDENTITY_NAME = "name";
|
||||
public static final String MAC = "mac";
|
||||
|
||||
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY, " +
|
||||
IDENTITY_KEY + " TEXT UNIQUE, " + IDENTITY_NAME + " TEXT UNIQUE, " +
|
||||
MAC + " TEXT);";
|
||||
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME +
|
||||
" (" + ID + " INTEGER PRIMARY KEY, " +
|
||||
RECIPIENT + " INTEGER UNIQUE, " +
|
||||
IDENTITY_KEY + " TEXT, " +
|
||||
MAC + " TEXT);";
|
||||
|
||||
public IdentityDatabase(Context context, SQLiteOpenHelper databaseHelper) {
|
||||
super(context, databaseHelper);
|
||||
@@ -60,69 +65,127 @@ public class IdentityDatabase extends Database {
|
||||
return cursor;
|
||||
}
|
||||
|
||||
public String getNameForIdentity(MasterSecret masterSecret, IdentityKey identityKey) {
|
||||
if (identityKey == null)
|
||||
return null;
|
||||
|
||||
MasterCipher masterCipher = new MasterCipher(masterSecret);
|
||||
public boolean isValidIdentity(MasterSecret masterSecret,
|
||||
Recipient recipient,
|
||||
IdentityKey theirIdentity)
|
||||
{
|
||||
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||
String number = recipient.getNumber();
|
||||
long recipientId = DatabaseFactory.getAddressDatabase(context).getCanonicalAddress(number);
|
||||
MasterCipher masterCipher = new MasterCipher(masterSecret);
|
||||
Cursor cursor = null;
|
||||
|
||||
Log.w("IdentityDatabase", "Querying for: " + Base64.encodeBytes(identityKey.serialize()));
|
||||
|
||||
try {
|
||||
cursor = database.query(TABLE_NAME, null, IDENTITY_KEY + " = ?", new String[] {Base64.encodeBytes(identityKey.serialize())}, null, null, null);
|
||||
cursor = database.query(TABLE_NAME, null, RECIPIENT + " = ?",
|
||||
new String[] {recipientId+""}, null, null,null);
|
||||
|
||||
if (cursor == null || !cursor.moveToFirst())
|
||||
return null;
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
String serializedIdentity = cursor.getString(cursor.getColumnIndexOrThrow(IDENTITY_KEY));
|
||||
String mac = cursor.getString(cursor.getColumnIndexOrThrow(MAC));
|
||||
|
||||
String identityName = cursor.getString(cursor.getColumnIndexOrThrow(IDENTITY_NAME));
|
||||
String identityKeyString = cursor.getString(cursor.getColumnIndexOrThrow(IDENTITY_KEY));
|
||||
byte[] mac = Base64.decode(cursor.getString(cursor.getColumnIndexOrThrow(MAC)));
|
||||
if (!masterCipher.verifyMacFor(recipientId + serializedIdentity, Base64.decode(mac))) {
|
||||
Log.w("IdentityDatabase", "MAC failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!masterCipher.verifyMacFor(identityName + identityKeyString, mac)) {
|
||||
Log.w("IdentityDatabase", "Mac check failed!");
|
||||
return null;
|
||||
IdentityKey ourIdentity = new IdentityKey(Base64.decode(serializedIdentity), 0);
|
||||
return ourIdentity.equals(theirIdentity);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.w("IdentityDatabase", "Returning identity name: " + identityName);
|
||||
return identityName;
|
||||
} catch (IOException e) {
|
||||
Log.w("IdentityDatabase", e);
|
||||
return null;
|
||||
return false;
|
||||
} catch (InvalidKeyException e) {
|
||||
Log.w("IdentityDatabase", e);
|
||||
return false;
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveIdentity(MasterSecret masterSecret, IdentityKey identityKey, String tagName) throws InvalidKeyException {
|
||||
public void saveIdentity(MasterSecret masterSecret, Recipient recipient, IdentityKey identityKey)
|
||||
{
|
||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||
String number = recipient.getNumber();
|
||||
long recipientId = DatabaseFactory.getAddressDatabase(context).getCanonicalAddress(number);
|
||||
MasterCipher masterCipher = new MasterCipher(masterSecret);
|
||||
String identityKeyString = Base64.encodeBytes(identityKey.serialize());
|
||||
String macString = Base64.encodeBytes(masterCipher.getMacFor(tagName + identityKeyString));
|
||||
String macString = Base64.encodeBytes(masterCipher.getMacFor(recipientId +
|
||||
identityKeyString));
|
||||
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(RECIPIENT, recipientId);
|
||||
contentValues.put(IDENTITY_KEY, identityKeyString);
|
||||
contentValues.put(IDENTITY_NAME, tagName);
|
||||
contentValues.put(MAC, macString);
|
||||
|
||||
long id = database.insert(TABLE_NAME, null, contentValues);
|
||||
|
||||
if (id == -1)
|
||||
throw new InvalidKeyException("Error inserting key!");
|
||||
database.replace(TABLE_NAME, null, contentValues);
|
||||
|
||||
context.getContentResolver().notifyChange(CHANGE_URI, null);
|
||||
}
|
||||
|
||||
public void deleteIdentity(String name, String keyString) {
|
||||
public void deleteIdentity(long id) {
|
||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||
String where = IDENTITY_NAME + " = ? AND " + IDENTITY_KEY + " = ?";
|
||||
String[] args = new String[] {name, keyString};
|
||||
|
||||
database.delete(TABLE_NAME, where, args);
|
||||
database.delete(TABLE_NAME, ID_WHERE, new String[] {id+""});
|
||||
|
||||
context.getContentResolver().notifyChange(CHANGE_URI, null);
|
||||
}
|
||||
|
||||
public Reader readerFor(MasterSecret masterSecret, Cursor cursor) {
|
||||
return new Reader(masterSecret, cursor);
|
||||
}
|
||||
|
||||
public class Reader {
|
||||
private final Cursor cursor;
|
||||
private final MasterCipher cipher;
|
||||
|
||||
public Reader(MasterSecret masterSecret, Cursor cursor) {
|
||||
this.cursor = cursor;
|
||||
this.cipher = new MasterCipher(masterSecret);
|
||||
}
|
||||
|
||||
public Identity getCurrent() {
|
||||
long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(RECIPIENT));
|
||||
Recipients recipients = RecipientFactory.getRecipientsForIds(context, recipientId + "", true);
|
||||
|
||||
try {
|
||||
String identityKeyString = cursor.getString(cursor.getColumnIndexOrThrow(IDENTITY_KEY));
|
||||
String mac = cursor.getString(cursor.getColumnIndexOrThrow(MAC));
|
||||
|
||||
if (!cipher.verifyMacFor(recipientId + identityKeyString, Base64.decode(mac))) {
|
||||
return new Identity(recipients, null);
|
||||
}
|
||||
|
||||
IdentityKey identityKey = new IdentityKey(Base64.decode(identityKeyString), 0);
|
||||
return new Identity(recipients, identityKey);
|
||||
} catch (IOException e) {
|
||||
Log.w("IdentityDatabase", e);
|
||||
return new Identity(recipients, null);
|
||||
} catch (InvalidKeyException e) {
|
||||
Log.w("IdentityDatabase", e);
|
||||
return new Identity(recipients, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Identity {
|
||||
private final Recipients recipients;
|
||||
private final IdentityKey identityKey;
|
||||
|
||||
public Identity(Recipients recipients, IdentityKey identityKey) {
|
||||
this.recipients = recipients;
|
||||
this.identityKey = identityKey;
|
||||
}
|
||||
|
||||
public Recipients getRecipients() {
|
||||
return recipients;
|
||||
}
|
||||
|
||||
public IdentityKey getIdentityKey() {
|
||||
return identityKey;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -647,7 +647,11 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
|
||||
cvb.add(DELIVERY_TIME, headers.getLongInteger(PduHeaders.DELIVERY_TIME));
|
||||
cvb.add(EXPIRY, headers.getLongInteger(PduHeaders.EXPIRY));
|
||||
cvb.add(MESSAGE_SIZE, headers.getLongInteger(PduHeaders.MESSAGE_SIZE));
|
||||
cvb.add(ADDRESS, headers.getEncodedStringValue(PduHeaders.FROM).getTextString());
|
||||
|
||||
if (headers.getEncodedStringValue(PduHeaders.FROM) != null)
|
||||
cvb.add(ADDRESS, headers.getEncodedStringValue(PduHeaders.FROM).getTextString());
|
||||
else
|
||||
cvb.add(ADDRESS, null);
|
||||
|
||||
return cvb.getContentValues();
|
||||
}
|
||||
|
||||
@@ -434,7 +434,14 @@ public class SmsDatabase extends Database implements MmsSmsColumns {
|
||||
|
||||
private Recipients getRecipientsFor(String address) {
|
||||
try {
|
||||
return RecipientFactory.getRecipientsFromString(context, address, false);
|
||||
Recipients recipients = RecipientFactory.getRecipientsFromString(context, address, false);
|
||||
|
||||
if (recipients == null || recipients.isEmpty()) {
|
||||
return new Recipients(new Recipient("Unknown", "Unknown", null,
|
||||
ContactPhotoFactory.getDefaultContactPhoto(context)));
|
||||
}
|
||||
|
||||
return recipients;
|
||||
} catch (RecipientFormattingException e) {
|
||||
Log.w("EncryptingSmsDatabase", e);
|
||||
return new Recipients(new Recipient("Unknown", "Unknown", null,
|
||||
|
||||
@@ -23,8 +23,6 @@ import org.thoughtcrime.securesms.crypto.IdentityKey;
|
||||
import org.thoughtcrime.securesms.crypto.InvalidKeyException;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.CanonicalAddressDatabase;
|
||||
import org.thoughtcrime.securesms.database.keys.Record;
|
||||
import org.thoughtcrime.securesms.database.keys.SessionKey;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
@@ -56,23 +54,27 @@ public class SessionRecord extends Record {
|
||||
private final MasterSecret masterSecret;
|
||||
|
||||
public SessionRecord(Context context, MasterSecret masterSecret, Recipient recipient) {
|
||||
super(context, getFileNameForRecipient(context, recipient));
|
||||
this(context, masterSecret, getRecipientId(context, recipient));
|
||||
}
|
||||
|
||||
public SessionRecord(Context context, MasterSecret masterSecret, long recipientId) {
|
||||
super(context, recipientId+"");
|
||||
this.masterSecret = masterSecret;
|
||||
this.sessionVersion = 31337;
|
||||
loadData();
|
||||
}
|
||||
|
||||
public static void delete(Context context, Recipient recipient) {
|
||||
Record.delete(context, getFileNameForRecipient(context, recipient));
|
||||
Record.delete(context, getRecipientId(context, recipient)+"");
|
||||
}
|
||||
|
||||
public static boolean hasSession(Context context, Recipient recipient) {
|
||||
Log.w("LocalKeyRecord", "Checking: " + getFileNameForRecipient(context, recipient));
|
||||
return Record.hasRecord(context, getFileNameForRecipient(context, recipient));
|
||||
Log.w("LocalKeyRecord", "Checking: " + getRecipientId(context, recipient));
|
||||
return Record.hasRecord(context, getRecipientId(context, recipient)+"");
|
||||
}
|
||||
|
||||
private static String getFileNameForRecipient(Context context, Recipient recipient) {
|
||||
return CanonicalAddressDatabase.getInstance(context).getCanonicalAddress(recipient.getNumber()) + "";
|
||||
private static long getRecipientId(Context context, Recipient recipient) {
|
||||
return CanonicalAddressDatabase.getInstance(context).getCanonicalAddress(recipient.getNumber());
|
||||
}
|
||||
|
||||
public void setSessionKey(SessionKey sessionKeyRecord) {
|
||||
@@ -116,9 +118,9 @@ public class SessionRecord extends Record {
|
||||
return this.identityKey;
|
||||
}
|
||||
|
||||
public void setVerifiedSessionKey(boolean verifiedSessionKey) {
|
||||
this.verifiedSessionKey = verifiedSessionKey;
|
||||
}
|
||||
// public void setVerifiedSessionKey(boolean verifiedSessionKey) {
|
||||
// this.verifiedSessionKey = verifiedSessionKey;
|
||||
// }
|
||||
|
||||
public boolean isVerifiedSession() {
|
||||
return this.verifiedSessionKey;
|
||||
@@ -130,8 +132,8 @@ public class SessionRecord extends Record {
|
||||
}
|
||||
|
||||
private boolean isValidVersionMarker(int versionMarker) {
|
||||
for (int i=0;i<VALID_VERSION_MARKERS.length;i++)
|
||||
if (versionMarker == VALID_VERSION_MARKERS[i])
|
||||
for (int VALID_VERSION_MARKER : VALID_VERSION_MARKERS)
|
||||
if (versionMarker == VALID_VERSION_MARKER)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -199,7 +201,7 @@ public class SessionRecord extends Record {
|
||||
|
||||
if (versionMarker >= 0X55555556) {
|
||||
readIdentityKey(in);
|
||||
this.verifiedSessionKey = (readInteger(in) == 1) ? true : false;
|
||||
this.verifiedSessionKey = (readInteger(in) == 1);
|
||||
}
|
||||
|
||||
if (in.available() != 0)
|
||||
@@ -209,7 +211,7 @@ public class SessionRecord extends Record {
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
Log.w("SessionRecord", "No session information found.");
|
||||
return;
|
||||
// XXX
|
||||
} catch (IOException ioe) {
|
||||
Log.w("keyrecord", ioe);
|
||||
// XXX
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.thoughtcrime.securesms.database.loaders;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.support.v4.content.AsyncTaskLoader;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
||||
|
||||
public class IdentityLoader extends CursorLoader {
|
||||
|
||||
private final Context context;
|
||||
|
||||
public IdentityLoader(Context context) {
|
||||
super(context);
|
||||
this.context = context.getApplicationContext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor loadInBackground() {
|
||||
return DatabaseFactory.getIdentityDatabase(context).getIdentities();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -51,7 +52,7 @@ public class AttachmentManager {
|
||||
attachmentView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
public void setImage(Uri image) throws IOException {
|
||||
public void setImage(Uri image) throws IOException, BitmapDecodingException {
|
||||
ImageSlide slide = new ImageSlide(context, image);
|
||||
slideDeck.addSlide(slide);
|
||||
thumbnail.setImageBitmap(slide.getThumbnail(345, 261));
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.widget.ImageView;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
||||
import org.thoughtcrime.securesms.util.BitmapUtil;
|
||||
import org.thoughtcrime.securesms.util.LRUCache;
|
||||
|
||||
@@ -56,7 +57,7 @@ public class ImageSlide extends Slide {
|
||||
super(context, masterSecret, part);
|
||||
}
|
||||
|
||||
public ImageSlide(Context context, Uri uri) throws IOException {
|
||||
public ImageSlide(Context context, Uri uri) throws IOException, BitmapDecodingException {
|
||||
super(context, constructPartFromUri(context, uri));
|
||||
}
|
||||
|
||||
@@ -78,6 +79,9 @@ public class ImageSlide extends Slide {
|
||||
} catch (FileNotFoundException e) {
|
||||
Log.w("ImageSlide", e);
|
||||
return BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_missing_thumbnail_picture);
|
||||
} catch (BitmapDecodingException e) {
|
||||
Log.w("ImageSlide", e);
|
||||
return BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_missing_thumbnail_picture);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +152,9 @@ public class ImageSlide extends Slide {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static PduPart constructPartFromUri(Context context, Uri uri) throws IOException {
|
||||
private static PduPart constructPartFromUri(Context context, Uri uri)
|
||||
throws IOException, BitmapDecodingException
|
||||
{
|
||||
PduPart part = new PduPart();
|
||||
byte[] data = BitmapUtil.createScaledBytes(context, uri, 640, 480, (300 * 1024) - 5000);
|
||||
|
||||
|
||||
@@ -23,16 +23,15 @@ import android.util.Log;
|
||||
import org.apache.http.HttpHost;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.StatusLine;
|
||||
import org.apache.http.client.ClientProtocolException;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
|
||||
import ws.com.google.android.mms.pdu.PduParser;
|
||||
import ws.com.google.android.mms.pdu.RetrieveConf;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import ws.com.google.android.mms.pdu.PduParser;
|
||||
import ws.com.google.android.mms.pdu.RetrieveConf;
|
||||
|
||||
public class MmsDownloadHelper extends MmsCommunication {
|
||||
|
||||
private static byte[] makeRequest(Context context, MmsConnectionParameters connectionParameters, String url)
|
||||
|
||||
@@ -30,13 +30,13 @@ import org.apache.http.entity.ByteArrayEntity;
|
||||
import org.thoughtcrime.securesms.service.MmscProcessor;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
import ws.com.google.android.mms.pdu.PduParser;
|
||||
import ws.com.google.android.mms.pdu.SendConf;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import ws.com.google.android.mms.pdu.PduParser;
|
||||
import ws.com.google.android.mms.pdu.SendConf;
|
||||
|
||||
public class MmsSendHelper extends MmsCommunication {
|
||||
|
||||
private static byte[] makePost(Context context, MmsConnectionParameters parameters, byte[] mms) throws ClientProtocolException, IOException {
|
||||
|
||||
@@ -19,8 +19,12 @@ public class PartParser {
|
||||
String partText;
|
||||
|
||||
try {
|
||||
partText = new String(body.getPart(i).getData(),
|
||||
CharacterSets.getMimeName(body.getPart(i).getCharset()));
|
||||
String characterSet = CharacterSets.getMimeName(body.getPart(i).getCharset());
|
||||
|
||||
if (characterSet.equals(CharacterSets.MIMENAME_ANY_CHARSET))
|
||||
characterSet = CharacterSets.MIMENAME_ISO_8859_1;
|
||||
|
||||
partText = new String(body.getPart(i).getData(), characterSet);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.w("PartParser", e);
|
||||
partText = "Unsupported Encoding!";
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.thoughtcrime.securesms.notifications;
|
||||
|
||||
import android.app.NotificationManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
|
||||
public class MarkReadReceiver extends BroadcastReceiver {
|
||||
|
||||
public static final String CLEAR_ACTION = "org.thoughtcrime.securesms.notifications.CLEAR";
|
||||
|
||||
@Override
|
||||
public void onReceive(final Context context, Intent intent) {
|
||||
if (!intent.getAction().equals(CLEAR_ACTION))
|
||||
return;
|
||||
|
||||
final long[] threadIds = intent.getLongArrayExtra("thread_ids");
|
||||
final MasterSecret masterSecret = intent.getParcelableExtra("master_secret");
|
||||
|
||||
if (threadIds != null && masterSecret != null) {
|
||||
Log.w("MarkReadReceiver", "threadIds length: " + threadIds.length);
|
||||
|
||||
((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE))
|
||||
.cancel(MessageNotifier.NOTIFICATION_ID);
|
||||
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
for (long threadId : threadIds) {
|
||||
Log.w("MarkReadReceiver", "Marking as read: " + threadId);
|
||||
DatabaseFactory.getThreadDatabase(context).setRead(threadId);
|
||||
}
|
||||
|
||||
MessageNotifier.updateNotification(context, masterSecret);
|
||||
return null;
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,9 +136,9 @@ public class MessageNotifier {
|
||||
NotificationState notificationState = constructNotificationState(context, masterSecret, cursor);
|
||||
|
||||
if (notificationState.hasMultipleThreads()) {
|
||||
sendMultipleThreadNotification(context, notificationState, signal);
|
||||
sendMultipleThreadNotification(context, masterSecret, notificationState, signal);
|
||||
} else {
|
||||
sendSingleThreadNotification(context, notificationState, signal);
|
||||
sendSingleThreadNotification(context, masterSecret, notificationState, signal);
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
@@ -147,6 +147,7 @@ public class MessageNotifier {
|
||||
}
|
||||
|
||||
private static void sendSingleThreadNotification(Context context,
|
||||
MasterSecret masterSecret,
|
||||
NotificationState notificationState,
|
||||
boolean signal)
|
||||
{
|
||||
@@ -160,6 +161,11 @@ public class MessageNotifier {
|
||||
builder.setContentText(notifications.get(0).getText());
|
||||
builder.setContentIntent(notifications.get(0).getPendingIntent(context));
|
||||
|
||||
if (masterSecret != null) {
|
||||
builder.addAction(R.drawable.check, context.getString(R.string.MessageNotifier_mark_as_read),
|
||||
notificationState.getMarkAsReadIntent(context, masterSecret));
|
||||
}
|
||||
|
||||
SpannableStringBuilder content = new SpannableStringBuilder();
|
||||
|
||||
for (NotificationItem item : notifications) {
|
||||
@@ -180,6 +186,7 @@ public class MessageNotifier {
|
||||
}
|
||||
|
||||
private static void sendMultipleThreadNotification(Context context,
|
||||
MasterSecret masterSecret,
|
||||
NotificationState notificationState,
|
||||
boolean signal)
|
||||
{
|
||||
@@ -195,6 +202,11 @@ public class MessageNotifier {
|
||||
notifications.get(0).getIndividualRecipientName()));
|
||||
builder.setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, RoutingActivity.class), 0));
|
||||
|
||||
if (masterSecret != null) {
|
||||
builder.addAction(R.drawable.check, context.getString(R.string.MessageNotifier_mark_all_as_read),
|
||||
notificationState.getMarkAsReadIntent(context, masterSecret));
|
||||
}
|
||||
|
||||
InboxStyle style = new InboxStyle();
|
||||
|
||||
for (NotificationItem item : notifications) {
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
package org.thoughtcrime.securesms.notifications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.util.Log;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
@@ -36,4 +42,26 @@ public class NotificationState {
|
||||
return notifications.get(0).getIndividualRecipient().getContactPhoto();
|
||||
}
|
||||
|
||||
public PendingIntent getMarkAsReadIntent(Context context, MasterSecret masterSecret) {
|
||||
long[] threadArray = new long[threads.size()];
|
||||
int index = 0;
|
||||
|
||||
for (long thread : threads) {
|
||||
Log.w("NotificationState", "Added thread: " + thread);
|
||||
threadArray[index++] = thread;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(MarkReadReceiver.CLEAR_ACTION);
|
||||
intent.putExtra("thread_ids", threadArray);
|
||||
intent.putExtra("master_secret", masterSecret);
|
||||
intent.setPackage(context.getPackageName());
|
||||
|
||||
// XXX : This is an Android bug. If we don't pull off the extra
|
||||
// once before handing off the PendingIntent, the array will be
|
||||
// truncated to one element when the PendingIntent fires. Thanks guys!
|
||||
Log.w("NotificationState", "Pending array off intent length: " +
|
||||
intent.getLongArrayExtra("thread_ids").length);
|
||||
|
||||
return PendingIntent.getBroadcast(context, 0, intent, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,11 +64,11 @@ public class Recipients implements Parcelable {
|
||||
this.recipients.addAll(recipients.getRecipientsList());
|
||||
}
|
||||
|
||||
public Recipients truncateToSingleRecipient() {
|
||||
assert(!this.recipients.isEmpty());
|
||||
this.recipients = this.recipients.subList(0, 1);
|
||||
return this;
|
||||
}
|
||||
// public Recipients truncateToSingleRecipient() {
|
||||
// assert(!this.recipients.isEmpty());
|
||||
// this.recipients = this.recipients.subList(0, 1);
|
||||
// return this;
|
||||
// }
|
||||
|
||||
public void addListener(RecipientModifiedListener listener) {
|
||||
for (Recipient recipient : recipients) {
|
||||
|
||||
@@ -209,20 +209,21 @@ public class MmsSender extends MmscProcessor {
|
||||
EncodedStringValue[] encodedRecipient = pdu.getTo();
|
||||
String recipient = encodedRecipient[0].getString();
|
||||
byte[] pduBytes = new PduComposer(context, pdu).make();
|
||||
byte[] encryptedPdu = getEncryptedPdu(masterSecret, recipient, pduBytes);
|
||||
Log.w("MmsSendeR", "Got encrypted bytes: " + encryptedPdu.length);
|
||||
PduBody body = new PduBody();
|
||||
PduPart part = new PduPart();
|
||||
byte[] encryptedPduBytes = getEncryptedPdu(masterSecret, recipient, pduBytes);
|
||||
|
||||
PduBody body = new PduBody();
|
||||
PduPart part = new PduPart();
|
||||
SendReq encryptedPdu = new SendReq(pdu.getPduHeaders(), body);
|
||||
|
||||
part.setContentId((System.currentTimeMillis()+"").getBytes());
|
||||
part.setContentType(ContentType.TEXT_PLAIN.getBytes());
|
||||
part.setName((System.currentTimeMillis()+"").getBytes());
|
||||
part.setData(encryptedPdu);
|
||||
part.setData(encryptedPduBytes);
|
||||
body.addPart(part);
|
||||
pdu.setSubject(new EncodedStringValue(WirePrefix.calculateEncryptedMmsSubject()));
|
||||
pdu.setBody(body);
|
||||
encryptedPdu.setSubject(new EncodedStringValue(WirePrefix.calculateEncryptedMmsSubject()));
|
||||
encryptedPdu.setBody(body);
|
||||
|
||||
return pdu;
|
||||
return encryptedPdu;
|
||||
}
|
||||
|
||||
private void scheduleSendWithMmsRadioAndProxy(SendItem item) {
|
||||
|
||||
@@ -108,7 +108,7 @@ public class SmsReceiver {
|
||||
|
||||
if (processor.isStale(keyExchangeMessage)) {
|
||||
message.setStale(true);
|
||||
} else if (!processor.hasCompletedSession() || processor.hasSameSessionIdentity(keyExchangeMessage)) {
|
||||
} else if (processor.isTrusted(keyExchangeMessage)) {
|
||||
message.setProcessed(true);
|
||||
|
||||
Pair<Long, Long> messageAndThreadId = storeStandardMessage(masterSecret, message);
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
public class BitmapDecodingException extends Throwable {
|
||||
public BitmapDecodingException(String s) {
|
||||
super(s);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ public class BitmapUtil {
|
||||
|
||||
public static byte[] createScaledBytes(Context context, Uri uri, int maxWidth,
|
||||
int maxHeight, int maxSize)
|
||||
throws IOException
|
||||
throws IOException, BitmapDecodingException
|
||||
{
|
||||
InputStream measure = context.getContentResolver().openInputStream(uri);
|
||||
InputStream data = context.getContentResolver().openInputStream(uri);
|
||||
@@ -44,6 +44,7 @@ public class BitmapUtil {
|
||||
|
||||
public static Bitmap createScaledBitmap(InputStream measure, InputStream data,
|
||||
int maxWidth, int maxHeight)
|
||||
throws BitmapDecodingException
|
||||
{
|
||||
BitmapFactory.Options options = getImageDimensions(measure);
|
||||
int imageWidth = options.outWidth;
|
||||
@@ -62,6 +63,10 @@ public class BitmapUtil {
|
||||
|
||||
Bitmap roughThumbnail = BitmapFactory.decodeStream(data, null, options);
|
||||
|
||||
if (roughThumbnail == null) {
|
||||
throw new BitmapDecodingException("Decoded stream was null.");
|
||||
}
|
||||
|
||||
if (imageWidth > maxWidth || imageHeight > maxHeight) {
|
||||
Log.w("BitmapUtil", "Scaling to max width and height: " + maxWidth + "," + maxHeight);
|
||||
Bitmap scaledThumbnail = Bitmap.createScaledBitmap(roughThumbnail, maxWidth, maxHeight, true);
|
||||
|
||||