diff options
Diffstat (limited to 'ui/src/main/res')
24 files changed, 563 insertions, 92 deletions
diff --git a/ui/src/main/res/drawable/list_item_background.xml b/ui/src/main/res/drawable/list_item_background.xml index 3a77b524..16714e7b 100644 --- a/ui/src/main/res/drawable/list_item_background.xml +++ b/ui/src/main/res/drawable/list_item_background.xml @@ -8,8 +8,7 @@ app:state_multiselected="true"> <color android:color="?attr/colorSurfaceVariant" /> </item> - <item - android:state_activated="true"> + <item android:state_activated="true"> <color android:color="?attr/colorControlHighlight" /> </item> </selector> diff --git a/ui/src/main/res/layout/config_naming_dialog_fragment.xml b/ui/src/main/res/layout/config_naming_dialog_fragment.xml index 88deb976..63d3141d 100644 --- a/ui/src/main/res/layout/config_naming_dialog_fragment.xml +++ b/ui/src/main/res/layout/config_naming_dialog_fragment.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <data> + <import type="com.wireguard.android.widget.NameInputFilter" /> </data> @@ -24,7 +25,8 @@ android:imeOptions="actionDone" android:inputType="textNoSuggestions|textVisiblePassword" app:filter="@{NameInputFilter.newInstance()}"> - <requestFocus/> + + <requestFocus /> </com.google.android.material.textfield.TextInputEditText> </com.google.android.material.textfield.TextInputLayout> diff --git a/ui/src/main/res/layout/http_proxy_menu_item.xml b/ui/src/main/res/layout/http_proxy_menu_item.xml new file mode 100644 index 00000000..8ad5c026 --- /dev/null +++ b/ui/src/main/res/layout/http_proxy_menu_item.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="16dp" + android:ellipsize="end" + android:maxLines="1" +/> diff --git a/ui/src/main/res/layout/tunnel_detail_fragment.xml b/ui/src/main/res/layout/tunnel_detail_fragment.xml index 332df04a..425b364d 100644 --- a/ui/src/main/res/layout/tunnel_detail_fragment.xml +++ b/ui/src/main/res/layout/tunnel_detail_fragment.xml @@ -5,6 +5,8 @@ <data> + <import type="android.os.Build" /> + <import type="com.wireguard.android.backend.Tunnel.State" /> <import type="com.wireguard.android.util.ClipboardUtils" /> @@ -19,7 +21,7 @@ <variable name="config" - type="com.wireguard.config.Config" /> + type="com.wireguard.android.viewmodel.ConfigDetail" /> </data> <ScrollView @@ -116,7 +118,7 @@ android:nextFocusForward="@id/addresses_text" android:onClick="@{ClipboardUtils::copyTextView}" android:singleLine="true" - android:text="@{config.interface.keyPair.publicKey.toBase64}" + android:text="@{config.config.interface.keyPair.publicKey.toBase64}" android:textAppearance="?attr/textAppearanceBodyLarge" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/public_key_label" @@ -129,7 +131,7 @@ android:layout_marginTop="8dp" android:labelFor="@+id/addresses_text" android:text="@string/addresses" - android:visibility="@{config.interface.addresses.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.addresses.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/public_key_text" /> @@ -139,14 +141,41 @@ android:layout_height="wrap_content" android:contentDescription="@string/addresses" android:nextFocusUp="@id/public_key_text" + android:nextFocusDown="@id/dynamic_addresses_text" + android:nextFocusForward="@id/dynamic_addresses_text" + android:onClick="@{ClipboardUtils::copyTextView}" + android:text="@{config.config.interface.addresses}" + android:textAppearance="?attr/textAppearanceBodyLarge" + android:visibility="@{config.config.interface.addresses.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/addresses_label" + tools:text="fc00:bbbb:bbbb:bb11::3:368b/128" /> + + <TextView + android:id="@+id/dynamic_addresses_label" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:labelFor="@+id/dynamic_addresses_text" + android:text="@string/dynamic_addresses" + android:visibility="@{tunnel.dhcp == null ? android.view.View.GONE : android.view.View.VISIBLE}" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/addresses_text" /> + + <TextView + android:id="@+id/dynamic_addresses_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:contentDescription="@string/dynamic_addresses" + android:nextFocusUp="@id/addresses_text" android:nextFocusDown="@id/dns_servers_text" android:nextFocusForward="@id/dns_servers_text" android:onClick="@{ClipboardUtils::copyTextView}" - android:text="@{config.interface.addresses}" + android:text="@{tunnel.dhcp.addresses}" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{config.interface.addresses.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{tunnel.dhcp == null ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/addresses_label" + app:layout_constraintTop_toBottomOf="@+id/dynamic_addresses_label" tools:text="fc00:bbbb:bbbb:bb11::3:368b/128" /> <TextView @@ -156,22 +185,22 @@ android:layout_marginTop="8dp" android:labelFor="@+id/dns_servers_text" android:text="@string/dns_servers" - android:visibility="@{config.interface.dnsServers.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.dnsServers.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/addresses_text" /> + app:layout_constraintTop_toBottomOf="@id/dynamic_addresses_text" /> <TextView android:id="@+id/dns_servers_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/dns_servers" - android:nextFocusUp="@id/addresses_text" + android:nextFocusUp="@id/dynamic_addresses_text" android:nextFocusDown="@id/dns_search_domains_text" android:nextFocusForward="@id/dns_search_domains_text" android:onClick="@{ClipboardUtils::copyTextView}" - android:text="@{config.interface.dnsServers}" + android:text="@{config.config.interface.dnsServers}" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{config.interface.dnsServers.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.dnsServers.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/dns_servers_label" tools:text="8.8.8.8, 8.8.4.4" /> @@ -183,7 +212,7 @@ android:layout_marginTop="8dp" android:labelFor="@+id/dns_search_domain_text" android:text="@string/dns_search_domains" - android:visibility="@{config.interface.dnsSearchDomains.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.dnsSearchDomains.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/dns_servers_text" /> @@ -196,9 +225,9 @@ android:nextFocusDown="@id/listen_port_text" android:nextFocusForward="@id/listen_port_text" android:onClick="@{ClipboardUtils::copyTextView}" - android:text="@{config.interface.dnsSearchDomains}" + android:text="@{config.config.interface.dnsSearchDomains}" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{config.interface.dnsSearchDomains.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.dnsSearchDomains.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/dns_search_domains_label" tools:text="zx2c4.com" /> @@ -210,7 +239,7 @@ android:layout_marginTop="8dp" android:labelFor="@+id/listen_port_text" android:text="@string/listen_port" - android:visibility="@{!config.interface.listenPort.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{!config.config.interface.listenPort.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintEnd_toStartOf="@id/mtu_label" app:layout_constraintHorizontal_weight="0.5" app:layout_constraintStart_toStartOf="parent" @@ -223,12 +252,12 @@ android:contentDescription="@string/listen_port" android:nextFocusRight="@id/mtu_text" android:nextFocusUp="@id/dns_search_domains_text" - android:nextFocusDown="@id/applications_text" + android:nextFocusDown="@id/http_proxy_text" android:nextFocusForward="@id/mtu_text" android:onClick="@{ClipboardUtils::copyTextView}" - android:text="@{config.interface.listenPort}" + android:text="@{config.config.interface.listenPort}" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{!config.interface.listenPort.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{!config.config.interface.listenPort.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintEnd_toStartOf="@id/mtu_label" app:layout_constraintHorizontal_weight="0.5" app:layout_constraintStart_toStartOf="parent" @@ -242,7 +271,7 @@ android:layout_marginTop="8dp" android:labelFor="@+id/mtu_text" android:text="@string/mtu" - android:visibility="@{!config.interface.mtu.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{!config.config.interface.mtu.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_weight="0.5" app:layout_constraintLeft_toRightOf="@id/listen_port_label" @@ -256,11 +285,11 @@ android:contentDescription="@string/mtu" android:nextFocusLeft="@id/listen_port_text" android:nextFocusUp="@id/dns_servers_text" - android:nextFocusForward="@id/applications_text" + android:nextFocusForward="@id/http_proxy_text" android:onClick="@{ClipboardUtils::copyTextView}" - android:text="@{config.interface.mtu}" + android:text="@{config.config.interface.mtu}" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{!config.interface.mtu.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{!config.config.interface.mtu.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_weight="0.5" app:layout_constraintStart_toEndOf="@id/listen_port_label" @@ -276,15 +305,42 @@ app:constraint_referenced_ids="listen_port_text,mtu_text" /> <TextView + android:id="@+id/http_proxy_label" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:labelFor="@+id/http_proxy_text" + android:text="@string/http_proxy" + android:visibility="@{(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || !config.config.interface.httpProxy.isPresent()) ? android.view.View.GONE : android.view.View.VISIBLE}" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/listen_port_mtu_barrier" /> + + <TextView + android:id="@+id/http_proxy_text" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:contentDescription="@string/http_proxy" + android:nextFocusUp="@id/listen_port_text" + android:nextFocusDown="@id/applications_text" + android:nextFocusForward="@id/applications_text" + android:onClick="@{ClipboardUtils::copyTextView}" + android:text="@{config.config.interface.httpProxy}" + android:textAppearance="?attr/textAppearanceBodyLarge" + android:visibility="@{(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || !config.config.interface.httpProxy.isPresent()) ? android.view.View.GONE : android.view.View.VISIBLE}" + app:layout_constraintTop_toBottomOf="@id/http_proxy_label" + app:layout_constraintStart_toStartOf="parent" + tools:text="http://example.com:8888" /> + + <TextView android:id="@+id/applications_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:labelFor="@+id/applications_text" android:text="@string/applications" - android:visibility="@{config.interface.includedApplications.isEmpty() && config.interface.excludedApplications.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.includedApplications.isEmpty() && config.config.interface.excludedApplications.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/listen_port_mtu_barrier" /> + app:layout_constraintTop_toBottomOf="@+id/http_proxy_text" /> <TextView android:id="@+id/applications_text" @@ -295,9 +351,9 @@ android:nextFocusDown="@id/peers_layout" android:nextFocusForward="@id/peers_layout" android:onClick="@{ClipboardUtils::copyTextView}" - android:text="@{config.interface.includedApplications.isEmpty() ? @plurals/n_excluded_applications(config.interface.excludedApplications.size(), config.interface.excludedApplications.size()) : @plurals/n_included_applications(config.interface.includedApplications.size(), config.interface.includedApplications.size())}" + android:text="@{config.config.interface.includedApplications.isEmpty() ? @plurals/n_excluded_applications(config.config.interface.excludedApplications.size(), config.config.interface.excludedApplications.size()) : @plurals/n_included_applications(config.config.interface.includedApplications.size(), config.config.interface.includedApplications.size())}" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{config.interface.includedApplications.isEmpty() && config.interface.excludedApplications.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{config.config.interface.includedApplications.isEmpty() && config.config.interface.excludedApplications.isEmpty() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/applications_label" tools:text="8 excluded" /> @@ -311,6 +367,7 @@ android:layout_marginTop="8dp" android:divider="@null" android:orientation="vertical" + app:fragment="@{fragment}" app:items="@{config.peers}" app:layout="@{@layout/tunnel_detail_peer}" app:layout_constraintStart_toStartOf="parent" @@ -318,4 +375,4 @@ tools:ignore="UselessLeaf" /> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> -</layout>
\ No newline at end of file +</layout> diff --git a/ui/src/main/res/layout/tunnel_detail_peer.xml b/ui/src/main/res/layout/tunnel_detail_peer.xml index 25081cea..89bb85ec 100644 --- a/ui/src/main/res/layout/tunnel_detail_peer.xml +++ b/ui/src/main/res/layout/tunnel_detail_peer.xml @@ -9,7 +9,7 @@ <variable name="item" - type="com.wireguard.config.Peer" /> + type="com.wireguard.android.viewmodel.PeerDetail" /> </data> <com.google.android.material.card.MaterialCardView @@ -64,7 +64,7 @@ android:layout_marginTop="8dp" android:labelFor="@+id/pre_shared_key_text" android:text="@string/pre_shared_key" - android:visibility="@{!item.preSharedKey.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{!item.peer.preSharedKey.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/public_key_text" /> @@ -81,7 +81,7 @@ android:singleLine="true" android:text="@string/pre_shared_key_enabled" android:textAppearance="?attr/textAppearanceBodyLarge" - android:visibility="@{!item.preSharedKey.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" + android:visibility="@{!item.peer.preSharedKey.isPresent() ? android.view.View.GONE : android.view.View.VISIBLE}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/pre_shared_key_label" tools:text="8VyS8W8XeMcBWfKp1GuG3/fZlnUQFkqMNbrdmZtVQIM=" /> diff --git a/ui/src/main/res/layout/tunnel_editor_fragment.xml b/ui/src/main/res/layout/tunnel_editor_fragment.xml index 0350486b..42222399 100644 --- a/ui/src/main/res/layout/tunnel_editor_fragment.xml +++ b/ui/src/main/res/layout/tunnel_editor_fragment.xml @@ -5,6 +5,8 @@ <data> + <import type="android.os.Build" /> + <import type="com.wireguard.android.util.ClipboardUtils" /> <import type="com.wireguard.android.widget.KeyInputFilter" /> @@ -210,7 +212,7 @@ android:imeOptions="actionNext" android:inputType="textNoSuggestions|textVisiblePassword" android:nextFocusUp="@id/addresses_label_text" - android:nextFocusDown="@id/set_excluded_applications" + android:nextFocusDown="@id/http_proxy_hostname_text" android:nextFocusForward="@id/mtu_text" android:text="@={config.interface.dnsServers}" /> </com.google.android.material.textfield.TextInputLayout> @@ -235,19 +237,112 @@ android:imeOptions="actionDone" android:inputType="number" android:nextFocusUp="@id/listen_port_text" - android:nextFocusDown="@id/set_excluded_applications" - android:nextFocusForward="@id/set_excluded_applications" + android:nextFocusDown="@id/http_proxy_hostname_text" + android:nextFocusForward="@id/http_proxy_hostname_text" android:text="@={config.interface.mtu}" android:textAlignment="center" /> </com.google.android.material.textfield.TextInputLayout> + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/http_proxy_menu" + style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="4dp" + android:hint="@string/http_proxy" + app:expandedHintEnabled="false" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/dns_servers_label_layout"> + + <AutoCompleteTextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:inputType="none" + android:text="@={config.interface.httpProxyMenu}" + /> + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/http_proxy_hostname_label_layout" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="4dp" + android:hint="@string/http_proxy_hostname" + android:visibility="@{config.interface.httpProxyManualVisibility}" + app:layout_constraintEnd_toStartOf="@id/http_proxy_port_label_layout" + app:layout_constraintHorizontal_chainStyle="spread" + app:layout_constraintHorizontal_weight="0.7" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/http_proxy_menu"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/http_proxy_hostname_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionNext" + android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/mtu_text" + android:nextFocusDown="@id/set_excluded_applications" + android:nextFocusForward="@id/http_proxy_port_text" + android:text="@={config.interface.httpProxyHostname}" /> + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/http_proxy_port_label_layout" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="4dp" + android:hint="@string/http_proxy_port" + android:visibility="@{config.interface.httpProxyManualVisibility}" + app:expandedHintEnabled="false" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_weight="0.3" + app:layout_constraintStart_toEndOf="@id/http_proxy_hostname_label_layout" + app:layout_constraintTop_toBottomOf="@id/http_proxy_menu"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/http_proxy_port_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionDone" + android:nextFocusUp="@id/mtu_text" + android:nextFocusDown="@id/http_proxy_pac_label_layout" + android:nextFocusForward="@id/http_proxy_pac_label_layout" + android:text="@={config.interface.httpProxyPort}" + android:textAlignment="center" /> + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/http_proxy_pac_label_layout" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="4dp" + android:hint="@string/http_proxy_pac" + android:visibility="@{config.interface.httpProxyPacVisibility}" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/http_proxy_hostname_label_layout"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/http_proxy_pac_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionNext" + android:inputType="textNoSuggestions|textVisiblePassword" + android:nextFocusUp="@id/http_proxy_hostname_text" + android:nextFocusDown="@id/set_excluded_applications" + android:nextFocusForward="@id/set_excluded_applications" + android:text="@={config.interface.httpProxyPac}" /> + </com.google.android.material.textfield.TextInputLayout> + <com.google.android.material.button.MaterialButton android:id="@+id/set_excluded_applications" style="@style/Widget.Material3.Button.TextButton" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="4dp" - android:nextFocusUp="@id/dns_servers_text" + android:nextFocusUp="@id/http_proxy_hostname_text" android:nextFocusDown="@id/peers_layout" android:nextFocusForward="@id/peers_layout" android:onClick="@{fragment::onRequestSetExcludedIncludedApplications}" @@ -256,7 +351,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/mtu_label_layout" + app:layout_constraintTop_toBottomOf="@id/http_proxy_pac_label_layout" app:rippleColor="?attr/colorSecondary" tools:text="4 excluded applications" /> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/ui/src/main/res/layout/tunnel_list_fragment.xml b/ui/src/main/res/layout/tunnel_list_fragment.xml index 8fc5d523..2ee2ff38 100644 --- a/ui/src/main/res/layout/tunnel_list_fragment.xml +++ b/ui/src/main/res/layout/tunnel_list_fragment.xml @@ -60,11 +60,11 @@ android:src="@mipmap/ic_launcher" /> <TextView - android:layout_marginStart="@dimen/tunnel_list_placeholder_margin" - android:layout_marginEnd="@dimen/tunnel_list_placeholder_margin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" + android:layout_marginStart="@dimen/tunnel_list_placeholder_margin" + android:layout_marginEnd="@dimen/tunnel_list_placeholder_margin" android:text="@string/tunnel_list_placeholder" android:textSize="20sp" /> </LinearLayout> diff --git a/ui/src/main/res/resources.properties b/ui/src/main/res/resources.properties new file mode 100644 index 00000000..467b3efe --- /dev/null +++ b/ui/src/main/res/resources.properties @@ -0,0 +1 @@ +unqualifiedResLocale=en-US diff --git a/ui/src/main/res/values-de/strings.xml b/ui/src/main/res/values-de/strings.xml index 696fde62..5dfb06a0 100644 --- a/ui/src/main/res/values-de/strings.xml +++ b/ui/src/main/res/values-de/strings.xml @@ -119,6 +119,7 @@ <string name="error_down">Fehler beim Abschalten des Tunnels: %s</string> <string name="error_fetching_apps">Fehler beim Abrufen der App-Liste: %s</string> <string name="error_root">Bitte root-Zugriff anfordern und erneut versuchen</string> + <string name="error_prepare">Fehler beim Vorbereiten des Tunnels: %s</string> <string name="error_up">Fehler beim Starten des Tunnels: %s</string> <string name="exclude_private_ips">Private IPs ausschließen</string> <string name="generate_new_private_key">Neuen privaten Schlüssel generieren</string> @@ -138,6 +139,8 @@ <string name="key_length_explanation_base64">: WireGuard base64-Schlüssel müssen 44 Zeichen enthalten (32 Bytes)</string> <string name="key_length_explanation_binary">: WireGuard-Schlüssel müssen 32 Bytes groß sein</string> <string name="key_length_explanation_hex">: WireGuard Hex-Schlüssel müssen 64 Zeichen (32 Bytes) groß sein</string> + <string name="latest_handshake">Letzter Handshake</string> + <string name="latest_handshake_ago">vor %s</string> <string name="listen_port">Eingangs-Port</string> <string name="log_export_error">Konnte Protokoll nicht exportieren: %s</string> <string name="log_export_subject">WireGuard Android Protokolldatei</string> @@ -181,6 +184,10 @@ <string name="private_key">Privater Schlüssel</string> <string name="public_key">Öffentlicher Schlüssel</string> <string name="qr_code_hint">Tipp: Mit `qrencode -t ansiutf8 < tunnel.conf` generieren.</string> + <string name="quick_settings_tile_add_title">Kachel zu Schnelleinstellungen hinzufügen</string> + <string name="quick_settings_tile_add_summary">Die Verknüpfung schaltet den letzten Tunnel um</string> + <string name="quick_settings_tile_add_failure">Verknüpfung kann nicht hinzugefügt werden: Fehler %d</string> + <string name="quick_settings_tile_action">Tunnel umschalten</string> <string name="restore_on_boot_summary_off">Aktivierte Tunnel beim Systemstart nicht automatisch starten</string> <string name="restore_on_boot_summary_on">Aktivierte Tunnel beim Systemstart automatisch wieder starten</string> <string name="restore_on_boot_title">Beim Neustart wiederherstellen</string> @@ -216,6 +223,7 @@ <string name="tunnel_create_success">Tunnel „%s “ erfolgreich erstellt</string> <string name="tunnel_error_already_exists">Tunnel „%s“ existiert bereits</string> <string name="tunnel_error_invalid_name">Ungültiger Name</string> + <string name="tunnel_list_placeholder">Füge einen Tunnel mit der Schaltfläche unten hinzu</string> <string name="tunnel_name">Tunnelname</string> <string name="tunnel_on_error">Tunnel kann nicht eingeschaltet werden (wgTurnOn gab %d zurück)</string> <string name="tunnel_dns_failure">DNS-Hostname kann nicht aufgelöst werden: „%s“</string> @@ -224,6 +232,16 @@ <string name="type_name_go_userspace">Go userspace</string> <string name="type_name_kernel_module">Kernelmodul</string> <string name="unknown_error">Unbekannter Fehler</string> + <string name="updater_avalable">Ein Anwendungsupdate ist verfügbar. Bitte jetzt aktualisieren.</string> + <string name="updater_action">Download & Update</string> + <string name="updater_rechecking">Update-Metadaten abrufen…</string> + <string name="updater_download_progress">Update wird heruntergeladen: %1$s / %2$s (%3$.2f%%)</string> + <string name="updater_download_progress_nototal">Update wird heruntergeladen: %s</string> + <string name="updater_installing">Installiere Update…</string> + <string name="updater_failure">Fehler beim Aktualisieren: %s. Versuche es in Kürze erneut…</string> + <string name="updater_corrupt_title">Anwendung beschädigt</string> + <string name="updater_corrupt_message">Diese Anwendung ist beschädigt. Bitte laden Sie die APK erneut von der unten verlinkten Website herunter. Deinstallieren Sie danach diese Anwendung und installieren Sie sie mit der heruntergeladenen APK neu.</string> + <string name="updater_corrupt_navigate">Webseite öffnen</string> <string name="version_summary">%1$s backend %2$s</string> <string name="version_summary_checking">Überprüfe %s Backend-Version</string> <string name="version_summary_unknown">Unbekannte %s Version</string> diff --git a/ui/src/main/res/values-et-rEE/strings.xml b/ui/src/main/res/values-et-rEE/strings.xml index 99d1f7bc..692a0b8a 100644 --- a/ui/src/main/res/values-et-rEE/strings.xml +++ b/ui/src/main/res/values-et-rEE/strings.xml @@ -229,6 +229,13 @@ Aitäh veelkord sinu panuse eest.</string> <string name="type_name_go_userspace">Go kasutajamaa</string> <string name="type_name_kernel_module">Tuumamoodul</string> <string name="unknown_error">Tundmatu viga</string> + <string name="updater_avalable">Rakenduse uuendus on saadaval. Palun uuenda nüüd.</string> + <string name="updater_action">Laadi alla ja uuenda</string> + <string name="updater_rechecking">Uuenduse andmete laadimine…</string> + <string name="updater_download_progress">Uuenduse allalaadimine: %1$s / %2$s (%3$.2f%%)</string> + <string name="updater_download_progress_nototal">Uuenduse allalaadimine: %s</string> + <string name="updater_installing">Uuenduse paigaldamine…</string> + <string name="updater_failure">Uuendamine ebaõnnestus: %s. Uus katse hetke pärast…</string> <string name="version_summary">%1$s taustsüsteem %2$s</string> <string name="version_summary_checking">Kontrollin %s taustsüsteemi versiooni</string> <string name="version_summary_unknown">Tundmatu %s versioon</string> diff --git a/ui/src/main/res/values-fr/strings.xml b/ui/src/main/res/values-fr/strings.xml index 225e0770..d4d4b95f 100644 --- a/ui/src/main/res/values-fr/strings.xml +++ b/ui/src/main/res/values-fr/strings.xml @@ -6,7 +6,7 @@ </plurals> <plurals name="delete_success"> <item quantity="one">Suppression réussie du tunnel %d</item> - <item quantity="other">Supprimé avec succès %d tunnels</item> + <item quantity="other">%d tunnels supprimés avec succès</item> </plurals> <plurals name="delete_title"> <item quantity="one">%d tunnel sélectionné</item> @@ -85,16 +85,16 @@ <string name="config_delete_error">Impossible de supprimer le fichier de configuration %s</string> <string name="config_exists_error">La configuration de « %s » existe déjà</string> <string name="config_file_exists_error">Le fichier de configuration « %s » existe déjà</string> - <string name="config_not_found_error">Fichier de configuration «%s» introuvable</string> - <string name="config_rename_error">Impossible de renommer le fichier de configuration «%s»</string> - <string name="config_save_error">Impossible d’enregistrer la configuration pour «%1$s» : %2$s</string> - <string name="config_save_success">Configuration enregistrée avec succès pour “%s”</string> + <string name="config_not_found_error">Fichier de configuration « %s » introuvable</string> + <string name="config_rename_error">Impossible de renommer le fichier de configuration « %s »</string> + <string name="config_save_error">Impossible d’enregistrer la configuration pour « %1$s » : %2$s</string> + <string name="config_save_success">Configuration enregistrée avec succès pour « %s »</string> <string name="create_activity_title">Créer un tunnel WireGuard</string> <string name="create_bin_dir_error">Impossible de créer le répertoire binaire local</string> <string name="create_downloads_file_error">Impossible de créer le fichier dans le répertoire des téléchargements</string> <string name="create_empty">Créer à partir de zéro</string> <string name="create_from_file">Importer depuis un fichier ou une archive</string> - <string name="create_from_qr_code">Créer avec un scan de QR code</string> + <string name="create_from_qr_code">Importer depuis un QR code</string> <string name="create_output_dir_error">Impossible de créer le répertoire de sortie</string> <string name="create_temp_dir_error">Impossible de créer le répertoire temporaire local</string> <string name="create_tunnel">Créer un tunnel</string> @@ -109,6 +109,7 @@ <string name="tv_add_tunnel_get_started">Ajouter un tunnel pour commencer</string> <string name="donate_title">♥ Faire un don au projet WireGuard</string> <string name="donate_summary">Chaque contribution aide</string> + <string name="donate_google_play_disappointment">Merci de votre soutien au projet WireGuard !\n\nMalheureusement, en raisons des politiques de Google, nous ne pouvons pas vous rediriger vers la page vous permettant de faire un don. Heureusement, vous pouvez le trouver par vous-même !\n\nMerci encore pour votre soutien.</string> <string name="disable_config_export_title">Désactiver l\'export de configuration</string> <string name="disable_config_export_description">La désactivation de l\'export de configuration rend les clés privées moins accessibles</string> <string name="dns_servers">Serveurs DNS</string> @@ -118,6 +119,7 @@ <string name="error_down">Erreur lors de la désactivation du tunnel : %s</string> <string name="error_fetching_apps">Erreur lors de la récupération de la liste d\'applications : %s</string> <string name="error_root">Veuillez obtenir l\'accès root et essayez à nouveau</string> + <string name="error_prepare">Erreur lors de la préparation du tunnel : %s</string> <string name="error_up">Erreur lors de la mise en place du tunnel : %s</string> <string name="exclude_private_ips">Exclure les IPs privées</string> <string name="generate_new_private_key">Générer une nouvelle clé privée</string> @@ -137,6 +139,8 @@ <string name="key_length_explanation_base64">: Les clés base64 WireGuard doivent comporter 44 caractères (32 octets)</string> <string name="key_length_explanation_binary">: Les clés WireGuard doivent comporter 32 octets</string> <string name="key_length_explanation_hex">: Les clés hexadécimales WireGuard doivent comporter 64 caractères (32 octets)</string> + <string name="latest_handshake">Dernière liaison</string> + <string name="latest_handshake_ago">Il y a %s</string> <string name="listen_port">Port d\'écoute</string> <string name="log_export_error">Impossible d\'exporter le journal : %s</string> <string name="log_export_subject">Fichier journal d\'Android WireGuard</string> @@ -180,6 +184,10 @@ <string name="private_key">Clé privée</string> <string name="public_key">Clé publique</string> <string name="qr_code_hint">Astuce : générez avec \"qrencode -t ansiutf8 < tunnel.conf\".</string> + <string name="quick_settings_tile_add_title">Ajouter une bascule au volet des paramètres</string> + <string name="quick_settings_tile_add_summary">Cette bascule active le dernier tunnel utilisé</string> + <string name="quick_settings_tile_add_failure">Impossible d\'ajouter la bascule : erreur %d</string> + <string name="quick_settings_tile_action">Activer le tunnel</string> <string name="restore_on_boot_summary_off">N\'affichera pas les tunnels activés au démarrage</string> <string name="restore_on_boot_summary_on">Les tunnels activés seront affichés au démarrage</string> <string name="restore_on_boot_title">Restaurer au démarrage</string> @@ -224,6 +232,16 @@ <string name="type_name_go_userspace">Implémentation Go en espace utilisateur</string> <string name="type_name_kernel_module">Module noyau</string> <string name="unknown_error">Erreur inconnue</string> + <string name="updater_avalable">Une mise à jour est disponible. Veuillez mettre l\'application à jour.</string> + <string name="updater_action">Télécharger & Mettre à jour</string> + <string name="updater_rechecking">Récupération des métadonnées de la mise à jour…</string> + <string name="updater_download_progress">Téléchargement de la mise à jour : %1$s / %2$s (%3$.2f%%)</string> + <string name="updater_download_progress_nototal">Téléchargement de la mise à jour : %s</string> + <string name="updater_installing">Installation de la mise à jour…</string> + <string name="updater_failure">Erreur lors de la mise à jour : %s. Nous réessaierons dans un instant…</string> + <string name="updater_corrupt_title">Application corrompue</string> + <string name="updater_corrupt_message">Cette application est corrompue. Veuillez réinstaller le fichier APK depuis le site ci-dessous. Ensuite, désinstallez cette application puis réinstallez-la à l\'aide du fichier APK téléchargé.</string> + <string name="updater_corrupt_navigate">Accéder au site internet</string> <string name="version_summary">%1$s backend %2$s</string> <string name="version_summary_checking">Vérification de la version %s du backend</string> <string name="version_summary_unknown">Version %s inconnue</string> diff --git a/ui/src/main/res/values-it/strings.xml b/ui/src/main/res/values-it/strings.xml index e441133f..8fba2592 100644 --- a/ui/src/main/res/values-it/strings.xml +++ b/ui/src/main/res/values-it/strings.xml @@ -59,9 +59,9 @@ <string name="add_peer">Aggiungi peer</string> <string name="addresses">Indirizzi</string> <string name="applications">Applicazioni</string> - <string name="allow_remote_control_intents_summary_off">Le applicazioni esterne non possono attivare tunnel (consigliato)</string> - <string name="allow_remote_control_intents_summary_on">Le applicazioni esterne possono attivare tunnel (avanzato)</string> - <string name="allow_remote_control_intents_title">Consenti applicazioni di controllo remoto</string> + <string name="allow_remote_control_intents_summary_off">Le app esterne non possono attivare tunnel (consigliato)</string> + <string name="allow_remote_control_intents_summary_on">Le app esterne possono attivare tunnel (avanzato)</string> + <string name="allow_remote_control_intents_title">Consenti app di controllo remoto</string> <string name="allowed_ips">IP consentiti</string> <string name="bad_config_context">%2$s di %1$s</string> <string name="bad_config_context_top_level">%s</string> @@ -94,7 +94,7 @@ <string name="create_downloads_file_error">Impossibile creare il file nella cartella di download</string> <string name="create_empty">Crea da zero</string> <string name="create_from_file">Importa da file o archivio</string> - <string name="create_from_qr_code">Scansione da codice QR</string> + <string name="create_from_qr_code">Scansiona da codice QR</string> <string name="create_output_dir_error">Impossibile creare la cartella di output</string> <string name="create_temp_dir_error">Impossibile creare la cartella locale temporanea</string> <string name="create_tunnel">Crea tunnel</string> @@ -107,6 +107,9 @@ <string name="tv_select_a_storage_drive">Seleziona un\'unità di archiviazione</string> <string name="tv_no_file_picker">Installa un\'utilità di gestione file per sfogliare i file</string> <string name="tv_add_tunnel_get_started">Aggiungi un tunnel per iniziare</string> + <string name="donate_title">♥ Dona al progetto WireGuard</string> + <string name="donate_summary">Ogni contributo aiuta</string> + <string name="donate_google_play_disappointment">Grazie per il sostegno al progetto WireGuard!\n\nPurtroppo, a causa delle politiche di Google, non siamo autorizzati a linkare la pagina del progetto dove puoi fare una donazione. Speriamo che la troverai!\n\nGrazie ancora per il tuo contributo.</string> <string name="disable_config_export_title">Disattiva esportazione config</string> <string name="disable_config_export_description">Disabilitare l\'esportazione della configurazione rende le chiavi private meno accessibili</string> <string name="dns_servers">Server DNS</string> @@ -116,13 +119,14 @@ <string name="error_down">Errore di disattivazione del tunnel: %s</string> <string name="error_fetching_apps">Errore di recupero dell\'elenco applicazioni: %s</string> <string name="error_root">Accedi come root e riprova</string> + <string name="error_prepare">Errore di preparazione del tunnel: %s</string> <string name="error_up">Errore di attivazione del tunnel: %s</string> <string name="exclude_private_ips">Escludi IP privati</string> <string name="generate_new_private_key">Genera nuova chiave privata</string> <string name="generic_error">Errore “%s” sconosciuto</string> <string name="hint_automatic">(auto)</string> - <string name="hint_generated">(generato)</string> - <string name="hint_optional">(facoltativo)</string> + <string name="hint_generated">(generata)</string> + <string name="hint_optional">(facoltativa)</string> <string name="hint_optional_discouraged">(facoltativo, non consigliato)</string> <string name="hint_random">(casuale)</string> <string name="illegal_filename_error">Nome file “%s” non valido</string> @@ -135,6 +139,8 @@ <string name="key_length_explanation_base64">: le chiavi base64 di WireGuard devono essere di 44 caratteri (32 byte)</string> <string name="key_length_explanation_binary">: le chiavi di WireGuard devono essere di 32 byte</string> <string name="key_length_explanation_hex">: le chiavi esadecimali di WireGuard devono essere di 64 caratteri (32 byte)</string> + <string name="latest_handshake">Ultima negoziazione</string> + <string name="latest_handshake_ago">%s fa</string> <string name="listen_port">Porta in ascolto</string> <string name="log_export_error">Impossibile esportare il log: %s</string> <string name="log_export_subject">File di log WireGuard Android</string> @@ -178,6 +184,10 @@ <string name="private_key">Chiave privata</string> <string name="public_key">Chiave pubblica</string> <string name="qr_code_hint">Suggerimento: genera con `qrencode -t ansiutf8 < tunnel.conf`.</string> + <string name="quick_settings_tile_add_title">Aggiungi riquadro ale impostazioni rapide</string> + <string name="quick_settings_tile_add_summary">La scorciatoia attiva/disattiva il tunnel più recente</string> + <string name="quick_settings_tile_add_failure">Impossibile aggiungere la scorciatoia: errore %d</string> + <string name="quick_settings_tile_action">Attiva/disattiva tunnel</string> <string name="restore_on_boot_summary_off">Non attiverà i tunnel configurati all\'avvio</string> <string name="restore_on_boot_summary_on">Attiverà i tunnel configurati all\'avvio</string> <string name="restore_on_boot_title">Ripristina all\'avvio</string> @@ -213,6 +223,7 @@ <string name="tunnel_create_success">Tunnel “%s” creato correttamente</string> <string name="tunnel_error_already_exists">Il tunnel “%s” esiste già</string> <string name="tunnel_error_invalid_name">Nome non valido</string> + <string name="tunnel_list_placeholder">Aggiungi un tunnel usando il pulsante sotto</string> <string name="tunnel_name">Nome tunnel</string> <string name="tunnel_on_error">Impossibile attivare il tunnel (wgTurnOn ha risposto %d)</string> <string name="tunnel_dns_failure">Impossibile risolve il nome di domino: \"%s\"</string> @@ -221,6 +232,16 @@ <string name="type_name_go_userspace">Spazio utente Go</string> <string name="type_name_kernel_module">Modulo kernel</string> <string name="unknown_error">Errore sconosciuto</string> + <string name="updater_avalable">È disponibile un aggiornamento dell\'app. Si prega di aggiornare ora.</string> + <string name="updater_action">Scarica e aggiorna</string> + <string name="updater_rechecking">Recupero metadati aggiornamento…</string> + <string name="updater_download_progress">Scaricamento aggiornamento: %1$s / %2$s (%3$.2f%%)</string> + <string name="updater_download_progress_nototal">Scaricamento aggiornamento: %s</string> + <string name="updater_installing">Installazione aggiornamento…</string> + <string name="updater_failure">Aggiornamento fallito: %s. Riprovo momentaneamente…</string> + <string name="updater_corrupt_title">Applicazione danneggiata</string> + <string name="updater_corrupt_message">Questa applicazione è danneggiata. Riscarica l\'APK dal sito collegato qui sotto. Dopo, disinstalla questa applicazione e reinstallala dall\'APK scaricato.</string> + <string name="updater_corrupt_navigate">Apri sito web</string> <string name="version_summary">Backend %1$s %2$s</string> <string name="version_summary_checking">Controllo versione backend %s</string> <string name="version_summary_unknown">Versione %s sconosciuta</string> diff --git a/ui/src/main/res/values-night/themes.xml b/ui/src/main/res/values-night/themes.xml index 9187e48a..e074cb92 100644 --- a/ui/src/main/res/values-night/themes.xml +++ b/ui/src/main/res/values-night/themes.xml @@ -1,5 +1,5 @@ - <resources> + <style name="WireGuardTheme" parent="Theme.Material3.Dark"> <item name="colorPrimary">@color/md_theme_dark_primary</item> <item name="colorOnPrimary">@color/md_theme_dark_onPrimary</item> diff --git a/ui/src/main/res/values-nl-rNL/strings.xml b/ui/src/main/res/values-nl-rNL/strings.xml index dc2a9f93..fc972ada 100644 --- a/ui/src/main/res/values-nl-rNL/strings.xml +++ b/ui/src/main/res/values-nl-rNL/strings.xml @@ -4,6 +4,10 @@ <item quantity="one">Kan %d tunnel niet verwijderen: %s</item> <item quantity="other">Kan %d tunnels niet verwijderen: %s</item> </plurals> + <plurals name="delete_success"> + <item quantity="one">%d tunnel succesvol verwijderd</item> + <item quantity="other">%d tunnels succesvol verwijderd</item> + </plurals> <plurals name="delete_title"> <item quantity="one">%d tunnel geselecteerd</item> <item quantity="other">%d tunnels geselecteerd</item> @@ -12,4 +16,193 @@ <item quantity="one">%1$d van %2$d tunnels geïmporteerd</item> <item quantity="other">%1$d van de %2$d tunnels geïmporteerd</item> </plurals> + <plurals name="import_total_success"> + <item quantity="one">%d tunnel geïmporteerd</item> + <item quantity="other">%d tunnels geïmporteerd</item> + </plurals> + <plurals name="set_excluded_applications"> + <item quantity="one">%d uitgesloten applicatie(s)</item> + <item quantity="other">%d uitgesloten applicaties</item> + </plurals> + <plurals name="n_excluded_applications"> + <item quantity="one">%d uitgesloten</item> + <item quantity="other">%d uitgesloten</item> + </plurals> + <plurals name="n_included_applications"> + <item quantity="one">%d inbegrepen</item> + <item quantity="other">%d inbegrepen</item> + </plurals> + <string name="all_applications">Alle applicaties</string> + <string name="exclude_from_tunnel">Uitsluiten</string> + <string name="include_in_tunnel">Alleen opnemen</string> + <plurals name="include_n_applications"> + <item quantity="one">Neem %d app op</item> + <item quantity="other">Voeg %d apps toe</item> + </plurals> + <plurals name="exclude_n_applications"> + <item quantity="one">%d app uitsluiten</item> + <item quantity="other">%d apps uitsluiten</item> + </plurals> + <plurals name="persistent_keepalive_seconds_unit"> + <item quantity="one">iedere seconde</item> + <item quantity="other">iedere %d seconden</item> + </plurals> + <string name="use_all_applications">Gebruik alle applicaties</string> + <string name="add_peer">Peer toevoegen</string> + <string name="addresses">Adressen</string> + <string name="applications">Applicaties</string> + <string name="allow_remote_control_intents_summary_off">Externe apps kunnen mogelijk geen tunnels in-/uitschakelen (aanbevolen)</string> + <string name="allow_remote_control_intents_summary_on">Externe apps kunnen tunnels in-/uitschakelen (geavanceerd)</string> + <string name="allow_remote_control_intents_title">Controle door externe besturingsapps toestaan</string> + <string name="allowed_ips">Toegestane IP-adressen</string> + <string name="bad_config_context">%1$s\'s %2$s</string> + <string name="bad_config_context_top_level">%s</string> + <string name="bad_config_error">%1$s in %2$s</string> + <string name="bad_config_explanation_pka">: moet positief zijn en niet meer dan 65535</string> + <string name="bad_config_explanation_positive_number">: Moet positief zijn</string> + <string name="bad_config_explanation_udp_port">: Moet een geldig UDP poortnummer zijn</string> + <string name="bad_config_reason_invalid_key">Ongeldige sleutel</string> + <string name="bad_config_reason_invalid_number">Ongeldig nummer</string> + <string name="bad_config_reason_invalid_value">Ongeldige waarde</string> + <string name="bad_config_reason_missing_attribute">Attribuut ontbreekt</string> + <string name="bad_config_reason_missing_section">Ontbrekende sectie</string> + <string name="bad_config_reason_syntax_error">Syntaxfout</string> + <string name="bad_config_reason_unknown_attribute">Onbekend attribuut</string> + <string name="bad_config_reason_unknown_section">Onbekende sectie</string> + <string name="bad_config_reason_value_out_of_range">Waarde buiten bereik</string> + <string name="bad_extension_error">Bestand moet .conf of .zip zijn</string> + <string name="error_no_qr_found">QR-code niet gevonden in afbeelding</string> + <string name="error_qr_checksum">QR-code checksum verificatie mislukt</string> + <string name="cancel">Annuleren</string> + <string name="config_delete_error">Kan configuratiebestand %s niet verwijderen</string> + <string name="config_exists_error">Configuratie voor \"%s\" bestaat al</string> + <string name="config_file_exists_error">Configuratiebestand \"%s\" bestaat al</string> + <string name="config_not_found_error">Configuratiebestand \"%s\" niet gevonden</string> + <string name="config_rename_error">Kan configuratiebestand \"%s\" \" niet hernoemen</string> + <string name="config_save_error">Kan de configuratie voor \"%1$s\" niet opslaan: %2$s</string> + <string name="config_save_success">Configuratie succesvol opgeslagen voor \"%s\"</string> + <string name="create_activity_title">WireGuard tunnel aanmaken</string> + <string name="create_bin_dir_error">Kan geen lokale \'bin\' map aanmaken</string> + <string name="create_downloads_file_error">Kan bestand niet maken in downloadmap</string> + <string name="create_empty">Begin met lege configuratie</string> + <string name="create_from_file">Importeren uit bestand of archief</string> + <string name="create_from_qr_code">Scan van QR code</string> + <string name="create_output_dir_error">Kan de output map niet aanmaken</string> + <string name="create_temp_dir_error">Kan geen tijdelijke map aanmaken</string> + <string name="create_tunnel">Maak nieuwe tunnel</string> + <string name="copied_to_clipboard">%s gekopieerd naar klembord</string> + <string name="dark_theme_summary_off">Momenteel wordt licht (dag) thema gebruikt</string> + <string name="dark_theme_summary_on">Momenteel wordt donker (nacht) thema gebruikt</string> + <string name="dark_theme_title">Gebruik donker thema</string> + <string name="delete">Verwijder</string> + <string name="tv_delete">Selecteer tunnel om te verwijderen</string> + <string name="tv_select_a_storage_drive">Selecteer een opslaglocatie</string> + <string name="tv_no_file_picker">Installeer een bestandsbeheer applicatie</string> + <string name="tv_add_tunnel_get_started">Voeg een tunnel toe om te beginnen</string> + <string name="donate_title">♥️ Doneer aan het WireGuard Project</string> + <string name="donate_summary">Elke bijdrage helpt</string> + <string name="donate_google_play_disappointment">Bedankt voor het steunen van het WireGuard Project!\n\nHelaas, als gevolg van Google beleid, We mogen niet linken naar de webpagina van het project waar u een donatie kunt doen. Hopelijk kunt u deze zelf wel vinden!\n\nNogmaals bedankt voor uw bijdrage.</string> + <string name="disable_config_export_title">Config export uitschakelen</string> + <string name="disable_config_export_description">Het uitschakelen van configuratie export maakt privésleutels minder toegankelijk</string> + <string name="dns_servers">DNS-servers</string> + <string name="dns_search_domains">DNS-zoekdomeinen</string> + <string name="edit">Bewerken</string> + <string name="endpoint">Eindpunt</string> + <string name="error_down">Fout bij stoppen tunnel: %s</string> + <string name="error_fetching_apps">Fout bij ophalen van apps-lijst: %s</string> + <string name="error_root">Verkrijg root toegang en probeer het opnieuw</string> + <string name="error_prepare">Fout bij voorbereiden tunnel: %s</string> + <string name="error_up">Fout bij het starten van tunnel: %s</string> + <string name="exclude_private_ips">Privé-IP\'s uitsluiten</string> + <string name="generate_new_private_key">Nieuwe privésleutel genereren</string> + <string name="generic_error">Onbekend fout: \"%s\"</string> + <string name="hint_automatic">(auto)</string> + <string name="hint_generated">(gegenereerd)</string> + <string name="hint_optional">(optioneel)</string> + <string name="hint_optional_discouraged">(optioneel, niet aanbevolen)</string> + <string name="hint_random">(willekeurig)</string> + <string name="illegal_filename_error">Ongeldige bestandsnaam \"%s\" \"</string> + <string name="import_error">Kan tunnel niet importeren: %s</string> + <string name="import_from_qr_code">Importeer Tunnel uit QR Code</string> + <string name="import_success">Geïmporteerd \"%s\"</string> + <string name="interface_title">Interface</string> + <string name="key_contents_error">Slechte tekens in de veld</string> + <string name="key_length_error">Onjuiste sleutellengte</string> + <string name="key_length_explanation_base64">: WireGuard base64 sleutels moeten 44 tekens zijn (32 bytes)</string> + <string name="key_length_explanation_binary">: WireGuard sleutels moeten 32 bytes zijn</string> + <string name="key_length_explanation_hex">: WireGuard hex sleutels moeten 64 tekens zijn (32 bytes)</string> + <string name="latest_handshake">Recentste uitwisseling</string> + <string name="latest_handshake_ago">%s geleden</string> + <string name="listen_port">Luister op poort</string> + <string name="log_export_error">Kan logboek niet exporteren: %s</string> + <string name="log_export_subject">WireGuard Android logbestand</string> + <string name="log_export_success">Opgeslagen in \"%s\"</string> + <string name="log_export_title">Exporteer logboek naar bestand</string> + <string name="log_saver_activity_label">Logboek opslaan</string> + <string name="log_viewer_pref_summary">Logboeken kunnen helpen bij het debuggen</string> + <string name="log_viewer_pref_title">Bekijk applicatielogboek</string> + <string name="log_viewer_title">Log</string> + <string name="logcat_error">Kan logcat niet uitvoeren: </string> + <string name="module_enabler_disabled_summary">De experimentele kernel module kan de prestaties verbeteren</string> + <string name="module_enabler_disabled_title">Kernel module backend inschakelen</string> + <string name="module_enabler_enabled_summary">De langzamere userspace backend kan de stabiliteit verbeteren</string> + <string name="module_enabler_enabled_title">Uitschakelen kernel module backend</string> + <string name="module_installer_error">Er ging iets mis. Probeer het nog eens</string> + <string name="module_installer_initial">De experimentele kernel module kan de prestaties verbeteren</string> + <string name="module_installer_not_found">Er zijn geen modules beschikbaar voor uw apparaat</string> + <string name="module_installer_title">Download en installeer kernel module</string> + <string name="module_installer_working">Downloaden en installeren…</string> + <string name="module_version_error">Niet in staat om kernel module versie te bepalen</string> + <string name="mtu">MTU</string> + <string name="multiple_tunnels_summary_off">Het inschakelen van één tunnel zal anderen uitzetten</string> + <string name="multiple_tunnels_summary_on">Meerdere tunnels kunnen tegelijkertijd actief zijn</string> + <string name="multiple_tunnels_title">Meerdere gelijktijdige tunnels toestaan</string> + <string name="name">Naam</string> + <string name="no_config_error">Probeer een tunnel zonder configuratie te starten</string> + <string name="no_configs_error">Geen configuraties gevonden</string> + <string name="no_tunnels_error">Geen tunnels gedefinieerd</string> + <string name="parse_error_generic">string</string> + <string name="parse_error_inet_address">IP-adres</string> + <string name="parse_error_inet_endpoint">eindpunt</string> + <string name="parse_error_inet_network">IP netwerk</string> + <string name="parse_error_integer">nummer</string> + <string name="parse_error_reason">Kan %1$s%2$s niet parsen</string> + <string name="peer">Peer</string> + <string name="permission_label">WireGuard tunnels beheren</string> + <string name="persistent_keepalive">Voortdurende verbindingstest</string> + <string name="pre_shared_key">Gedeelde sleutel</string> + <string name="pre_shared_key_enabled">ingeschakeld</string> + <string name="private_key">Privésleutel</string> + <string name="public_key">Publieke sleutel</string> + <string name="quick_settings_tile_action">tunnel in-/uitschakelen</string> + <string name="restore_on_boot_title">Tunnel starten bij herstart</string> + <string name="save">Opslaan</string> + <string name="select_all">Selecteer alles</string> + <string name="settings">Instellingen</string> + <string name="toggle_all">Alles wisselen</string> + <string name="tools_installer_already">wg and wg-quick zijn al geïnstalleerd</string> + <string name="tools_installer_initial">Optionele tools voor scripts installeren</string> + <string name="tools_installer_title">Installeer command line tools</string> + <string name="tools_installer_working">Installeren van wg en wg-quick</string> + <string name="transfer_bytes">%d B</string> + <string name="transfer_gibibytes">%.2f GiB</string> + <string name="transfer_kibibytes">%.2f KiB</string> + <string name="transfer_mibibytes">%.2f MiB</string> + <string name="transfer_tibibytes">%.2f TiB</string> + <string name="tun_create_error">Kan tun apparaat niet aanmaken</string> + <string name="tunnel_error_already_exists">Tunnel \"%s\" bestaat al</string> + <string name="tunnel_error_invalid_name">Ongeldige naam</string> + <string name="tunnel_list_placeholder">Voeg een tunnel toe met de knop hieronder</string> + <string name="tunnel_name">Tunnelnaam</string> + <string name="type_name_go_userspace">Go userspace</string> + <string name="type_name_kernel_module">Kernel module</string> + <string name="unknown_error">Onbekende fout</string> + <string name="updater_action">Download & installeer updates</string> + <string name="updater_rechecking">Update metadata downloaden…</string> + <string name="updater_download_progress_nototal">Updates downloaden: %s</string> + <string name="updater_installing">Update wordt geïnstalleerd…</string> + <string name="biometric_prompt_zip_exporter_title">Authenticeer om de tunnel configuratie te exporteren</string> + <string name="biometric_prompt_private_key_title">Authenticeer om de persoonlijke sleutel te bekijken</string> + <string name="biometric_auth_error">Authenticatiefout</string> + <string name="biometric_auth_error_reason">Authenticatiefout: %s</string> </resources> diff --git a/ui/src/main/res/values-pt-rBR/strings.xml b/ui/src/main/res/values-pt-rBR/strings.xml index 456bedbf..646cf09b 100644 --- a/ui/src/main/res/values-pt-rBR/strings.xml +++ b/ui/src/main/res/values-pt-rBR/strings.xml @@ -79,6 +79,7 @@ <string name="tv_select_a_storage_drive">Selecione uma unidade de armazenamento</string> <string name="tv_no_file_picker">Por favor, instale um utilitário de gerenciamento de arquivos para procurar arquivos</string> <string name="tv_add_tunnel_get_started">Adicione um túnel para começar</string> + <string name="donate_title">♥️ Doar para o projeto WireGuard</string> <string name="disable_config_export_title">Desativar exportação de configuração</string> <string name="disable_config_export_description">Desativar a exportação de configuração torna as chaves privadas menos acessíveis</string> <string name="dns_servers">Servidores DNS</string> diff --git a/ui/src/main/res/values-ro-rRO/strings.xml b/ui/src/main/res/values-ro-rRO/strings.xml index 18144658..16ee62f0 100644 --- a/ui/src/main/res/values-ro-rRO/strings.xml +++ b/ui/src/main/res/values-ro-rRO/strings.xml @@ -120,6 +120,9 @@ <string name="tv_select_a_storage_drive">Selectează o unitate de stocare</string> <string name="tv_no_file_picker">Instalează un serviciu de administrare a fișierelor pentru a căuta fișiere</string> <string name="tv_add_tunnel_get_started">Adaugă un tunel pentru a începe</string> + <string name="donate_title">♥ Donează pentru proiectul WireGuard</string> + <string name="donate_summary">Fiecare contribuţie ajută</string> + <string name="donate_google_play_disappointment">Vă mulțumim pentru sprijinul acordat Proiectului WireGuard!\n\nDin păcate, din cauza politicilor Google, nu avem voie să punem un link către pagina web a proiectului unde poți face o donație. Sperăm că vă puteți descurca!\n\nMulțumim din nou pentru contribuție.</string> <string name="disable_config_export_title">Dezactivează exportarea configurației</string> <string name="disable_config_export_description">Dezactivarea exportării configurației face mai puțin accesibile cheile private</string> <string name="dns_servers">Servere DNS</string> @@ -129,6 +132,7 @@ <string name="error_down">Eroare la oprirea tunelului: %s</string> <string name="error_fetching_apps">Eroare la preluarea listei de aplicații: %s</string> <string name="error_root">Obține acces root și încearcă din nou</string> + <string name="error_prepare">Eroare la pregătirea tunelului: %s</string> <string name="error_up">Eroare la pornirea tunelului: %s</string> <string name="exclude_private_ips">Excludere IP-uri private</string> <string name="generate_new_private_key">Generare cheie privată nouă</string> @@ -148,6 +152,8 @@ <string name="key_length_explanation_base64">: Cheile base64 ale WireGuard trebuie să aibă 44 de caractere (32 de octeți)</string> <string name="key_length_explanation_binary">: Cheile WireGuard trebuie să aibă 32 de octeți</string> <string name="key_length_explanation_hex">: Cheile hex WireGuard trebuie să aibă 64 de caractere (32 de octeți)</string> + <string name="latest_handshake">Cea mai recentă negociere</string> + <string name="latest_handshake_ago">%s în urmă</string> <string name="listen_port">Port de ascultare</string> <string name="log_export_error">Jurnalul nu poate fi exportat: %s</string> <string name="log_export_subject">Fișier de jurnal Android WireGuard</string> @@ -191,6 +197,8 @@ <string name="private_key">Cheie privată</string> <string name="public_key">Cheie publică</string> <string name="qr_code_hint">Sfat: generează cu `qrencode -t ansiutf8 < tunnel.conf`.</string> + <string name="quick_settings_tile_add_title">Adaugă secțiune la panoul de setări rapide</string> + <string name="quick_settings_tile_add_summary">Comanda rapidă comută cel mai recent tunel</string> <string name="restore_on_boot_summary_off">Tunelurile activate nu vor fi pornite odată cu pornirea dispozitivului</string> <string name="restore_on_boot_summary_on">Tunelurile activate vor fi pornite odată cu pornirea dispozitivului</string> <string name="restore_on_boot_title">Restaurare la pornire</string> diff --git a/ui/src/main/res/values-ru/strings.xml b/ui/src/main/res/values-ru/strings.xml index fd747768..7637758e 100644 --- a/ui/src/main/res/values-ru/strings.xml +++ b/ui/src/main/res/values-ru/strings.xml @@ -94,7 +94,7 @@ <string name="bad_config_error">%1$s в %2$s</string> <string name="bad_config_explanation_pka">: Значение должно быть больше нуля, но меньше 65535</string> <string name="bad_config_explanation_positive_number">: Значение должно быть больше нуля</string> - <string name="bad_config_explanation_udp_port">: Должен быть действительный номер порта UDP</string> + <string name="bad_config_explanation_udp_port">: Должен быть допустимым UDP-портом</string> <string name="bad_config_reason_invalid_key">Неправильный ключ</string> <string name="bad_config_reason_invalid_number">Неправильный номер</string> <string name="bad_config_reason_invalid_value">Недопустимое значение</string> @@ -142,7 +142,7 @@ <string name="dns_search_domains">Домены поиска</string> <string name="edit">Изменить</string> <string name="endpoint">Конечная точка</string> - <string name="error_down">Ошибка при выходе из туннеля: %s</string> + <string name="error_down">Ошибка при отключении туннеля: %s</string> <string name="error_fetching_apps">Ошибка при получении списка приложений: %s</string> <string name="error_root">Пожалуйста, получите root-доступ и попробуйте снова</string> <string name="error_prepare">Ошибка при подготовке туннеля: %s</string> @@ -202,7 +202,7 @@ <string name="parse_error_integer">число</string> <string name="parse_error_reason">Невозможно разобрать %1$s “%2$s”</string> <string name="peer">Пир</string> - <string name="permission_description">управлять туннелями WireGuard, включая и отключая туннели по желанию, потенциально перенаправляя интернет-трафик</string> + <string name="permission_description">контроль над туннелями WireGuard, включение и отключение туннелей по своему усмотрению, возможность неправильного управления сетевым трафиком</string> <string name="permission_label">управлять туннелями WireGuard</string> <string name="persistent_keepalive">Постоянное соединение</string> <string name="pre_shared_key">Общий ключ</string> @@ -210,6 +210,10 @@ <string name="private_key">Приватный ключ</string> <string name="public_key">Публичный ключ</string> <string name="qr_code_hint">Совет: генерировать с “qrencode -t ansiutf8 < tunnel.conf”.</string> + <string name="quick_settings_tile_add_title">Добавить элемент в панель быстрых настроек</string> + <string name="quick_settings_tile_add_summary">Элемент переключает последний активный туннель</string> + <string name="quick_settings_tile_add_failure">Не удается добавить ярлык: ошибка %d</string> + <string name="quick_settings_tile_action">Переключить туннель</string> <string name="restore_on_boot_summary_off">Не поднимать ранее выбранные туннели при загрузке</string> <string name="restore_on_boot_summary_on">Поднимать ранее выбранные туннели при загрузке</string> <string name="restore_on_boot_title">Восстановить при загрузке</string> @@ -251,10 +255,20 @@ <string name="tunnel_dns_failure">Не удалось определить DNS имя: “%s”</string> <string name="tunnel_rename_error">Не удалось переименовать туннель: %s</string> <string name="tunnel_rename_success">Туннель успешно переименован в “%s”</string> - <string name="type_name_go_userspace">Пользовательское пространство Go</string> + <string name="type_name_go_userspace">Go в пользовательском пространстве</string> <string name="type_name_kernel_module">Модуль ядра</string> <string name="unknown_error">Неизвестная ошибка</string> - <string name="version_summary">%1$s бэкенд %2$s</string> + <string name="updater_avalable">Доступно обновление приложения. Пожалуйста, обновите.</string> + <string name="updater_action">Загрузить и установить</string> + <string name="updater_rechecking">Получение метаданных обновления…</string> + <string name="updater_download_progress">Загрузка обновления: %1$s / %2$s (%3$.2f%%)</string> + <string name="updater_download_progress_nototal">Загрузка обновления: %s</string> + <string name="updater_installing">Установка обновления…</string> + <string name="updater_failure">Ошибка обновления: %s. Повторите попытку…</string> + <string name="updater_corrupt_title">Приложение повреждено</string> + <string name="updater_corrupt_message">Приложение повреждено. Загрузите APK с сайта, указанного ниже, затем удалите это приложение и установите из загруженного APK.</string> + <string name="updater_corrupt_navigate">Открыть сайт</string> + <string name="version_summary">Бэкенд: %1$s %2$s</string> <string name="version_summary_checking">Проверка версии бэкэнда %s</string> <string name="version_summary_unknown">Неизвестная версия %s</string> <string name="version_title">WireGuard для Android v%s</string> diff --git a/ui/src/main/res/values-sk-rSK/strings.xml b/ui/src/main/res/values-sk-rSK/strings.xml index 0b86fb29..40df1d7e 100644 --- a/ui/src/main/res/values-sk-rSK/strings.xml +++ b/ui/src/main/res/values-sk-rSK/strings.xml @@ -8,7 +8,7 @@ <string name="addresses">Adresy</string> <string name="applications">Aplikácie</string> <string name="allow_remote_control_intents_summary_off">Externé aplikácie nemôžu spustiť tunely (odporúčané)</string> - <string name="allow_remote_control_intents_summary_on">Externé aplikácie môžu spustiť tunely (odporúčané)</string> + <string name="allow_remote_control_intents_summary_on">Externé aplikácie môžu spustiť tunely (pokročilé)</string> <string name="allow_remote_control_intents_title">Povoliť aplikáciám vzdialenú správu</string> <string name="allowed_ips">Povolené IP adresy</string> <string name="bad_config_context_top_level">%s</string> @@ -20,8 +20,8 @@ <string name="bad_config_reason_invalid_number">Neplatné číslo</string> <string name="bad_config_reason_invalid_value">Neplatná hodnota</string> <string name="bad_config_reason_missing_attribute">Chýbajúci atribút</string> - <string name="bad_config_reason_missing_section">Chýbajúc sekcia</string> - <string name="bad_config_reason_syntax_error">Chyba syntaxu</string> + <string name="bad_config_reason_missing_section">Chýbajúca sekcia</string> + <string name="bad_config_reason_syntax_error">Chyba syntaxe</string> <string name="bad_config_reason_unknown_attribute">Neznámy atribút</string> <string name="bad_config_reason_unknown_section">Neznáma sekcia</string> <string name="bad_config_reason_value_out_of_range">Hodnota mimo povoleného rozsahu</string> @@ -31,12 +31,12 @@ <string name="config_exists_error">Konfigurácia pre “%s” už existuje</string> <string name="config_file_exists_error">Konfiguračný súbor pre “%s” už existuje</string> <string name="config_not_found_error">Konfiguračný súbor “%s” sa nenašiel</string> - <string name="config_rename_error">Nemôžete premenovať konfiguračný súbor “%s”</string> - <string name="config_save_error">Nemôžete uložiť konfiguráciu pre “%1$s”: %2$s</string> + <string name="config_rename_error">Nepodarilo sa premenovať konfiguračný súbor “%s”</string> + <string name="config_save_error">Nepodarilo sa uložiť konfiguráciu pre “%1$s”: %2$s</string> <string name="config_save_success">Úspešne sa podarilo uložiť konfiguráciu pre “%s”</string> <string name="create_activity_title">Vytvoriť WireGuard tunel</string> - <string name="create_bin_dir_error">Nemôžete vytvoriť lokálny binárny súbor</string> - <string name="create_downloads_file_error">Nemôžete vytvoriť súbor v priečinku downloads</string> + <string name="create_bin_dir_error">Nepodarilo sa vytvoriť lokálny priečinok pre binárne súbory</string> + <string name="create_downloads_file_error">Nepodarilo sa vytvoriť súbor v priečinku stiahnuté</string> <string name="create_empty">Vytvoriť od počiatku</string> <string name="create_from_file">Importovať zo súboru alebo archívu</string> <string name="create_from_qr_code">Skenovať z QR kódu</string> @@ -50,10 +50,10 @@ <string name="delete">Odstrániť</string> <string name="tv_delete">Vyberte tunel na odstránenie</string> <string name="tv_select_a_storage_drive">Vyberte úložnú jednotku</string> - <string name="tv_no_file_picker">Prosím nainštalujte manažéra súbor aby ste mohli prehliadať súbory</string> + <string name="tv_no_file_picker">Prosím nainštalujte manažéra súborov aby ste mohli prehliadať súbory</string> <string name="tv_add_tunnel_get_started">Pridajte tunel aby ste mohli začať</string> <string name="disable_config_export_title">Zakázať export konfigurácie</string> - <string name="disable_config_export_description">Zakázanie exportu konfigurácii spôsobí, že prístup k súkromným kľúčom sa stáva zložitým</string> + <string name="disable_config_export_description">Zakázanie exportu konfigurácie spôsobí, že prístup k súkromným kľúčom sa stáva zložitým</string> <string name="dns_servers">Servery DNS</string> <string name="dns_search_domains">Prehľadávať domény</string> <string name="edit">Upraviť</string> @@ -61,46 +61,46 @@ <string name="error_down">Chyba pri vypínaní tunela: %s</string> <string name="error_fetching_apps">Chyba pri načítaní zoznamu aplikácií: %s</string> <string name="error_root">Získajte prístup root a skúste znova</string> - <string name="error_up">Chyba pri vyvolávaní tunela: %s</string> - <string name="exclude_private_ips">Vynechať privátne IP</string> - <string name="generate_new_private_key">Generovať nový privátny kľúč</string> + <string name="error_up">Chyba pri zapínaní tunela: %s</string> + <string name="exclude_private_ips">Vynechať súkromné IP</string> + <string name="generate_new_private_key">Generovať nový súkromný kľúč</string> <string name="generic_error">Neznáma “%s” chyba</string> <string name="hint_automatic">(automatické)</string> <string name="hint_generated">(generované)</string> <string name="hint_optional">(voliteľné)</string> <string name="hint_optional_discouraged">(voliteľné, neodporúča sa)</string> <string name="hint_random">(náhodné)</string> - <string name="illegal_filename_error">Ilegálne meno súboru “%s”</string> + <string name="illegal_filename_error">Nepovolené meno súboru “%s”</string> <string name="import_error">Nepodarilo sa importovať tunel: %s</string> <string name="import_from_qr_code">Importovať tunel z QR kódu</string> <string name="import_success">Podarilo sa importovať “%s”</string> <string name="interface_title">Rozhranie</string> - <string name="key_contents_error">Nepovolené charaktery v kľúči</string> + <string name="key_contents_error">Nepovolené znaky v kľúči</string> <string name="key_length_error">Nesprávna dĺžka kľúču</string> - <string name="key_length_explanation_base64">: WireGuard base64 kľúče musia mať 44 charakterov (32 bytes)</string> + <string name="key_length_explanation_base64">: WireGuard base64 kľúče musia mať 44 znakov (32 bytes)</string> <string name="key_length_explanation_binary">: WireGuard kľúče musia byť 32 bytové</string> - <string name="key_length_explanation_hex">: WireGuard hex kľúče musia mať 64 charakterov (32 bytes)</string> + <string name="key_length_explanation_hex">: WireGuard hex kľúče musia mať 64 znakov (32 bytes)</string> <string name="listen_port">Otvorený port</string> <string name="log_export_error">Nepodarilo sa exportovať log: %s</string> - <string name="log_export_subject">WireGuard Android Záznam</string> + <string name="log_export_subject">WireGuard Android Denník udalostí</string> <string name="log_export_success">Uložené do “%s”</string> <string name="log_export_title">Exportovať denník udalostí</string> <string name="log_saver_activity_label">Uložiť denník udalostí</string> - <string name="log_viewer_pref_summary">Denník udalosti môžu byt nápomocné pri ladení aplikácie</string> + <string name="log_viewer_pref_summary">Denníky udalostí môžu byt nápomocné pri ladení aplikácie</string> <string name="log_viewer_pref_title">Zobraziť denník udalostí aplikácie</string> <string name="log_viewer_title">Denník udalostí</string> - <string name="logcat_error">Nepodarilo sa prehrať logcat: </string> - <string name="module_enabler_enabled_summary">Pomalšie užívatelské prostredie môže zlepšiť stabilitu</string> + <string name="logcat_error">Nepodarilo sa spustiť logcat: </string> + <string name="module_enabler_enabled_summary">Pomalší userspace backend môže zlepšiť stabilitu</string> <string name="module_installer_error">Niečo sa pokazilo. Prosím, skúste znova</string> <string name="module_installer_not_found">Pre vaše zariadenie nie sú k dispozícii žiadne moduly</string> - <string name="module_installer_title">Stiahni a nainštaluj kernel modul</string> - <string name="module_installer_working">Sťahuje a inštalujem…</string> + <string name="module_installer_title">Stiahnutie a inštalácia kernelového modulu</string> + <string name="module_installer_working">Sťahuje sa a inštaluje sa…</string> <string name="mtu">Maximálna prenosová jednotka</string> <string name="multiple_tunnels_summary_off">Zapnutím jedného tunela vypnete ostatné</string> - <string name="multiple_tunnels_summary_on">Môžu byť zapnuté viaceré tunele naraz</string> - <string name="multiple_tunnels_title">Povoliť niekoľko tunel naraz</string> + <string name="multiple_tunnels_summary_on">Môžu byť zapnuté viaceré tunely naraz</string> + <string name="multiple_tunnels_title">Povoliť viacero tunelov naraz</string> <string name="name">Názov</string> - <string name="no_config_error">Pokúšam sa vyvolať tunel bez konfigurácie</string> + <string name="no_config_error">Pokúšam sa zapnúť tunel bez konfigurácie</string> <string name="no_configs_error">Nenašli sa žiadne konfigurácie</string> <string name="no_tunnels_error">Neexistujú žiadne tunely</string> <string name="parse_error_generic">reťazec</string> @@ -108,7 +108,7 @@ <string name="parse_error_inet_endpoint">koncový bod</string> <string name="parse_error_inet_network">IP sieť</string> <string name="parse_error_integer">číslo</string> - <string name="parse_error_reason">Nedá sa rozobrať %1$s “%2$s”</string> + <string name="parse_error_reason">Nedá sa parsovať %1$s “%2$s”</string> <string name="pre_shared_key">Vopred zdieľaný kľúč</string> <string name="pre_shared_key_enabled">povolené</string> <string name="private_key">Súkromný kľúč</string> @@ -121,10 +121,10 @@ <string name="toggle_all">Prepnúť všetko</string> <string name="tools_installer_already">wg a wg-quick už sú nainštalované</string> <string name="tools_installer_initial">Nainštalovať voliteľné nástroje pre skriptovanie</string> - <string name="tools_installer_initial_magisk">Nainštalovať voliteľné nástroje pre skriptovanie ako Magisk module</string> + <string name="tools_installer_initial_magisk">Nainštalovať voliteľné nástroje pre skriptovanie ako Magisk modul</string> <string name="tools_installer_success_magisk">wg a wg-quick sú nainštalované ako Magisk modul (reštart požadovaný)</string> <string name="tools_installer_title">Inštalácia nástrojov príkazového riadku</string> - <string name="tools_installer_working">Inštalácia wg a wg-quick</string> + <string name="tools_installer_working">Inštaluje sa wg a wg-quick</string> <string name="tools_unavailable_error">Potrebné nástroje nie sú k dispozícii</string> <string name="transfer">Prenos</string> <string name="transfer_bytes">%d B</string> @@ -141,7 +141,7 @@ <string name="tunnel_name">Meno tunelu</string> <string name="tunnel_rename_error">Nepodarilo sa premenovať tunel: %s</string> <string name="tunnel_rename_success">Úspešne premenovaný tunel na “%s”</string> - <string name="type_name_kernel_module">Modul jadra</string> + <string name="type_name_kernel_module">Kernelový modul</string> <string name="unknown_error">Neznáma chyba</string> <string name="version_summary_unknown">Neznáma %s verzia</string> <string name="version_title">WireGuard pre Android v%s</string> @@ -149,10 +149,10 @@ <string name="vpn_start_error">Nepodarilo sa spustiť Android VPN službu</string> <string name="zip_export_error">Nepodarilo sa exportovať tunely: %s</string> <string name="zip_export_success">Uložené ako “%s”</string> - <string name="zip_export_summary">Zip súbor bude uložený do priečinka na sťahovanie</string> + <string name="zip_export_summary">Zip súbor bude uložený do priečinka stiahnuté</string> <string name="zip_export_title">Export tunelov do zip súboru</string> <string name="biometric_prompt_zip_exporter_title">Overovanie pre export tunelov</string> - <string name="biometric_prompt_private_key_title">Overovanie pre zobrazenie privátneho kľúča</string> + <string name="biometric_prompt_private_key_title">Authenticate to view private key</string> <string name="biometric_auth_error">Overovanie zlyhalo</string> <string name="biometric_auth_error_reason">Overovanie zlyhalo: %s</string> </resources> diff --git a/ui/src/main/res/values-v23/styles.xml b/ui/src/main/res/values-v23/styles.xml index f6c74dd4..13feb8c3 100644 --- a/ui/src/main/res/values-v23/styles.xml +++ b/ui/src/main/res/values-v23/styles.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style name="AppTheme" parent="AppThemeBase"> <item name="android:statusBarColor">?android:colorBackground</item> <item name="android:windowLightStatusBar">@bool/light_status_bar</item> diff --git a/ui/src/main/res/values-v27/styles.xml b/ui/src/main/res/values-v27/styles.xml index 752801f9..f94cadb1 100644 --- a/ui/src/main/res/values-v27/styles.xml +++ b/ui/src/main/res/values-v27/styles.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style name="AppTheme" parent="AppThemeBase"> <item name="android:statusBarColor">?android:colorBackground</item> <item name="android:windowLightStatusBar">@bool/light_status_bar</item> diff --git a/ui/src/main/res/values-zh-rCN/strings.xml b/ui/src/main/res/values-zh-rCN/strings.xml index 4b30afca..cd282317 100644 --- a/ui/src/main/res/values-zh-rCN/strings.xml +++ b/ui/src/main/res/values-zh-rCN/strings.xml @@ -171,6 +171,10 @@ <string name="private_key">私钥</string> <string name="public_key">公钥</string> <string name="qr_code_hint">提示:使用命令 `qrencode -t ansiutf8 < tunnel.conf` 生成二维码</string> + <string name="quick_settings_tile_add_title">添加磁贴到快速设置面板</string> + <string name="quick_settings_tile_add_summary">快捷方式磁贴开/关最近使用的隧道。</string> + <string name="quick_settings_tile_add_failure">无法添加快捷方式磁贴:错误 %d</string> + <string name="quick_settings_tile_action">开/关隧道</string> <string name="restore_on_boot_summary_off">未启用</string> <string name="restore_on_boot_summary_on">设备启动时自动开启上次使用的隧道</string> <string name="restore_on_boot_title">启动时恢复</string> @@ -215,6 +219,16 @@ <string name="type_name_go_userspace">Go userspace</string> <string name="type_name_kernel_module">Kernel module</string> <string name="unknown_error">未知错误</string> + <string name="updater_avalable">WireGuard 可以更新了,请立即更新。</string> + <string name="updater_action">下载 & 更新</string> + <string name="updater_rechecking">正在获取更新元数据…</string> + <string name="updater_download_progress">正在下载更新:%1$s / %2$s (%3$.2f%%)</string> + <string name="updater_download_progress_nototal">正在下载更新:%s</string> + <string name="updater_installing">正在安装更新…</string> + <string name="updater_failure">更新失败:%s。将在稍后重试…</string> + <string name="updater_corrupt_title">应用程序损坏</string> + <string name="updater_corrupt_message">此应用程序已损坏。请从下面链接的网站重新下载APK。然后卸载此应用程序并从下载的APK重新安装它。</string> + <string name="updater_corrupt_navigate">打开网站</string> <string name="version_summary">%1$s backend %2$s</string> <string name="version_summary_checking">正在检查 %s backend 版本</string> <string name="version_summary_unknown">未知的 %s 版本</string> diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index c9e230db..eee276f4 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -70,6 +70,7 @@ <string name="bad_config_explanation_pka">: Must be positive and no more than 65535</string> <string name="bad_config_explanation_positive_number">: Must be positive</string> <string name="bad_config_explanation_udp_port">: Must be a valid UDP port number</string> + <string name="bad_config_explanation_http_proxy">: Must be valid proxy hostname and port</string> <string name="bad_config_reason_invalid_key">Invalid key</string> <string name="bad_config_reason_invalid_number">Invalid number</string> <string name="bad_config_reason_invalid_value">Invalid value</string> @@ -104,6 +105,7 @@ <string name="dark_theme_summary_on">Currently using dark (night) theme</string> <string name="dark_theme_title">Use dark theme</string> <string name="delete">Delete</string> + <string name="dynamic_addresses">Dynamic addresses</string> <string name="tv_delete">Select tunnel to delete</string> <string name="tv_select_a_storage_drive">Select a storage drive</string> <string name="tv_no_file_picker">Please install a file management utility to browse files</string> @@ -130,6 +132,10 @@ <string name="hint_optional">(optional)</string> <string name="hint_optional_discouraged">(optional, not recommended)</string> <string name="hint_random">(random)</string> + <string name="http_proxy">Proxy</string> + <string name="http_proxy_hostname">Proxy hostname</string> + <string name="http_proxy_pac">Proxy Auto-Config URL</string> + <string name="http_proxy_port">Proxy port</string> <string name="illegal_filename_error">Illegal file name “%s”</string> <string name="import_error">Unable to import tunnel: %s</string> <string name="import_from_qr_code">Import Tunnel from QR Code</string> @@ -185,6 +191,10 @@ <string name="private_key">Private key</string> <string name="public_key">Public key</string> <string name="qr_code_hint">Tip: generate with `qrencode -t ansiutf8 < tunnel.conf`.</string> + <string name="quick_settings_tile_add_title">Add tile to quick settings panel</string> + <string name="quick_settings_tile_add_summary">The shortcut tile toggles the most recent tunnel</string> + <string name="quick_settings_tile_add_failure">Unable to add shortcut tile: error %d</string> + <string name="quick_settings_tile_action">Toggle tunnel</string> <string name="restore_on_boot_summary_off">Will not bring up enabled tunnels at boot</string> <string name="restore_on_boot_summary_on">Will bring up enabled tunnels at boot</string> <string name="restore_on_boot_title">Restore on boot</string> @@ -236,6 +246,9 @@ <string name="updater_download_progress_nototal">Downloading update: %s</string> <string name="updater_installing">Installing update…</string> <string name="updater_failure">Update failure: %s. Will retry momentarily…</string> + <string name="updater_corrupt_title">Application Corrupt</string> + <string name="updater_corrupt_message">This application is corrupt. Please re-download the APK from the website linked below. After, uninstall this application, and reinstall it from the downloaded APK.</string> + <string name="updater_corrupt_navigate">Open Website</string> <string name="version_summary">%1$s backend %2$s</string> <string name="version_summary_checking">Checking %s backend version</string> <string name="version_summary_unknown">Unknown %s version</string> diff --git a/ui/src/main/res/values/themes.xml b/ui/src/main/res/values/themes.xml index e8d36cdd..0153d346 100644 --- a/ui/src/main/res/values/themes.xml +++ b/ui/src/main/res/values/themes.xml @@ -1,5 +1,5 @@ - <resources> + <style name="WireGuardTheme" parent="Theme.Material3.Light"> <item name="colorPrimary">@color/md_theme_light_primary</item> <item name="colorOnPrimary">@color/md_theme_light_onPrimary</item> diff --git a/ui/src/main/res/xml/preferences.xml b/ui/src/main/res/xml/preferences.xml index aa89f27c..a8b66df7 100644 --- a/ui/src/main/res/xml/preferences.xml +++ b/ui/src/main/res/xml/preferences.xml @@ -12,6 +12,7 @@ android:summaryOn="@string/restore_on_boot_summary_on" android:title="@string/restore_on_boot_title" /> <com.wireguard.android.preference.ZipExporterPreference android:key="zip_exporter" /> + <com.wireguard.android.preference.QuickTilePreference android:key="quick_tile" /> <Preference android:key="log_viewer" android:singleLineTitle="false" @@ -40,6 +41,5 @@ android:summaryOff="@string/allow_remote_control_intents_summary_off" android:summaryOn="@string/allow_remote_control_intents_summary_on" android:title="@string/allow_remote_control_intents_title" /> - <com.wireguard.android.preference.DonatePreference - android:singleLineTitle="false" /> + <com.wireguard.android.preference.DonatePreference android:singleLineTitle="false" /> </androidx.preference.PreferenceScreen> |