Merge "Add a function connecting to vsock to LLNDK libavf" into main
diff --git a/android/TerminalApp/AndroidManifest.xml b/android/TerminalApp/AndroidManifest.xml
index 7dab58d..726004c 100644
--- a/android/TerminalApp/AndroidManifest.xml
+++ b/android/TerminalApp/AndroidManifest.xml
@@ -54,7 +54,9 @@
android:label="@string/settings_port_forwarding_title" />
<activity android:name=".SettingsRecoveryActivity"
android:label="@string/settings_recovery_title" />
- <activity android:name=".ErrorActivity" />
+ <activity android:name=".ErrorActivity"
+ android:label="@string/error_title"
+ android:process=":error" />
<property
android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED"
android:value="true" />
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
index d6521be..d6ca1e6 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
@@ -39,6 +39,15 @@
NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
+
+ if (!(this instanceof ErrorActivity)) {
+ Thread currentThread = Thread.currentThread();
+ if (!(currentThread.getUncaughtExceptionHandler()
+ instanceof TerminalExceptionHandler)) {
+ currentThread.setUncaughtExceptionHandler(
+ new TerminalExceptionHandler(getApplicationContext()));
+ }
+ }
}
@Override
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java b/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java
index fa5c382..e3d1a67 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java
@@ -62,9 +62,8 @@
}
return ((KeyStore.PrivateKeyEntry) ks.getEntry(ALIAS, null));
} catch (Exception e) {
- Log.e(TAG, "cannot generate or get key", e);
+ throw new RuntimeException("cannot generate or get key", e);
}
- return null;
}
private static void createKey()
@@ -95,7 +94,7 @@
+ end_cert;
writer.write(output.getBytes());
} catch (IOException | CertificateEncodingException e) {
- Log.d(TAG, "cannot write cert", e);
+ throw new RuntimeException("cannot write certs", e);
}
}
}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java b/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java
index b79e346..a0fca82 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java
@@ -76,6 +76,7 @@
private SharedPathJson[] sharedPath;
private DisplayJson display;
private GpuJson gpu;
+ private boolean auto_memory_balloon;
/** Parses JSON file at jsonPath */
static ConfigJson from(Context context, Path jsonPath) {
@@ -145,7 +146,8 @@
.setBootloaderPath(bootloader)
.setKernelPath(kernel)
.setInitrdPath(initrd)
- .useNetwork(network);
+ .useNetwork(network)
+ .useAutoMemoryBalloon(auto_memory_balloon);
if (input != null) {
builder.useTouch(input.touchscreen)
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
index ac05d78..66ab414 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
@@ -41,7 +41,6 @@
import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.file.Path;
-import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -75,6 +74,7 @@
this, /* requestCode= */ 0, intent, PendingIntent.FLAG_IMMUTABLE);
mNotification =
new Notification.Builder(this, this.getPackageName())
+ .setSilent(true)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(getString(R.string.installer_notif_title_text))
.setContentText(getString(R.string.installer_notif_desc_text))
@@ -82,7 +82,9 @@
.setContentIntent(pendingIntent)
.build();
- mExecutorService = Executors.newSingleThreadExecutor();
+ mExecutorService =
+ Executors.newSingleThreadExecutor(
+ new TerminalThreadFactory(getApplicationContext()));
mConnectivityManager = getSystemService(ConnectivityManager.class);
Network defaultNetwork = mConnectivityManager.getBoundNetworkForProcess();
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 397a546..624d6ca 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -32,6 +32,7 @@
import android.os.Bundle;
import android.os.ConditionVariable;
import android.os.Environment;
+import android.os.SystemClock;
import android.provider.Settings;
import android.util.Log;
import android.view.KeyEvent;
@@ -67,6 +68,8 @@
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
public class MainActivity extends BaseActivity
implements VmLauncherService.VmLauncherServiceCallback, AccessibilityStateChangeListener {
@@ -74,9 +77,11 @@
static final String KEY_DISK_SIZE = "disk_size";
private static final String VM_ADDR = "192.168.0.2";
private static final int TTYD_PORT = 7681;
+ private static final int TERMINAL_CONNECTION_TIMEOUT_MS = 10_000;
private static final int REQUEST_CODE_INSTALLER = 0x33;
private static final int FONT_SIZE_DEFAULT = 13;
+ private ExecutorService mExecutorService;
private InstalledImage mImage;
private X509Certificate[] mCertificates;
private PrivateKey mPrivateKey;
@@ -141,6 +146,11 @@
updateModifierKeysVisibility();
return insets;
});
+
+ mExecutorService =
+ Executors.newSingleThreadExecutor(
+ new TerminalThreadFactory(getApplicationContext()));
+
// if installer is launched, it will be handled in onActivityResult
if (!launchInstaller) {
if (!Environment.isExternalStorageManager()) {
@@ -323,15 +333,12 @@
handler.proceed();
}
});
- new Thread(
- () -> {
- waitUntilVmStarts();
- runOnUiThread(
- () ->
- mTerminalView.loadUrl(
- getTerminalServiceUrl().toString()));
- })
- .start();
+ mExecutorService.execute(
+ () -> {
+ // TODO(b/376793781): Remove polling
+ waitUntilVmStarts();
+ runOnUiThread(() -> mTerminalView.loadUrl(getTerminalServiceUrl().toString()));
+ });
}
private static void waitUntilVmStarts() {
@@ -341,17 +348,33 @@
} catch (UnknownHostException e) {
// this can never happen.
}
- try {
- while (!addr.isReachable(10000)) {}
- } catch (IOException e) {
- // give up on network error
- throw new RuntimeException(e);
+
+ long startTime = SystemClock.elapsedRealtime();
+ while (true) {
+ int remainingTime =
+ TERMINAL_CONNECTION_TIMEOUT_MS
+ - (int) (SystemClock.elapsedRealtime() - startTime);
+ if (remainingTime <= 0) {
+ throw new RuntimeException("Connection to terminal timedout");
+ }
+ try {
+ // Note: this quits immediately if VM is unreachable.
+ if (addr.isReachable(remainingTime)) {
+ return;
+ }
+ } catch (IOException e) {
+ // give up on network error
+ throw new RuntimeException(e);
+ }
}
- return;
}
@Override
protected void onDestroy() {
+ if (mExecutorService != null) {
+ mExecutorService.shutdown();
+ }
+
getSystemService(AccessibilityManager.class).removeAccessibilityStateChangeListener(this);
VmLauncherService.stop(this);
super.onDestroy();
@@ -471,6 +494,7 @@
Icon icon = Icon.createWithResource(getResources(), R.drawable.ic_launcher_foreground);
Notification notification =
new Notification.Builder(this, this.getPackageName())
+ .setSilent(true)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(
getResources().getString(R.string.service_notification_title))
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActiveAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActiveAdapter.kt
new file mode 100644
index 0000000..c46effa
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActiveAdapter.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.virtualization.terminal
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.materialswitch.MaterialSwitch
+
+class SettingsPortForwardingActiveAdapter(private val mPortsStateManager: PortsStateManager) :
+ SettingsPortForwardingBaseAdapter<SettingsPortForwardingActiveAdapter.ViewHolder>() {
+
+ override fun getItems(): ArrayList<SettingsPortForwardingItem> {
+ val enabledPorts = mPortsStateManager.getEnabledPorts()
+ return mPortsStateManager
+ .getActivePorts()
+ .map { SettingsPortForwardingItem(it, enabledPorts.contains(it)) }
+ .toCollection(ArrayList())
+ }
+
+ class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val enabledSwitch: MaterialSwitch =
+ view.findViewById(R.id.settings_port_forwarding_active_item_enabled_switch)
+ val port: TextView = view.findViewById(R.id.settings_port_forwarding_active_item_port)
+ }
+
+ override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
+ val view =
+ LayoutInflater.from(viewGroup.context)
+ .inflate(R.layout.settings_port_forwarding_active_item, viewGroup, false)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
+ val port = mItems[position].port
+ viewHolder.port.text = port.toString()
+ viewHolder.enabledSwitch.contentDescription = viewHolder.port.text
+ viewHolder.enabledSwitch.isChecked = mItems[position].enabled
+ viewHolder.enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
+ mPortsStateManager.updateEnabledPort(port, isChecked)
+ }
+ }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
index d64c267..83a8d05 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
@@ -22,27 +22,50 @@
class SettingsPortForwardingActivity : AppCompatActivity() {
private lateinit var mPortsStateManager: PortsStateManager
- private lateinit var mAdapter: SettingsPortForwardingAdapter
+ private lateinit var mPortsStateListener: Listener
+ private lateinit var mActivePortsAdapter: SettingsPortForwardingActiveAdapter
+ private lateinit var mInactivePortsAdapter: SettingsPortForwardingInactiveAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_port_forwarding)
mPortsStateManager = PortsStateManager.getInstance(this)
- mAdapter = SettingsPortForwardingAdapter(mPortsStateManager)
- val recyclerView: RecyclerView = findViewById(R.id.settings_port_forwarding_recycler_view)
- recyclerView.layoutManager = LinearLayoutManager(this)
- recyclerView.adapter = mAdapter
+ mActivePortsAdapter = SettingsPortForwardingActiveAdapter(mPortsStateManager)
+ val activeRecyclerView: RecyclerView =
+ findViewById(R.id.settings_port_forwarding_active_recycler_view)
+ activeRecyclerView.layoutManager = LinearLayoutManager(this)
+ activeRecyclerView.adapter = mActivePortsAdapter
+
+ mInactivePortsAdapter = SettingsPortForwardingInactiveAdapter(mPortsStateManager, this)
+ val inactiveRecyclerView: RecyclerView =
+ findViewById(R.id.settings_port_forwarding_inactive_recycler_view)
+ inactiveRecyclerView.layoutManager = LinearLayoutManager(this)
+ inactiveRecyclerView.adapter = mInactivePortsAdapter
+
+ mPortsStateListener = Listener()
+ }
+
+ private fun refreshAdapters() {
+ mActivePortsAdapter.refreshItems()
+ mInactivePortsAdapter.refreshItems()
}
override fun onResume() {
super.onResume()
- mAdapter.registerPortsStateListener()
+ mPortsStateManager.registerListener(mPortsStateListener)
+ refreshAdapters()
}
override fun onPause() {
- mAdapter.unregisterPortsStateListener()
+ mPortsStateManager.unregisterListener(mPortsStateListener)
super.onPause()
}
+
+ private inner class Listener : PortsStateManager.Listener {
+ override fun onPortsStateUpdated(oldActivePorts: Set<Int>, newActivePorts: Set<Int>) {
+ refreshAdapters()
+ }
+ }
}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
deleted file mode 100644
index 8282910..0000000
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.virtualization.terminal
-
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import androidx.recyclerview.widget.SortedList
-import androidx.recyclerview.widget.SortedListAdapterCallback
-import com.google.android.material.materialswitch.MaterialSwitch
-
-class SettingsPortForwardingAdapter(private val mPortsStateManager: PortsStateManager) :
- RecyclerView.Adapter<SettingsPortForwardingAdapter.ViewHolder>() {
-
- private var mItems: SortedList<SettingsPortForwardingItem>
- private val mPortsStateListener: Listener
-
- init {
- mItems =
- SortedList(
- SettingsPortForwardingItem::class.java,
- object : SortedListAdapterCallback<SettingsPortForwardingItem>(this) {
- override fun compare(
- o1: SettingsPortForwardingItem,
- o2: SettingsPortForwardingItem,
- ): Int {
- return o1.port - o2.port
- }
-
- override fun areContentsTheSame(
- o1: SettingsPortForwardingItem,
- o2: SettingsPortForwardingItem,
- ): Boolean {
- return o1.port == o2.port && o1.enabled == o2.enabled
- }
-
- override fun areItemsTheSame(
- o1: SettingsPortForwardingItem,
- o2: SettingsPortForwardingItem,
- ): Boolean {
- return o1.port == o2.port
- }
- },
- )
- mItems.addAll(getCurrentSettingsPortForwardingItem())
- mPortsStateListener = Listener()
- }
-
- fun registerPortsStateListener() {
- mPortsStateManager.registerListener(mPortsStateListener)
- mItems.replaceAll(getCurrentSettingsPortForwardingItem())
- }
-
- fun unregisterPortsStateListener() {
- mPortsStateManager.unregisterListener(mPortsStateListener)
- }
-
- private fun getCurrentSettingsPortForwardingItem(): ArrayList<SettingsPortForwardingItem> {
- val enabledPorts = mPortsStateManager.getEnabledPorts()
- return mPortsStateManager
- .getActivePorts()
- .map { SettingsPortForwardingItem(it, enabledPorts.contains(it)) }
- .toCollection(ArrayList())
- }
-
- class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
- val enabledSwitch: MaterialSwitch =
- view.findViewById(R.id.settings_port_forwarding_item_enabled_switch)
- val port: TextView = view.findViewById(R.id.settings_port_forwarding_item_port)
- }
-
- override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
- val view =
- LayoutInflater.from(viewGroup.context)
- .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
- return ViewHolder(view)
- }
-
- override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
- val port = mItems[position].port
- viewHolder.port.text = port.toString()
- viewHolder.enabledSwitch.contentDescription = viewHolder.port.text
- viewHolder.enabledSwitch.isChecked = mItems[position].enabled
- viewHolder.enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
- mPortsStateManager.updateEnabledPort(port, isChecked)
- }
- }
-
- override fun getItemCount() = mItems.size()
-
- private inner class Listener : PortsStateManager.Listener {
- override fun onPortsStateUpdated(oldActivePorts: Set<Int>, newActivePorts: Set<Int>) {
- mItems.replaceAll(getCurrentSettingsPortForwardingItem())
- }
- }
-}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingBaseAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingBaseAdapter.kt
new file mode 100644
index 0000000..4595372
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingBaseAdapter.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.virtualization.terminal
+
+import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.SortedList
+import androidx.recyclerview.widget.SortedListAdapterCallback
+
+abstract class SettingsPortForwardingBaseAdapter<T : RecyclerView.ViewHolder>() :
+ RecyclerView.Adapter<T>() {
+ var mItems: SortedList<SettingsPortForwardingItem>
+
+ init {
+ mItems =
+ SortedList(
+ SettingsPortForwardingItem::class.java,
+ object : SortedListAdapterCallback<SettingsPortForwardingItem>(this) {
+ override fun compare(
+ o1: SettingsPortForwardingItem,
+ o2: SettingsPortForwardingItem,
+ ): Int {
+ return o1.port - o2.port
+ }
+
+ override fun areContentsTheSame(
+ o1: SettingsPortForwardingItem,
+ o2: SettingsPortForwardingItem,
+ ): Boolean {
+ return o1.port == o2.port && o1.enabled == o2.enabled
+ }
+
+ override fun areItemsTheSame(
+ o1: SettingsPortForwardingItem,
+ o2: SettingsPortForwardingItem,
+ ): Boolean {
+ return o1.port == o2.port
+ }
+ },
+ )
+ }
+
+ override fun getItemCount() = mItems.size()
+
+ abstract fun getItems(): ArrayList<SettingsPortForwardingItem>
+
+ fun refreshItems() {
+ mItems.replaceAll(getItems())
+ }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingInactiveAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingInactiveAdapter.kt
new file mode 100644
index 0000000..ee0bee5
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingInactiveAdapter.kt
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.virtualization.terminal
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageButton
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+
+class SettingsPortForwardingInactiveAdapter(
+ private val mPortsStateManager: PortsStateManager,
+ private val mContext: Context,
+) : SettingsPortForwardingBaseAdapter<SettingsPortForwardingInactiveAdapter.ViewHolder>() {
+
+ override fun getItems(): ArrayList<SettingsPortForwardingItem> {
+ return mPortsStateManager
+ .getEnabledPorts()
+ .subtract(mPortsStateManager.getActivePorts())
+ .map { SettingsPortForwardingItem(it, true) }
+ .toCollection(ArrayList())
+ }
+
+ class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val closeButton: ImageButton =
+ view.findViewById(R.id.settings_port_forwarding_active_item_close_button)
+ val port: TextView = view.findViewById(R.id.settings_port_forwarding_inactive_item_port)
+ }
+
+ override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
+ val view =
+ LayoutInflater.from(viewGroup.context)
+ .inflate(R.layout.settings_port_forwarding_inactive_item, viewGroup, false)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
+ val port = mItems[position].port
+ viewHolder.port.text = port.toString()
+ viewHolder.closeButton.contentDescription =
+ mContext.getString(
+ R.string.settings_port_forwarding_other_enabled_port_close_button,
+ port,
+ )
+ viewHolder.closeButton.setOnClickListener { _ ->
+ mPortsStateManager.updateEnabledPort(port, false)
+ }
+ }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalExceptionHandler.java b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalExceptionHandler.java
new file mode 100644
index 0000000..4ab2b77
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalExceptionHandler.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.virtualization.terminal;
+
+import android.content.Context;
+import android.util.Log;
+
+public class TerminalExceptionHandler implements Thread.UncaughtExceptionHandler {
+ private static final String TAG = "TerminalExceptionHandler";
+
+ private final Context mContext;
+
+ public TerminalExceptionHandler(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public void uncaughtException(Thread thread, Throwable throwable) {
+ Exception exception;
+ if (throwable instanceof Exception) {
+ exception = (Exception) throwable;
+ } else {
+ exception = new Exception(throwable);
+ }
+ try {
+ ErrorActivity.start(mContext, exception);
+ } catch (Exception ex) {
+ Log.wtf(TAG, "Failed to launch error activity for an exception", exception);
+ }
+
+ thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, throwable);
+ }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalThreadFactory.java b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalThreadFactory.java
new file mode 100644
index 0000000..5ee535d
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalThreadFactory.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.virtualization.terminal;
+
+import android.content.Context;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+
+public class TerminalThreadFactory implements ThreadFactory {
+ private final Context mContext;
+
+ public TerminalThreadFactory(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public Thread newThread(Runnable r) {
+ Thread thread = Executors.defaultThreadFactory().newThread(r);
+ thread.setUncaughtExceptionHandler(new TerminalExceptionHandler(mContext));
+ return thread;
+ }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java
index 6d2c5bd..f262f1f 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java
@@ -20,9 +20,11 @@
import android.app.Notification;
import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
+import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -143,8 +145,13 @@
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (Objects.equals(intent.getAction(), ACTION_STOP_VM_LAUNCHER_SERVICE)) {
- // If there is no Debian service or it fails to shutdown, just stop the service.
- if (mDebianService == null || !mDebianService.shutdownDebian()) {
+
+ if (mDebianService != null && mDebianService.shutdownDebian()) {
+ // During shutdown, change the notification content to indicate that it's closing
+ Notification notification = createNotificationForTerminalClose();
+ getSystemService(NotificationManager.class).notify(this.hashCode(), notification);
+ } else {
+ // If there is no Debian service or it fails to shutdown, just stop the service.
stopSelf();
}
return START_NOT_STICKY;
@@ -153,7 +160,8 @@
Log.d(TAG, "VM instance is already started");
return START_NOT_STICKY;
}
- mExecutorService = Executors.newCachedThreadPool();
+ mExecutorService =
+ Executors.newCachedThreadPool(new TerminalThreadFactory(getApplicationContext()));
InstalledImage image = InstalledImage.getDefault(this);
ConfigJson json = ConfigJson.from(this, image.getConfigPath());
@@ -172,9 +180,7 @@
android.os.Trace.endSection();
android.os.Trace.beginAsyncSection("debianBoot", 0);
} catch (VirtualMachineException e) {
- Log.e(TAG, "cannot create runner", e);
- stopSelf();
- return START_NOT_STICKY;
+ throw new RuntimeException("cannot create runner", e);
}
mVirtualMachine = runner.getVm();
mResultReceiver =
@@ -204,6 +210,32 @@
return START_NOT_STICKY;
}
+ private Notification createNotificationForTerminalClose() {
+ Intent stopIntent = new Intent();
+ stopIntent.setClass(this, VmLauncherService.class);
+ stopIntent.setAction(VmLauncherService.ACTION_STOP_VM_LAUNCHER_SERVICE);
+ PendingIntent stopPendingIntent =
+ PendingIntent.getService(
+ this,
+ 0,
+ stopIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
+ Icon icon = Icon.createWithResource(getResources(), R.drawable.ic_launcher_foreground);
+ String stopActionText =
+ getResources().getString(R.string.service_notification_force_quit_action);
+ String stopNotificationTitle =
+ getResources().getString(R.string.service_notification_close_title);
+ return new Notification.Builder(this, this.getPackageName())
+ .setSmallIcon(R.drawable.ic_launcher_foreground)
+ .setContentTitle(stopNotificationTitle)
+ .setOngoing(true)
+ .setSilent(true)
+ .addAction(
+ new Notification.Action.Builder(icon, stopActionText, stopPendingIntent)
+ .build())
+ .build();
+ }
+
private boolean overrideConfigIfNecessary(VirtualMachineCustomImageConfig.Builder builder) {
boolean changed = false;
// TODO: check if ANGLE is enabled for the app.
diff --git a/android/TerminalApp/res/drawable/ic_close.xml b/android/TerminalApp/res/drawable/ic_close.xml
new file mode 100644
index 0000000..e21c19c
--- /dev/null
+++ b/android/TerminalApp/res/drawable/ic_close.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M256,760L200,704L424,480L200,256L256,200L480,424L704,200L760,256L536,480L760,704L704,760L480,536L256,760Z"/>
+</vector>
diff --git a/android/TerminalApp/res/layout/settings_port_forwarding.xml b/android/TerminalApp/res/layout/settings_port_forwarding.xml
index 2d21962..77b9bf7 100644
--- a/android/TerminalApp/res/layout/settings_port_forwarding.xml
+++ b/android/TerminalApp/res/layout/settings_port_forwarding.xml
@@ -31,9 +31,33 @@
android:hyphenationFrequency="full"
android:layout_marginBottom="24dp"/>
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/settings_port_forwarding_active_ports_title"
+ android:textSize="24sp"
+ android:hyphenationFrequency="full"
+ android:layout_marginBottom="24dp"/>
+
<androidx.recyclerview.widget.RecyclerView
- android:id="@+id/settings_port_forwarding_recycler_view"
+ android:id="@+id/settings_port_forwarding_active_recycler_view"
android:layout_marginHorizontal="16dp"
+ android:layout_marginBottom="24dp"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@string/settings_port_forwarding_other_enabled_ports_title"
+ android:textSize="24sp"
+ android:hyphenationFrequency="full"
+ android:layout_marginBottom="24dp"/>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/settings_port_forwarding_inactive_recycler_view"
+ android:layout_marginHorizontal="16dp"
+ android:layout_marginBottom="24dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/android/TerminalApp/res/layout/settings_port_forwarding_item.xml b/android/TerminalApp/res/layout/settings_port_forwarding_active_item.xml
similarity index 81%
rename from android/TerminalApp/res/layout/settings_port_forwarding_item.xml
rename to android/TerminalApp/res/layout/settings_port_forwarding_active_item.xml
index 8a57b41..2a74146 100644
--- a/android/TerminalApp/res/layout/settings_port_forwarding_item.xml
+++ b/android/TerminalApp/res/layout/settings_port_forwarding_active_item.xml
@@ -19,21 +19,26 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:minHeight="48dp"
app:layout_constraintCircleRadius="@dimen/material_emphasis_medium">
<TextView
- android:id="@+id/settings_port_forwarding_item_port"
+ android:id="@+id/settings_port_forwarding_active_item_port"
android:layout_height="wrap_content"
android:layout_width="match_parent"
+ android:textSize="16sp"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<com.google.android.material.materialswitch.MaterialSwitch
- android:id="@+id/settings_port_forwarding_item_enabled_switch"
+ android:id="@+id/settings_port_forwarding_active_item_enabled_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/android/TerminalApp/res/layout/settings_port_forwarding_item.xml b/android/TerminalApp/res/layout/settings_port_forwarding_inactive_item.xml
similarity index 74%
copy from android/TerminalApp/res/layout/settings_port_forwarding_item.xml
copy to android/TerminalApp/res/layout/settings_port_forwarding_inactive_item.xml
index 8a57b41..127b152 100644
--- a/android/TerminalApp/res/layout/settings_port_forwarding_item.xml
+++ b/android/TerminalApp/res/layout/settings_port_forwarding_inactive_item.xml
@@ -19,21 +19,28 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:minHeight="48dp"
app:layout_constraintCircleRadius="@dimen/material_emphasis_medium">
<TextView
- android:id="@+id/settings_port_forwarding_item_port"
+ android:id="@+id/settings_port_forwarding_inactive_item_port"
android:layout_height="wrap_content"
android:layout_width="match_parent"
+ android:textSize="16sp"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
- <com.google.android.material.materialswitch.MaterialSwitch
- android:id="@+id/settings_port_forwarding_item_enabled_switch"
+ <ImageButton
+ android:id="@+id/settings_port_forwarding_active_item_close_button"
+ android:src="@drawable/ic_close"
+ android:background="@android:color/transparent"
+ android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/android/TerminalApp/res/values-af/strings.xml b/android/TerminalApp/res/values-af/strings.xml
index 9faabc0..9532334 100644
--- a/android/TerminalApp/res/values-af/strings.xml
+++ b/android/TerminalApp/res/values-af/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminaalskerm"</string>
<string name="terminal_input" msgid="4602512831433433551">"Skermpyltjie"</string>
<string name="empty_line" msgid="5012067143408427178">"Leë reël"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dubbeltik om invoer te tik"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installeer Linux-terminaal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Jy sal omtrent <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> se data oor die netwerk moet aflaai om Linux Terminaal te begin.\nWil jy voortgaan?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Laai net oor wi-fi af"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Pas toe"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminaal sal herbegin word om die skyf se grootte te verander"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Bevestig"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Poortkontrole"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Laat luisterpoorte toe of weier hulle"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Luisterpoorte"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Het toegelate poorte gestoor"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Laat ’n nuwe poort toe"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Voer ’n nuwe poortnommer in"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Stoor"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Kanselleer"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminaal probeer om ’n nuwe poort oop te maak"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Poort versoek: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aanvaar"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminaal loop tans"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klik om Terminaal oop te maak"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Maak toe"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is geaktiveer"</string>
</resources>
diff --git a/android/TerminalApp/res/values-am/strings.xml b/android/TerminalApp/res/values-am/strings.xml
index e022149..ffe5b1c 100644
--- a/android/TerminalApp/res/values-am/strings.xml
+++ b/android/TerminalApp/res/values-am/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ተርሚናል ማሳያ"</string>
<string name="terminal_input" msgid="4602512831433433551">"ጠቋሚ"</string>
<string name="empty_line" msgid="5012067143408427178">"ባዶ መስመር"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ግብዓት ለመተየብ ሁለቴ መታ ያድርጉ"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ተርሚናልን ይጫኑ"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ተርሚናልን ለማስጀመር በአውታረ መረቡ ላይ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> የሚሆን ውሂብ ማውረድ ያስፈልግዎታል። \nመቀጠል ይፈልጋሉ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi ብቻ በመጠቀም አውርድ"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ተግብር"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"የዲስክ መጠንን ለመቀየር ተርሚናል እንደገና ይጀምራል"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"አረጋግጥ"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"የወደብ ቁጥጥር"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"የማዳመጫ ወደቦችን ይፍቀዱ/ይከልክሉ"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"የማዳመጫ ወደቦች"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"የተቀመጡ የሚፈቀዱ ወደቦች"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"አዲስ ወደብ ይፍቀዱ"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"አዲስ የወደብ ቁጥር ያስገቡ"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"አስቀምጥ"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ይቅር"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ተርሚናል አዲስ ወደብ ለመክፈት እየጠየቀ ነው"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"የተጠየቀ ወደብ፦ <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ተቀበል"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ተርሚናል በመሄድ ላይ ነው"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ተርሚናልን ለመክፈት ጠቅ ያድርጉ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ዝጋ"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ነቅቷል"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ar/strings.xml b/android/TerminalApp/res/values-ar/strings.xml
index 590c1d3..7dcab62 100644
--- a/android/TerminalApp/res/values-ar/strings.xml
+++ b/android/TerminalApp/res/values-ar/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"شاشة الوحدة الطرفية"</string>
<string name="terminal_input" msgid="4602512831433433551">"المؤشر"</string>
<string name="empty_line" msgid="5012067143408427178">"سطر فارغ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"انقر مرّتين لإدخال نص"</string>
<string name="installer_title_text" msgid="500663060973466805">"تثبيت الوحدة الطرفية بنظام التشغيل Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"لتشغيل وحدة Linux الطرفية، عليك تنزيل <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> من البيانات تقريبًا عبر الشبكة.\nهل تريد المتابعة؟"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"التنزيل باستخدام Wi-Fi فقط"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"تطبيق"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ستتم إعادة تشغيل الوحدة الطرفية لتغيير حجم القرص"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"تأكيد"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"التحكّم في المنافذ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"السماح بمنافذ الاستماع أو حظرها"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"منافذ الاستماع"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"المنافذ المسموح بها المحفوظة"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"السماح بمنفذ جديد"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"إدخال رقم منفذ جديد"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"حفظ"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"إلغاء"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"تطلُب الوحدة الطرفية فتح منفذ جديد"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"المنفذ المطلوب: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"قبول"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"الوحدة الطرفية قيد التشغيل"</string>
<string name="service_notification_content" msgid="5772901142342308273">"انقر لفتح الوحدة الطرفية"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"إغلاق"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"تم تفعيل <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-as/strings.xml b/android/TerminalApp/res/values-as/strings.xml
index afed64d..76bcaf6 100644
--- a/android/TerminalApp/res/values-as/strings.xml
+++ b/android/TerminalApp/res/values-as/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"টাৰ্মিনেল ডিছপ্লে’"</string>
<string name="terminal_input" msgid="4602512831433433551">"কাৰ্ছৰ"</string>
<string name="empty_line" msgid="5012067143408427178">"খালী শাৰী"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ইনপুট টাইপ কৰিবলৈ দুবাৰ টিপক"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux টাৰ্মিনেল ইনষ্টল কৰক"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux টাৰ্মিনেল লঞ্চ কৰিবলৈ, আপুনি নেটৱৰ্কত প্ৰায় <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ডেটা ডাউনল’ড কৰিব লাগিব।\nআপুনি আগবাঢ়িবনে?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"কেৱল ৱাই-ফাই ব্যৱহাৰ কৰি ডাউনল’ড কৰক"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"প্ৰয়োগ কৰক"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ডিস্কৰ আকাৰ সলনি কৰিবলৈ টাৰ্মিনেলটো ৰিষ্টাৰ্ট কৰা হ\'ব"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"নিশ্চিত কৰক"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"প’ৰ্ট নিয়ন্ত্ৰণ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"শুনা প’ৰ্টৰ অনুমতি দিয়ক/অস্বীকাৰ কৰক"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"শুনা প’ৰ্ট"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"ছেভ কৰা অনুমোদিত প’ৰ্ট"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"এটা নতুন প’ৰ্টৰ অনুমতি দিয়ক"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"এটা নতুন প’ৰ্ট নম্বৰ দিয়ক"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"ছেভ কৰক"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"বাতিল কৰক"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"টাৰ্মিনেলটোৱে এটা নতুন প’ৰ্ট খুলিবলৈ অনুৰোধ কৰি আছে"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"প\'ৰ্ট অনুৰোধ কৰা হৈছে: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"গ্ৰহণ কৰক"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"টাৰ্মিনেলটো চলি আছে"</string>
<string name="service_notification_content" msgid="5772901142342308273">"টাৰ্মিনেল খুলিবলৈ ক্লিক কৰক"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"বন্ধ কৰক"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> সক্ষম কৰা আছে"</string>
</resources>
diff --git a/android/TerminalApp/res/values-az/strings.xml b/android/TerminalApp/res/values-az/strings.xml
index ae3e043..54b8727 100644
--- a/android/TerminalApp/res/values-az/strings.xml
+++ b/android/TerminalApp/res/values-az/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal displeyi"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Boş sətir"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Mətn daxil etmək üçün iki dəfə toxunun"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux terminalını quraşdırın"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux terminalını işə salmaq üçün şəbəkə vasitəsilə təxminən <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> həcmində data endirməlisiniz.\nDavam etmək istəyirsiniz?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Yalnız Wi-Fi istifadə edərək endirin"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Tətbiq edin"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Diskin ölçüsünü dəyişmək üçün terminal yenidən başladılacaq"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Təsdiq edin"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Port nəzarəti"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Dinləmə portlarına icazə verin/imtina edin"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Dinləmə portları"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Yadda saxlanılmış icazə verilən portlar"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Yeni porta icazə verin"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Yeni port nömrəsi daxil edin"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Yadda saxlayın"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Ləğv edin"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal yeni port açmağı tələb edir"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port tələb edildi: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Qəbul edin"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal işləyir"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Terminalı açmaq üçün klikləyin"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Bağlayın"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> aktivləşdirilib"</string>
</resources>
diff --git a/android/TerminalApp/res/values-b+sr+Latn/strings.xml b/android/TerminalApp/res/values-b+sr+Latn/strings.xml
index a0c2ddc..9a9ef1a 100644
--- a/android/TerminalApp/res/values-b+sr+Latn/strings.xml
+++ b/android/TerminalApp/res/values-b+sr+Latn/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Prikaz terminala"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Prazan red"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dvaput dodirnite da biste uneli tekst"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalirajte Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Da biste pokrenuli Linux terminal, treba da preuzmete oko <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podataka preko mreže.\nŽelite li da nastavite?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Preuzimaj samo preko WiFi mreže"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Primeni"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal će se restartovati da bi se promenila veličina diska"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potvrdi"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kontrola porta"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Dozvolite ili zabranite portove za slušanje"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Portovi za slušanje"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Sačuvani dozvoljeni portovi"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Dozvolite novi port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Unesite novi broj porta"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Sačuvaj"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Otkaži"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal traži da otvori novi port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Obavezan port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prihvati"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal je aktivan"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknite da biste otvorili terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zatvori"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> je omogućen"</string>
</resources>
diff --git a/android/TerminalApp/res/values-be/strings.xml b/android/TerminalApp/res/values-be/strings.xml
index a3e8f01..0d61f00 100644
--- a/android/TerminalApp/res/values-be/strings.xml
+++ b/android/TerminalApp/res/values-be/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Дысплэй тэрмінала"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Пусты радок"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Двойчы націсніце, каб увесці тэкст з клавіятуры"</string>
<string name="installer_title_text" msgid="500663060973466805">"Усталяванне тэрмінала Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Каб запусціць тэрмінал Linux, трэба спампаваць каля <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> даных па сетцы.\nПрацягнуць?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Спампоўваць толькі праз сетку Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Прымяніць"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Каб прымяніць змяненне памеру дыска, тэрмінал будзе перазапушчаны"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Пацвердзіць"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Кіраванне портам"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Дазволіць (адмовіць) доступ да партоў праслухоўвання"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Парты праслухоўвання"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Захаваць дазволеныя парты"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Дазволіць доступ да новага порта"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Увядзіце нумар новага порта"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Захаваць"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Скасаваць"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Тэрмінал запытвае адкрыць новы порт"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Запытаны порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прыняць"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Тэрмінал запушчаны"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Каб адкрыць тэрмінал, націсніце тут"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Закрыць"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Модуль <xliff:g id="ID_1">VirGL</xliff:g> уключаны"</string>
</resources>
diff --git a/android/TerminalApp/res/values-bg/strings.xml b/android/TerminalApp/res/values-bg/strings.xml
index f6256f8..a933a3d 100644
--- a/android/TerminalApp/res/values-bg/strings.xml
+++ b/android/TerminalApp/res/values-bg/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Екран на Терминал"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Празен ред"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Докоснете двукратно, за да въведете текст"</string>
<string name="installer_title_text" msgid="500663060973466805">"Инсталиране на терминала на Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"За да стартирате терминала на Linux, трябва да изтеглите около <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> данни през мрежата.\nИскате ли да продължите?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Изтегляне само посредством Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Прилагане"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Терминалът ще се рестартира, за да се преоразмери дискът"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Потвърждаване"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Контрол на портовете"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Разрешаване/отхвърляне на портовете за слушане"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Портове за слушане"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Запазени разрешени портове"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Разрешаване на нов порт"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Въведете номера на новия порт"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Запазване"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Отказ"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминалът заявява отварянето на нов порт"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Заявен порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Приемам"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминалът работи"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Кликнете, за да отворите терминала"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Затваряне"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> е активирано"</string>
</resources>
diff --git a/android/TerminalApp/res/values-bn/strings.xml b/android/TerminalApp/res/values-bn/strings.xml
index 5bb9a47..e41f256 100644
--- a/android/TerminalApp/res/values-bn/strings.xml
+++ b/android/TerminalApp/res/values-bn/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"টার্মিনাল ডিসপ্লে"</string>
<string name="terminal_input" msgid="4602512831433433551">"কার্সর"</string>
<string name="empty_line" msgid="5012067143408427178">"খালি লাইন"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ইনপুট টাইপ করতে ডবল ট্যাপ করুন"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux টার্মিনাল ইনস্টল করুন"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux টার্মিনাল চালু করতে, নেটওয়ার্কের মাধ্যমে মোটামুটি <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ডেটা ডাউনলোড করতে হবে।\nআপনি কি এগোতে চান?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"শুধুমাত্র ওয়াই-ফাই ব্যবহার করে ডাউনলোড করুন"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"প্রয়োগ করুন"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ডিস্ক ছোট বড় করতে টার্মিনাল রিস্টার্ট করা হবে"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"কনফার্ম করুন"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"পোর্ট কন্ট্রোল"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"লিসিনিং পোর্টের অনুমতি দিন/অনুমতি দেবেন না"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"লিসিনিং পোর্ট"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"অনুমতি দেওয়া পোর্ট সেভ করা হয়েছে"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"নতুন পোর্টের অনুমতি দিন"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"নতুন পোর্ট নম্বর লিখুন"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"সেভ করুন"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"বাতিল করুন"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"টার্মিনাল নতুন পোর্ট খোলার অনুরোধ করছে"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"পোর্ট ফরওয়ার্ড করা সম্পর্কে অনুরোধ করা হয়েছে: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"সম্মতি দিন"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"টার্মিনাল চলছে"</string>
<string name="service_notification_content" msgid="5772901142342308273">"টার্মিনাল খুলতে ক্লিক করুন"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"বন্ধ করুন"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> চালু করা আছে"</string>
</resources>
diff --git a/android/TerminalApp/res/values-bs/strings.xml b/android/TerminalApp/res/values-bs/strings.xml
index 4918fe7..616922a 100644
--- a/android/TerminalApp/res/values-bs/strings.xml
+++ b/android/TerminalApp/res/values-bs/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Ekran terminala"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Prazan red"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Unos pisanjem dvostrukim dodirom"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalirajte Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Da pokrenete Linux terminal, trebate preuzeti otprilike <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podataka putem mreže.\nŽelite li nastaviti?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Preuzmi koristeći isključivo WiFi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Primijeni"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal će se ponovo pokrenuti radi promjene veličine diska"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potvrdi"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Upravljanje priključkom"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Dozvoli/odbij priključke za slušanje"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Priključci za slušanje"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Sačuvani dozvoljeni priključci"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Dozvolite novi priključak"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Unesite broj novog priključka"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Sačuvaj"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Otkaži"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal zahtijeva otvaranje novog priključka"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Zatražen je priključak: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prihvati"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal je pokrenut"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknite da otvorite terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zatvori"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Omogućeno: <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ca/strings.xml b/android/TerminalApp/res/values-ca/strings.xml
index 7aea07d..eb8e687 100644
--- a/android/TerminalApp/res/values-ca/strings.xml
+++ b/android/TerminalApp/res/values-ca/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Pantalla del terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Línia buida"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Fes doble toc per escriure una entrada"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instal·la el terminal de Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Per iniciar el terminal de Linux, has de baixar uns <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de dades a través de la xarxa.\nVols continuar?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Baixa només mitjançant la Wi‑Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplica"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"El terminal es reiniciarà per canviar la mida del disc"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirma"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Control de ports"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permet o denega els ports d\'escolta"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Ports d\'escolta"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Ports permesos desats"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Permet un port nou"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Introdueix un número de port nou"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Desa"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancel·la"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"El terminal està sol·licitant obrir un port nou"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port sol·licitat: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepta"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"El terminal s\'està executant"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Fes clic per obrir el terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Tanca"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> està activat"</string>
</resources>
diff --git a/android/TerminalApp/res/values-cs/strings.xml b/android/TerminalApp/res/values-cs/strings.xml
index fd1061a..15b5b73 100644
--- a/android/TerminalApp/res/values-cs/strings.xml
+++ b/android/TerminalApp/res/values-cs/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Zobrazení terminálu"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kurzor"</string>
<string name="empty_line" msgid="5012067143408427178">"Prázdný řádek"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dvojitým klepnutím zadáte vstup"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalovat terminál Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Ke spuštění terminálu Linux je potřeba stáhnout přes datovou síť přibližně <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dat.\nChcete pokračovat?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Stahovat jen přes Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Použít"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminál se za účelem změny velikosti disku restartuje"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potvrdit"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Ovládání portů"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Povolit/zakázat naslouchající porty"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Naslouchající porty"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Uložené povolené porty"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Povolení nového portu"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Zadejte nové číslo portu"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Uložit"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Zrušit"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminál se pokouší otevřít nový port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Požadovaný port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Přijmout"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminál běží"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknutím otevřete terminál"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zavřít"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Modul <xliff:g id="ID_1">VirGL</xliff:g> je aktivován"</string>
</resources>
diff --git a/android/TerminalApp/res/values-da/strings.xml b/android/TerminalApp/res/values-da/strings.xml
index 8ecf47e..e1642e9 100644
--- a/android/TerminalApp/res/values-da/strings.xml
+++ b/android/TerminalApp/res/values-da/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalskærm"</string>
<string name="terminal_input" msgid="4602512831433433551">"Markør"</string>
<string name="empty_line" msgid="5012067143408427178">"Tom linje"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Tryk to gange for at indtaste tekst"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installer Linux-terminalen"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Du skal downloade ca. <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data via netværket for at starte Linux-terminalen.\nVil du fortsætte?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Download kun via Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Anvend"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminalen genstartes for at tilpasse diskens størrelse"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Bekræft"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portstyring"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Tillad/afvis aktive porte"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Aktive porte"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Gemte tilladte porte"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Tillad en ny port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Angiv et nyt portnummer"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Gem"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Annuller"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminalen anmoder om at åbne en ny port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port, der anmodes om: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Acceptér"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminalen kører"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klik for at åbne terminalen"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Luk"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> er aktiveret"</string>
</resources>
diff --git a/android/TerminalApp/res/values-de/strings.xml b/android/TerminalApp/res/values-de/strings.xml
index d0d5604..6d09943 100644
--- a/android/TerminalApp/res/values-de/strings.xml
+++ b/android/TerminalApp/res/values-de/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalanzeige"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Leere Zeile"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Doppeltippen, um Text einzugeben"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux-Terminal installieren"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Damit du das Linux-Terminal starten kannst, musst du ungefähr <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> an Daten über das Netzwerk herunterladen.\nMöchtest du fortfahren?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Nur über WLAN herunterladen"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Anwenden"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal wird neu gestartet, um die Größe des Laufwerks anzupassen"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Bestätigen"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portsteuerung"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Überwachungsports zulassen / ablehnen"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Überwachungsports"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Gespeicherte zulässige Ports"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Neuen Port zulassen"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Neue Portnummer eingeben"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Speichern"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Abbrechen"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal fordert an, einen neuen Port zu öffnen"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Angeforderter Port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Akzeptieren"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal wird ausgeführt"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Zum Öffnen des Terminals klicken"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Schließen"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ist aktiviert"</string>
</resources>
diff --git a/android/TerminalApp/res/values-el/strings.xml b/android/TerminalApp/res/values-el/strings.xml
index 7178dfa..6a274f1 100644
--- a/android/TerminalApp/res/values-el/strings.xml
+++ b/android/TerminalApp/res/values-el/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Προβολή τερματικού"</string>
<string name="terminal_input" msgid="4602512831433433551">"Δείκτης"</string>
<string name="empty_line" msgid="5012067143408427178">"Κενή γραμμή"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Πατήστε δύο φορές, για να πληκτρολογήσετε είσοδο"</string>
<string name="installer_title_text" msgid="500663060973466805">"Εγκατάσταση τερματικού Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Για την εκκίνηση του τερματικού Linux, πρέπει να κατεβάσετε περίπου <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> δεδομένων μέσω δικτύου.\nΘέλετε να συνεχίσετε;"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Λήψη μόνο μέσω Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Εφαρμογή"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Θα γίνει επανεκκίνηση του τερματικού για αλλαγή μεγέθους δίσκου"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Επιβεβαίωση"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Έλεγχος θυρών"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Να επιτρέπονται/μην επιτρέπονται οι θύρες ακρόασης"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Θύρες ακρόασης"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Αποθηκευμένες επιτρεπόμενες θύρες"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Να επιτρέπεται νέα θύρα"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Καταχωρίστε νέο αριθμό θύρας"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Αποθήκευση"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Ακύρωση"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Το τερματικό ζητά να ανοίξει μια νέα θύρα"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Ζητήθηκε θύρα: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Αποδοχή"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Το τερματικό εκτελείται"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Κάντε κλικ για άνοιγμα του τερματικού"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Κλείσιμο"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Το <xliff:g id="ID_1">VirGL</xliff:g> είναι ενεργοποιημένο"</string>
</resources>
diff --git a/android/TerminalApp/res/values-en-rAU/strings.xml b/android/TerminalApp/res/values-en-rAU/strings.xml
index 8a2391f..9365f44 100644
--- a/android/TerminalApp/res/values-en-rAU/strings.xml
+++ b/android/TerminalApp/res/values-en-rAU/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Double-tap to type input"</string>
<string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"To launch Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Download using Wi-Fi only"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Apply"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal will be restarted to resize disk"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirm"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Port control"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Allow/deny listening ports"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Listening ports"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Saved allowed ports"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Allow a new port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Enter a new port number"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Save"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancel"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal is requesting to open a new port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port requested: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Click to open terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
</resources>
diff --git a/android/TerminalApp/res/values-en-rCA/strings.xml b/android/TerminalApp/res/values-en-rCA/strings.xml
index c35381d..ebf3f21 100644
--- a/android/TerminalApp/res/values-en-rCA/strings.xml
+++ b/android/TerminalApp/res/values-en-rCA/strings.xml
@@ -78,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Click to open terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
</resources>
diff --git a/android/TerminalApp/res/values-en-rGB/strings.xml b/android/TerminalApp/res/values-en-rGB/strings.xml
index 8a2391f..9365f44 100644
--- a/android/TerminalApp/res/values-en-rGB/strings.xml
+++ b/android/TerminalApp/res/values-en-rGB/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Double-tap to type input"</string>
<string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"To launch Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Download using Wi-Fi only"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Apply"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal will be restarted to resize disk"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirm"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Port control"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Allow/deny listening ports"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Listening ports"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Saved allowed ports"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Allow a new port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Enter a new port number"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Save"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancel"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal is requesting to open a new port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port requested: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Click to open terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
</resources>
diff --git a/android/TerminalApp/res/values-en-rIN/strings.xml b/android/TerminalApp/res/values-en-rIN/strings.xml
index 8a2391f..9365f44 100644
--- a/android/TerminalApp/res/values-en-rIN/strings.xml
+++ b/android/TerminalApp/res/values-en-rIN/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Double-tap to type input"</string>
<string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"To launch Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Download using Wi-Fi only"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Apply"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal will be restarted to resize disk"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirm"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Port control"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Allow/deny listening ports"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Listening ports"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Saved allowed ports"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Allow a new port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Enter a new port number"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Save"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancel"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal is requesting to open a new port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port requested: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Click to open terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
</resources>
diff --git a/android/TerminalApp/res/values-es-rUS/strings.xml b/android/TerminalApp/res/values-es-rUS/strings.xml
index 5de263f..e11b5ae 100644
--- a/android/TerminalApp/res/values-es-rUS/strings.xml
+++ b/android/TerminalApp/res/values-es-rUS/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Pantalla de la terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Línea vacía"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Presiona dos veces para escribir la entrada"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instala la terminal de Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Para iniciar la terminal de Linux, debes descargar aproximadamente <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de datos a través de la red.\n¿Quieres continuar?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Descargar solo con Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplicar"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Se reiniciará la terminal para cambiar el tamaño del disco"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmar"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Control del puerto"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permitir o denegar los puertos de escucha"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Puertos de escucha"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Puertos permitidos guardados"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Permite un puerto nuevo"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Ingresa un nuevo número de portabilidad"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Guardar"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancelar"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"La terminal está solicitando abrir un puerto nuevo"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Puerto solicitado: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceptar"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Se está ejecutando la terminal"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Haz clic para abrir la terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Cerrar"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Se habilitó <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-es/strings.xml b/android/TerminalApp/res/values-es/strings.xml
index e52a09d..47f0e67 100644
--- a/android/TerminalApp/res/values-es/strings.xml
+++ b/android/TerminalApp/res/values-es/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Pantalla del terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Línea vacía"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Toca dos veces para escribir"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instala el terminal de Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Para iniciar el terminal de Linux, debes descargar unos <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de datos a través de la red.\n¿Quieres continuar?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Descargar contenido solo con una conexión Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplicar"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"El terminal se reiniciará para cambiar el tamaño del disco"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmar"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Control de puerto"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permitir/Denegar puertos de escucha"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Puertos de escucha"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Puertos permitidos guardados"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Permitir un nuevo puerto"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Introduce un nuevo número de puerto"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Guardar"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancelar"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"El terminal está solicitando abrir un nuevo puerto"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Puerto solicitado: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceptar"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"El terminal se está ejecutando"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Haz clic para abrir el terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Cerrar"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> se ha habilitado"</string>
</resources>
diff --git a/android/TerminalApp/res/values-et/strings.xml b/android/TerminalApp/res/values-et/strings.xml
index e9d49ea..bb31e49 100644
--- a/android/TerminalApp/res/values-et/strings.xml
+++ b/android/TerminalApp/res/values-et/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminali ekraan"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Tühi rida"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Tekstisisestuseks topeltpuudutage"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linuxi terminali installimine"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linuxi terminali käivitamiseks tuleb teil võrgu kaudu alla laadida umbes <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> andmeid.\nKas soovite jätkata?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Laadi alla ainult WiFi kaudu"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Rakenda"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal taaskäivitatakse ketta suuruse muutmiseks"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Kinnita"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portide haldamine"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Kuulamisportide lubamine/keelamine"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Kuulamispordid"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Salvestatud lubatud pordid"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Luba uus port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Sisestage uus pordi number"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Salvesta"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Tühista"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal taotleb uue pordi avamist"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Taotletud port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Nõustu"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal töötab"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klõpsake terminali avamiseks"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Sule"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> on lubatud"</string>
</resources>
diff --git a/android/TerminalApp/res/values-eu/strings.xml b/android/TerminalApp/res/values-eu/strings.xml
index 7d53702..6176283 100644
--- a/android/TerminalApp/res/values-eu/strings.xml
+++ b/android/TerminalApp/res/values-eu/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalaren pantaila"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kurtsorea"</string>
<string name="empty_line" msgid="5012067143408427178">"Lerro hutsa"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Sakatu birritan testua idazteko"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalatu Linux-en terminala"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux-en terminala exekutatzeko, gutxi gorabehera <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> datu deskargatu behar dituzu sarearen bidez.\nAurrera egin nahi duzu?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Deskargatu wifi bidez soilik"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplikatu"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Diskoaren tamaina aldatzeko, terminala berrabiaraziko da"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Berretsi"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Ataka kontrolatzeko aukerak"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Onartu/Baztertu ataka aktiboak"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Ataka aktiboak"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Gorde dira onartutako atakak"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Onartu beste ataka bat"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Idatzi beste ataka-zenbaki bat"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Gorde"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Utzi"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminalak beste ataka bat irekitzeko eskatu du"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Ataka hau eskatu da: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Onartu"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminala abian da"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Egin klik terminala irekitzeko"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Itxi"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> gaituta dago"</string>
</resources>
diff --git a/android/TerminalApp/res/values-fa/strings.xml b/android/TerminalApp/res/values-fa/strings.xml
index 20b66f9..0ba11cb 100644
--- a/android/TerminalApp/res/values-fa/strings.xml
+++ b/android/TerminalApp/res/values-fa/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"نمایشگر پایانه"</string>
<string name="terminal_input" msgid="4602512831433433551">"مکاننما"</string>
<string name="empty_line" msgid="5012067143408427178">"خط خالی"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"برای تایپ کردن ورودی، دو تکضرب بزنید"</string>
<string name="installer_title_text" msgid="500663060973466805">"نصب پایانه Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"برای راهاندازی پایانه Linux، باید تقریباً <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> داده ازطریق شبکه بارگیری کنید.\nادامه میدهید؟"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"بارگیری فقط با Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"اعمال کردن"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"پایانه برای تغییر اندازه دیسک، بازراهاندازی خواهد شد"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"تأیید کردن"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"کنترل درگاه"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"مجاز/ رد کردن درگاههای گوش کردن"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"درگاههای گوش کردن"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"درگاههای مجاز ذخیره شدند"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"مجاز کردن درگاهی جدید"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"شماره درگاه جدیدی را وارد کنید"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"ذخیره"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"لغو"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"پایانه میخواهد درگاه جدیدی باز کند"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"درگاه درخواستشده: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"پذیرفتن"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"پایانه درحال اجرا است"</string>
<string name="service_notification_content" msgid="5772901142342308273">"برای باز کردن پایانه، کلیک کنید"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"بستن"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> فعال شد"</string>
</resources>
diff --git a/android/TerminalApp/res/values-fi/strings.xml b/android/TerminalApp/res/values-fi/strings.xml
index 6a5aaa4..70a2930 100644
--- a/android/TerminalApp/res/values-fi/strings.xml
+++ b/android/TerminalApp/res/values-fi/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminaalinäyttö"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kohdistin"</string>
<string name="empty_line" msgid="5012067143408427178">"Tyhjä rivi"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Kirjoitussyötä kaksoisnapauttamalla"</string>
<string name="installer_title_text" msgid="500663060973466805">"Asenna Linux-pääte"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux-päätteen käynnistäminen edellyttää, että lataat noin <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dataa verkon kautta.\nHaluatko jatkaa?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Lataaminen vain Wi-Fi-yhteydellä"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Käytä"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Levyn kokoa muutetaan uudelleenkäynnistyksen jälkeen"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Vahvista"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Porttien ohjaus"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Salli/kiellä kuunteluportit"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Kuunteluportit"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Tallennetut sallitut portit"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Salli uusi portti"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Lisää uusi porttinumero"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Tallenna"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Peru"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Pääte yrittää avata uuden portin"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Pyydetty portti: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Hyväksy"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Pääte on käynnissä"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Avaa pääte klikkaamalla"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Sulje"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> on käytössä"</string>
</resources>
diff --git a/android/TerminalApp/res/values-fr-rCA/strings.xml b/android/TerminalApp/res/values-fr-rCA/strings.xml
index 17ec514..8c4b225 100644
--- a/android/TerminalApp/res/values-fr-rCA/strings.xml
+++ b/android/TerminalApp/res/values-fr-rCA/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Écran du terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Curseur"</string>
<string name="empty_line" msgid="5012067143408427178">"La ligne est vide"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Toucher deux fois pour saisir une entrée"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installer le terminal Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Pour lancer un terminal Linux, vous devez télécharger environ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de données sur le réseau.\nSouhaitez-vous continuer?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Télécharger par Wi-Fi seulement"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Appliquer"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Le terminal sera redémarré pour redimensionner le disque"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmer"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Contrôle du port"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Autoriser/Refuser les ports en mode Réception"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Ports en mode Réception"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Ports autorisés enregistrés"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Autoriser un nouveau port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Entrez un nouveau numéro de port"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Enregistrer"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Annuler"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Le terminal demande d\'ouvrir un nouveau port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port demandé : <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepter"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Le terminal fonctionne"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Cliquez pour ouvrir le terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Fermer"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> est activé"</string>
</resources>
diff --git a/android/TerminalApp/res/values-fr/strings.xml b/android/TerminalApp/res/values-fr/strings.xml
index 9e92e91..7f4e6ac 100644
--- a/android/TerminalApp/res/values-fr/strings.xml
+++ b/android/TerminalApp/res/values-fr/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Affichage du terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Curseur"</string>
<string name="empty_line" msgid="5012067143408427178">"Ligne vide"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Appuyez deux fois pour saisir une entrée"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installer le terminal Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Pour lancer le terminal Linux, vous devez télécharger environ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de données via le réseau.\nVoulez-vous continuer ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Télécharger uniquement via le Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Appliquer"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Le terminal sera redémarré pour redimensionner le disque"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmer"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Contrôle de port"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Autoriser/refuser les ports d\'écoute"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Ports d\'écoute"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Ports autorisés enregistrés"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Autoriser un nouveau port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Saisissez le numéro du nouveau port"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Enregistrer"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Annuler"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Le terminal demande l\'ouverture d\'un nouveau port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port demandé : <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepter"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal en cours d\'exécution"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Cliquez pour ouvrir le terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Fermer"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> est activé"</string>
</resources>
diff --git a/android/TerminalApp/res/values-gl/strings.xml b/android/TerminalApp/res/values-gl/strings.xml
index 4a91b10..08a77d8 100644
--- a/android/TerminalApp/res/values-gl/strings.xml
+++ b/android/TerminalApp/res/values-gl/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Pantalla do terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Liña baleira"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Toca dúas veces para escribir texto"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalar o terminal de Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Para iniciar o terminal de Linux, tes que descargar aproximadamente <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de datos a través da rede.\nQueres continuar?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Descargar só por wifi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplicar"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"O terminal reiniciarase para cambiar o tamaño do disco"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmar"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Control de portos"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permitir ou rexeitar portos de escoita"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Portos de escoita"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Gardáronse os portos permitidos"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Permitir outro porto"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Mete outro número de porto"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Gardar"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancelar"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"O terminal está solicitando que se abra outro porto"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Porto solicitado: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceptar"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"O terminal está en funcionamento"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Fai clic para abrir o terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Pechar"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Activouse <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-gu/strings.xml b/android/TerminalApp/res/values-gu/strings.xml
index 3ec76be..bf7d228 100644
--- a/android/TerminalApp/res/values-gu/strings.xml
+++ b/android/TerminalApp/res/values-gu/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ટર્મિનલ ડિસ્પ્લે"</string>
<string name="terminal_input" msgid="4602512831433433551">"કર્સર"</string>
<string name="empty_line" msgid="5012067143408427178">"ખાલી લાઇન"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ઇનપુટ ટાઇપ કરવા માટે બે વાર ટૅપ કરો"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ટર્મિનલ ઇન્સ્ટૉલ કરો"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ટર્મિનલ લૉન્ચ કરવા માટે, તમારે નેટવર્ક પર આશરે <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ડેટા ડાઉનલોડ કરવાની જરૂર છે.\nશું તમે આગળ વધવા માગો છો?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"માત્ર વાઇ-ફાઇનો ઉપયોગ કરીને ડાઉનલોડ કરો"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"લાગુ કરો"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ડિસ્કનું કદ બદલવા માટે ટર્મિનલને ફરી શરુ કરવામાં આવશે"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"કન્ફર્મ કરો"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"પોર્ટ નિયંત્રણ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"સાંભળનાર પોર્ટને મંજૂરી આપો/નકારો"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"સાંભળનાર પોર્ટ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"સાચવેલા મંજૂરીપ્રાપ્ત પોર્ટ"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"નવા પોર્ટને મંજૂરી આપો"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"નવો પોર્ટ નંબર દાખલ કરો"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"સાચવો"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"રદ કરો"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ટર્મિનલ નવું પોર્ટ ખોલવા માટે વિનંતી કરી રહ્યું છે"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"પોર્ટની વિનંતી કરવામાં આવી: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"સ્વીકારો"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ટર્મિનલ ચાલી રહ્યું છે"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ટર્મિનલ ખોલવા માટે ક્લિક કરો"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"બંધ કરો"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ચાલુ કરેલું છે"</string>
</resources>
diff --git a/android/TerminalApp/res/values-hi/strings.xml b/android/TerminalApp/res/values-hi/strings.xml
index 42241ea..2fc0624 100644
--- a/android/TerminalApp/res/values-hi/strings.xml
+++ b/android/TerminalApp/res/values-hi/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"टर्मिनल डिसप्ले"</string>
<string name="terminal_input" msgid="4602512831433433551">"कर्सर."</string>
<string name="empty_line" msgid="5012067143408427178">"खाली लाइन"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"इनपुट टाइप करने के लिए, दो बार टैप करें"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux टर्मिनल ऐप्लिकेशन इंस्टॉल करें"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux टर्मिनल ऐप्लिकेशन को लॉन्च करने के लिए, आपको इंटरनेट का इस्तेमाल करके <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> डेटा डाउनलोड करना होगा.\nक्या आपको आगे बढ़ना है?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"सिर्फ़ वाई-फ़ाई का इस्तेमाल करके डाउनलोड करें"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"लागू करें"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"डिस्क का साइज़ बदलने के लिए, टर्मिनल को रीस्टार्ट किया जाएगा"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"पुष्टि करें"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"पोर्ट कंट्रोल"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"लिसनिंग पोर्ट को अनुमति दें या अनुमति न दें"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"लिसनिंग पोर्ट"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"अनुमति पा चुके सभी पोर्ट को सेव किया गया"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"नए पोर्ट को अनुमति दें"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"नया पोर्ट नंबर डालें"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"सेव करें"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"रद्द करें"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"टर्मिनल, एक नया पोर्ट खोलने का अनुरोध कर रहा है"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"पोर्ट खोलने का अनुरोध किया गया: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"स्वीकार करें"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"टर्मिनल चालू है"</string>
<string name="service_notification_content" msgid="5772901142342308273">"टर्मिनल खोलने के लिए क्लिक करें"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"बंद करें"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> चालू है"</string>
</resources>
diff --git a/android/TerminalApp/res/values-hr/strings.xml b/android/TerminalApp/res/values-hr/strings.xml
index 3c379fe..f92527c 100644
--- a/android/TerminalApp/res/values-hr/strings.xml
+++ b/android/TerminalApp/res/values-hr/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Zaslon terminala"</string>
<string name="terminal_input" msgid="4602512831433433551">"Pokazivač"</string>
<string name="empty_line" msgid="5012067143408427178">"Prazan redak"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dvaput dodirnite za unos"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalirajte Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Da biste pokrenuli Linux terminal, trebate preuzeti oko <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podataka putem mreže.\nŽelite li nastaviti?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Preuzimanje samo putem Wi-Fi mreže"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Primijeni"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal će se ponovo pokrenuti da bi se promijenila veličina diska"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potvrdi"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kontrola priključka"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Dopusti/odbij priključke za slušanje"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Priključci za slušanje"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Spremljeni dopušteni priključci"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Dopusti novi priključak"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Unesite novi broj priključka"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Spremi"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Odustani"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal zahtijeva da se otvori novi priključak"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Zatraženi priključak: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prihvati"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal je pokrenut"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknite da biste otvorili terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zatvori"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Omogućeno je: <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-hu/strings.xml b/android/TerminalApp/res/values-hu/strings.xml
index e59743e..8ea2175 100644
--- a/android/TerminalApp/res/values-hu/strings.xml
+++ b/android/TerminalApp/res/values-hu/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminálkijelző"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kurzor"</string>
<string name="empty_line" msgid="5012067143408427178">"Üres sor"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"A bevitel beírásához koppintson duplán"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux-terminál telepítése"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"A Linux-terminál elindításához körülbelül <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> adatmennyiséget kell letöltenie a hálózaton keresztül.\nFolytatja?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Letöltés csak Wi-Fi-kapcsolattal"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Alkalmazás"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"A lemez átméretezése miatt a terminál újraindul"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Megerősítés"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portvezérlés"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Figyelő portok engedélyezése/letiltása"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Figyelő portok"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Mentett engedélyezett portok"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Új port engedélyezése"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Adja meg az új portszámot"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Mentés"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Mégse"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"A terminál új port megnyitását kéri"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Kért port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Elfogadás"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"A terminál fut"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kattintson a terminál megnyitásához"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Bezárás"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"A(z) <xliff:g id="ID_1">VirGL</xliff:g> engedélyezve van"</string>
</resources>
diff --git a/android/TerminalApp/res/values-hy/strings.xml b/android/TerminalApp/res/values-hy/strings.xml
index 9e29d72..3b996c6 100644
--- a/android/TerminalApp/res/values-hy/strings.xml
+++ b/android/TerminalApp/res/values-hy/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Տերմինալի էկրան"</string>
<string name="terminal_input" msgid="4602512831433433551">"Նշորդ"</string>
<string name="empty_line" msgid="5012067143408427178">"Դատարկ տող"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Կրկնակի հպեք մուտքագրելու համար"</string>
<string name="installer_title_text" msgid="500663060973466805">"Լինուքս տերմինալի տեղադրում"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Լինուքս տերմինալը գործարկելու համար անհրաժեշտ է ցանցի միջոցով ներբեռնել մոտ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> տվյալ։\nՇարունակե՞լ։"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Ներբեռնել միայն Wi-Fi-ով"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Կիրառել"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Տերմինալը կվերագործարկվի սկավառակի չափը փոխելու համար"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Հաստատել"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Միացքների կառավարում"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Թույլատրել/մերժել ունկնդրման միացքները"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Ունկնդրման միացքներ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Պահված թույլատրված միացքներ"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Թույլատրել նոր միացք"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Մուտքագրեք նոր միացքի համարը"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Պահել"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Չեղարկել"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Տերմինալը խնդրում է նոր միացք բացել"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Հարցված միացքը՝ <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Ընդունել"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Տերմինալն աշխատում է"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Սեղմեք՝ տերմինալը բացելու համար"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Փակել"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>-ը միացված է"</string>
</resources>
diff --git a/android/TerminalApp/res/values-in/strings.xml b/android/TerminalApp/res/values-in/strings.xml
index e1d9679..5dbaf46 100644
--- a/android/TerminalApp/res/values-in/strings.xml
+++ b/android/TerminalApp/res/values-in/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Tampilan terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Baris kosong"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Ketuk dua kali untuk mengetik input"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instal terminal Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Untuk meluncurkan terminal Linux, Anda perlu mendownload sekitar <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data melalui jaringan.\nApakah Anda ingin melanjutkan?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Hanya download melalui Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Terapkan"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal akan dimulai ulang untuk mengubah ukuran disk"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Konfirmasi"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kontrol port"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Izinkan/tolak port yang sedang dalam proses"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Port yang sedang dalam proses"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Port yang diizinkan tersimpan"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Izinkan port baru"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Masukkan nomor port baru"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Simpan"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Batal"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal meminta untuk membuka port baru"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port yang diminta: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Terima"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal sedang berjalan"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klik untuk membuka terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Tutup"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> diaktifkan"</string>
</resources>
diff --git a/android/TerminalApp/res/values-is/strings.xml b/android/TerminalApp/res/values-is/strings.xml
index b6a8651..7155563 100644
--- a/android/TerminalApp/res/values-is/strings.xml
+++ b/android/TerminalApp/res/values-is/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Skjár útstöðvar"</string>
<string name="terminal_input" msgid="4602512831433433551">"Bendill"</string>
<string name="empty_line" msgid="5012067143408427178">"Auð lína"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Ýttu tvisvar til að slá inn ílag"</string>
<string name="installer_title_text" msgid="500663060973466805">"Setja upp Linux-útstöð"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Þú þarft að sækja um <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> af gögnum í gegnum netið til að ræsa Linux-útstöð.\nViltu halda áfram?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Sækja með Wi-Fi eingöngu"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Nota"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Útstöðin verður endurræst til að breyta stærk disks"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Staðfesta"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Gáttarstýring"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Leyfa hlustunargáttir/hafna hlustunargáttum"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Hlustunargáttir"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Vistaðar leyfðar gáttir"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Leyfa nýja gátt"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Slá inn nýtt gáttarnúmer"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Vista"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Hætta við"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Útstöðin bað um að opna nýja gátt"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Beiðni um gátt: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Samþykkja"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Útstöð er í gangi"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Smelltu til að opna útstöðina"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Loka"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Kveikt er á <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-it/strings.xml b/android/TerminalApp/res/values-it/strings.xml
index 9a23727..e13b218 100644
--- a/android/TerminalApp/res/values-it/strings.xml
+++ b/android/TerminalApp/res/values-it/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Display terminale"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursore"</string>
<string name="empty_line" msgid="5012067143408427178">"Riga vuota"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Tocca due volte per digitare l\'input"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installa terminale Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Per avviare il terminale Linux, devi scaricare circa <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> di dati tramite la rete.\nContinuare?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Scarica solo tramite Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Applica"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Il terminale verrà riavviato per ridimensionare il disco"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Conferma"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Controllo porte"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Consenti/rifiuta porte di ascolto"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Porte di ascolto"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Porte consentite salvate"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Consenti una nuova porta"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Inserisci un nuovo numero di porta"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Salva"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Annulla"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Il terminale sta chiedendo di aprire una nuova porta"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Porta richiesta: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accetta"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Il terminale è in esecuzione"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Fai clic per aprire il terminale"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Chiudi"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> è abilitata"</string>
</resources>
diff --git a/android/TerminalApp/res/values-iw/strings.xml b/android/TerminalApp/res/values-iw/strings.xml
index 0d0b2d9..efadaeb 100644
--- a/android/TerminalApp/res/values-iw/strings.xml
+++ b/android/TerminalApp/res/values-iw/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"תצוגת טרמינל"</string>
<string name="terminal_input" msgid="4602512831433433551">"סמן"</string>
<string name="empty_line" msgid="5012067143408427178">"שורה ריקה"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"כדי להקליד טקסט צריך להקיש הקשה כפולה"</string>
<string name="installer_title_text" msgid="500663060973466805">"התקנה של טרמינל Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"כדי להפעיל את טרמינל Linux, צריך להוריד נתונים בנפח של בערך <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> דרך הרשת.\nלהמשיך?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"הורדה רק באמצעות Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"אישור"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"הטרמינל יופעל מחדש כדי שגודל הדיסק ישתנה"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"אישור"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"בקרת יציאות"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"אישור או דחייה של יציאות להאזנה"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"יציאות להאזנה"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"יציאות מורשות שנשמרו"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"אישור ליציאה חדשה"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"צריך להזין מספר של יציאה חדשה"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"שמירה"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ביטול"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"הטרמינל מבקש לפתוח יציאה חדשה"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"נשלחה בקשה ליציאה: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"אישור"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"הטרמינל פועל"</string>
<string name="service_notification_content" msgid="5772901142342308273">"כדי לפתוח את הטרמינל, צריך ללחוץ כאן"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"סגירה"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> מופעל"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ja/strings.xml b/android/TerminalApp/res/values-ja/strings.xml
index b100d77..cd0ceef 100644
--- a/android/TerminalApp/res/values-ja/strings.xml
+++ b/android/TerminalApp/res/values-ja/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ターミナルの表示"</string>
<string name="terminal_input" msgid="4602512831433433551">"カーソル"</string>
<string name="empty_line" msgid="5012067143408427178">"空の行"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ダブルタップしてタイプ入力します"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ターミナルをインストールする"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ターミナルを起動するには、ネットワーク経由で約 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> のデータのダウンロードが必要です。\n続行しますか?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi 使用時にのみダウンロードする"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"適用"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ディスクのサイズを変更するためにターミナルが再起動します"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"確認"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ポートの管理"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"リスニング ポートの許可 / 拒否"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"リスニング ポート"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"保存済みの許可ポート"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"新しいポートを許可する"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"新しいポート番号を入力してください"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"保存"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"キャンセル"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ターミナルが新しいポートを開くリクエストをしました"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"移行リクエスト済み: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"許可する"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ターミナルは実行中です"</string>
<string name="service_notification_content" msgid="5772901142342308273">"クリックするとターミナルが開きます"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"閉じる"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>は有効です"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ka/strings.xml b/android/TerminalApp/res/values-ka/strings.xml
index fe11adb..67768e0 100644
--- a/android/TerminalApp/res/values-ka/strings.xml
+++ b/android/TerminalApp/res/values-ka/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ტერმინალის წარმოჩენა"</string>
<string name="terminal_input" msgid="4602512831433433551">"კურსორი"</string>
<string name="empty_line" msgid="5012067143408427178">"ცარიელი სტრიქონი"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ორმაგად შეეხეთ ასაკრეფად"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ტერმინალის ინსტალაცია"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ტერმინალის გაშვებისთვის საჭიროა ქსელიდან ჩამოტვირთოთ დაახლოებით <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ზომის მონაცემები.\nგსურთ გაგრძელება?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"ჩამოტვირთვა მხოლოდ Wi-Fi-ს გამოყენებით"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"გამოყენება"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"დისკის ზომის შესაცვლელად გადაიტვირთება ტერმინალი"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"დადასტურება"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"პორტის მართვა"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"მოსმენის პორტების დაშვება/აკრძალვა"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"მოსმენის პორტები"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"შენახული დაშვებული პორტები"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"ახალი პორტის დაშვება"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"შეიყვანეთ ახალი პორტის ნომერი"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"შენახვა"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"გაუქმება"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ტერმინალი ითხოვს ახალი პორტის გახსნას"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"მოთხოვნილი პორტი: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"დათანხმება"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ტერმინალი გაშვებულია"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ტერმინალის გასახსნელად დააწკაპუნეთ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"დახურვა"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ჩართულია"</string>
</resources>
diff --git a/android/TerminalApp/res/values-kk/strings.xml b/android/TerminalApp/res/values-kk/strings.xml
index fbc6f23..fd7e3dc 100644
--- a/android/TerminalApp/res/values-kk/strings.xml
+++ b/android/TerminalApp/res/values-kk/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Терминал дисплейі"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Бос жол"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Теру үшін екі рет түртіңіз."</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux терминалын орнату"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux терминалын іске қосу үшін желі арқылы шамамен <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> деректі жүктеп алу қажет.\nЖалғастырғыңыз келе ме?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Тек Wi-Fi арқылы жүктеп алу"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Қолдану"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Диск өлшемін өзгерту үшін терминал өшіріліп қосылады."</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Растау"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Портты басқару"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Тыңдау порттарына рұқсат беру/тыйым салу"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Тыңдау порттары"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Рұқсат берілген порттар сақталды"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Жаңа портқа рұқсат беру"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Жаңа порт нөмірін енгізіңіз."</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Сақтау"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Бас тарту"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминал жаңа порт ашуды сұрайды"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Қажетті порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Қабылдау"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминал іске қосылып тұр"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Терминалды ашу үшін түртіңіз."</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Жабу"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> қосылды."</string>
</resources>
diff --git a/android/TerminalApp/res/values-km/strings.xml b/android/TerminalApp/res/values-km/strings.xml
index 8976e59..167ac7c 100644
--- a/android/TerminalApp/res/values-km/strings.xml
+++ b/android/TerminalApp/res/values-km/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ផ្ទាំងអេក្រង់ទែមីណាល់"</string>
<string name="terminal_input" msgid="4602512831433433551">"ទស្សន៍ទ្រនិច"</string>
<string name="empty_line" msgid="5012067143408427178">"ជួរទទេ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ចុចពីរដងដើម្បីវាយបញ្ចូលខ្លឹមសារ"</string>
<string name="installer_title_text" msgid="500663060973466805">"ដំឡើងទែមីណាល់ Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"ដើម្បីបើកដំណើរការទែមីណាល់ Linux, អ្នកត្រូវទាញយកទិន្នន័យប្រហែលជា <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> នៅលើបណ្ដាញ។\nតើអ្នកចង់បន្តដែរឬទេ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"ទាញយកដោយប្រើតែ Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ដាក់ប្រើ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ទែមីណាល់នឹងត្រូវបានចាប់ផ្ដើមឡើងវិញ ដើម្បីប្ដូរទំហំថាស"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"បញ្ជាក់"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ការគ្រប់គ្រងច្រក"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"អនុញ្ញាត/បដិសេធច្រកស្ដាប់"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ច្រកស្ដាប់"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"បានរក្សាទុកច្រកដែលត្រូវបានអនុញ្ញាត"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"អនុញ្ញាតច្រកថ្មី"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"បញ្ចូលលេខច្រកថ្មី"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"រក្សាទុក"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"បោះបង់"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ទែមីណាល់កំពុងស្នើសុំបើកច្រកថ្មី"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"បានស្នើសុំច្រក៖ <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ទទួលយក"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ទែមីណាល់កំពុងដំណើរការ"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ចុចដើម្បីបើកទែមីណាល់"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"បិទ"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ត្រូវបានបើក"</string>
</resources>
diff --git a/android/TerminalApp/res/values-kn/strings.xml b/android/TerminalApp/res/values-kn/strings.xml
index ae55b56..0d815f8 100644
--- a/android/TerminalApp/res/values-kn/strings.xml
+++ b/android/TerminalApp/res/values-kn/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ಟರ್ಮಿನಲ್ ಪ್ರದರ್ಶನ"</string>
<string name="terminal_input" msgid="4602512831433433551">"ಕರ್ಸರ್"</string>
<string name="empty_line" msgid="5012067143408427178">"ಖಾಲಿ ಸಾಲು"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ಇನ್ಪುಟ್ ಟೈಪ್ ಮಾಡಲು ಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ಟರ್ಮಿನಲ್ ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ಟರ್ಮಿನಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು, ನೀವು ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸುಮಾರು <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ಡೇಟಾವನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.\nನೀವು ಮುಂದುವರಿಸಲು ಬಯಸುತ್ತೀರಾ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"ವೈ-ಫೈ ಅನ್ನು ಮಾತ್ರ ಬಳಸಿ ಡೌನ್ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ಅನ್ವಯಿಸಿ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ಡಿಸ್ಕ್ ಅನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸಲು ಟರ್ಮಿನಲ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲಾಗುತ್ತದೆ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"ದೃಢೀಕರಿಸಿ"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ಪೋರ್ಟ್ ನಿಯಂತ್ರಣ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"ಆಲಿಸುವ ಪೋರ್ಟ್ಗಳನ್ನು ಅನುಮತಿಸಿ/ನಿರಾಕರಿಸಿ"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ಆಲಿಸುವ ಪೋರ್ಟ್ಗಳು"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"ಅನುಮತಿಸಲಾದ ಪೋರ್ಟ್ಗಳನ್ನು ಸೇವ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"ಹೊಸ ಪೋರ್ಟ್ ಅನ್ನು ಅನುಮತಿಸಿ"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"ಹೊಸ ಪೋರ್ಟ್ ಸಂಖ್ಯೆವೊಂದನ್ನು ನಮೂದಿಸಿ"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"ಸೇವ್ ಮಾಡಿ"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ರದ್ದುಮಾಡಿ"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ಟರ್ಮಿನಲ್ ಹೊಸ ಪೋರ್ಟ್ ಅನ್ನು ತೆರೆಯಲು ವಿನಂತಿಸುತ್ತಿದೆ"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"ಪೋರ್ಟ್ ಅನ್ನು ವಿನಂತಿಸಲಾಗಿದೆ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ಸಮ್ಮತಿಸಿ"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ಟರ್ಮಿನಲ್ ರನ್ ಆಗುತ್ತಿದೆ"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ಟರ್ಮಿನಲ್ ಅನ್ನು ತೆರೆಯಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ಮುಚ್ಚಿರಿ"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ko/strings.xml b/android/TerminalApp/res/values-ko/strings.xml
index 58db30d..2cd415c 100644
--- a/android/TerminalApp/res/values-ko/strings.xml
+++ b/android/TerminalApp/res/values-ko/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"터미널 디스플레이"</string>
<string name="terminal_input" msgid="4602512831433433551">"커서"</string>
<string name="empty_line" msgid="5012067143408427178">"빈 줄"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"두 번 탭하여 입력"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux 터미널 설치"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux 터미널을 실행하려면 네트워크를 통해 약 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g>의 데이터를 다운로드해야 합니다.\n계속하시겠습니까?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi를 통해서만 다운로드"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"적용"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"디스크 크기를 조절하기 위해 터미널이 다시 시작됩니다."</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"확인"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"포트 제어"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"리스닝 포트 허용/거부"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"리스닝 포트"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"저장된 허용 포트"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"새 포트 허용"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"새 포트 번호 입력"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"저장"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"취소"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"터미널에서 새 포트를 열려고 합니다"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"요청된 포트: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"수락"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"터미널이 실행 중입니다"</string>
<string name="service_notification_content" msgid="5772901142342308273">"터미널을 열려면 클릭하세요."</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"닫기"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>이(가) 사용 설정되었습니다."</string>
</resources>
diff --git a/android/TerminalApp/res/values-ky/strings.xml b/android/TerminalApp/res/values-ky/strings.xml
index d9b1287..0bc0998 100644
--- a/android/TerminalApp/res/values-ky/strings.xml
+++ b/android/TerminalApp/res/values-ky/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Терминалдын дисплейи"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Бош сап"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Терип киргизүү үчүн эки жолу таптаңыз"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux терминалын орнотуу"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux терминалын иштетүү үчүн болжол менен <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> маалыматты жүктөп алышыңыз керек.\nУлантасызбы?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi аркылуу гана жүктөп алуу"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Колдонуу"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Дисктин өлчөмүн өзгөртүү үчүн терминал өчүрүлүп күйгүзүлөт"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Ырастоо"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Портту көзөмөлдөө"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Угуу портторуна уруксат берүү/тыюу салуу"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Угуу порттору"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Уруксат берилген порттор сакталды"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Жаңы портко уруксат берүү"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Жаңы порттун номерин киргизиңиз"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Сактоо"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Жокко чыгаруу"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминал жаңы оюкчаны ачууну суранып жатат"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Оюкча суралды: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Кабыл алуу"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминал иштеп жатат"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Терминалды ачуу үчүн басыңыз"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Жабуу"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> иштетилди"</string>
</resources>
diff --git a/android/TerminalApp/res/values-lo/strings.xml b/android/TerminalApp/res/values-lo/strings.xml
index 750995b..4756d7d 100644
--- a/android/TerminalApp/res/values-lo/strings.xml
+++ b/android/TerminalApp/res/values-lo/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ຈໍສະແດງຜົນ Terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"ເຄີເຊີ"</string>
<string name="empty_line" msgid="5012067143408427178">"ແຖວຫວ່າງເປົ່າ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ແຕະສອງເທື່ອເພື່ອພິມການປ້ອນຂໍ້ມູນ"</string>
<string name="installer_title_text" msgid="500663060973466805">"ຕິດຕັ້ງເທີມິນອນ Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"ເພື່ອເປີດໃຊ້ເທີມິນອນ Linux, ທ່ານຈະຕ້ອງດາວໂຫຼດຂໍ້ມູນປະມານ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ຜ່ານເຄືອຂ່າຍ.\nທ່ານຕ້ອງການດຳເນີນການຕໍ່ບໍ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"ດາວໂຫຼດໂດຍໃຊ້ Wi-Fi ເທົ່ານັ້ນ"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ນຳໃຊ້"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ລະບົບຈະຣີສະຕາດເທີມິນອນເພື່ອປັບຂະໜາດດິສກ໌"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"ຢືນຢັນ"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ການຄວບຄຸມຜອດ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"ອະນຸຍາດ/ປະຕິເສດຜອດການຟັງ"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ຜອດການຟັງ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"ຜອດທີ່ອະນຸຍາດເຊິ່ງບັນທຶກໄວ້"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"ອະນຸຍາດຜອດໃໝ່"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"ໃສ່ໝາຍເລກຜອດໃໝ່"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"ບັນທຶກ"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ຍົກເລີກ"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ເທີມິນອນກຳລັງສົ່ງຄຳຮ້ອງຂໍໃຫ້ເປີດຜອດໃໝ່"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"ຜອດທີ່ຮ້ອງຂໍ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ຍອມຮັບ"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ເທີມິນອນກຳລັງເຮັດວຽກຢູ່"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ຄລິກເພື່ອເປີດເທີມິນອນ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ປິດ"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"ເປີດການນຳໃຊ້ <xliff:g id="ID_1">VirGL</xliff:g> ແລ້ວ"</string>
</resources>
diff --git a/android/TerminalApp/res/values-lt/strings.xml b/android/TerminalApp/res/values-lt/strings.xml
index 875b9c3..edec01a 100644
--- a/android/TerminalApp/res/values-lt/strings.xml
+++ b/android/TerminalApp/res/values-lt/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalo ekranas"</string>
<string name="terminal_input" msgid="4602512831433433551">"Žymeklis"</string>
<string name="empty_line" msgid="5012067143408427178">"Tuščia eilutė"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dukart palieskite, kad įvestumėte įvestį"</string>
<string name="installer_title_text" msgid="500663060973466805">"„Linux“ terminalo diegimas"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Norėdami paleisti „Linux“ terminalą, per tinklą turite atsisiųsti apytiksliai <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> duomenų.\nAr norite tęsti?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Atsisiuntimas naudojant tik „Wi-Fi“"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Taikyti"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminalas bus paleistas iš naujo, kad būtų galima pakeisti disko dydį"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Patvirtinti"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Prievado valdymas"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Leisti klausymo prievadus / neleisti jų"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Klausymo prievadai"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Išsaugoti leidžiami prievadai"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Leisti naują prievadą"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Įveskite naują prievado numerį"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Išsaugoti"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Atšaukti"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminalas bando atidaryti naują prievadą"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Prievadas, kurio užklausa pateikta: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Sutikti"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminalas veikia"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Spustelėkite, kad atidarytumėte terminalą"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Uždaryti"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"„<xliff:g id="ID_1">VirGL</xliff:g>“ įgalinta"</string>
</resources>
diff --git a/android/TerminalApp/res/values-lv/strings.xml b/android/TerminalApp/res/values-lv/strings.xml
index 4366ab5..334d422 100644
--- a/android/TerminalApp/res/values-lv/strings.xml
+++ b/android/TerminalApp/res/values-lv/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Termināļa displejs"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursors"</string>
<string name="empty_line" msgid="5012067143408427178">"Tukša rinda"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Veiciet dubultskārienu, lai ievadītu tekstu"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux termināļa instalēšana"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Lai palaistu Linux termināli, jums jālejupielādē aptuveni <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> datu, izmantojot tīklu.\nVai vēlaties turpināt?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Lejupielāde, izmantojot tikai Wi‑Fi tīklu"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Lietot"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Lai mainītu diska lielumu, terminālis tiks restartēts"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Apstiprināt"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portu kontrole"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Atļaut/aizliegt klausīšanās portus"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Klausīšanās porti"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Saglabātie atļautie porti"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Atļaut jaunu portu"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Ievadiet jaunu porta numuru"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Saglabāt"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Atcelt"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminālis pieprasa jauna porta atvēršanu"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Pieprasītais ports: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Piekrist"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminālis darbojas"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Lai atvērtu termināli, noklikšķiniet"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Aizvērt"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ir iespējots"</string>
</resources>
diff --git a/android/TerminalApp/res/values-mk/strings.xml b/android/TerminalApp/res/values-mk/strings.xml
index b9608d6..7d1d8da 100644
--- a/android/TerminalApp/res/values-mk/strings.xml
+++ b/android/TerminalApp/res/values-mk/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Екран на терминал"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Празен ред"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Допрете двапати за да внесете текст"</string>
<string name="installer_title_text" msgid="500663060973466805">"Инсталирајте го Linux-терминалот"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"За да го стартувате Linux-терминалот, треба да преземете податоци од приближно <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> преку мрежата.\nДали сакате да продолжите?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Преземете само преку Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Примени"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Терминалот ќе се рестартира за да се промени големината на дискот"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Потврди"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Контрола на портите"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Дозволете/одбијте слушање на портите"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Се слушаат порти"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Дозволените порти се зачувани"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Дозволете нова порта"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Внесете нов број на порта"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Зачувај"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Откажи"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминалот бара да отвори нова порта"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Побарана е порта: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прифати"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминалот е активен"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Кликнете за да го отворите терминалот"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Затвори"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Овозможено: <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ml/strings.xml b/android/TerminalApp/res/values-ml/strings.xml
index adcfbba..8821c96 100644
--- a/android/TerminalApp/res/values-ml/strings.xml
+++ b/android/TerminalApp/res/values-ml/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ടെർമിനൽ ഡിസ്പ്ലേ"</string>
<string name="terminal_input" msgid="4602512831433433551">"കഴ്സർ"</string>
<string name="empty_line" msgid="5012067143408427178">"ശൂന്യമായ ലൈൻ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ഇൻപുട്ട് ടൈപ്പ് ചെയ്യാൻ ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ടെർമിനൽ ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ടെർമിനൽ ലോഞ്ച് ചെയ്യാൻ, നിങ്ങൾക്ക് നെറ്റ്വർക്കിലൂടെ ഏകദേശം <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ഡാറ്റ ഡൗൺലോഡ് ചെയ്യേണ്ടതുണ്ട്.\nനിങ്ങൾക്ക് തുടരണമെന്നുണ്ടോ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"വൈഫൈ മാത്രം ഉപയോഗിച്ച് ഡൗൺലോഡ് ചെയ്യുക"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ബാധകമാക്കുക"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ഡിസ്കിന്റെ വലുപ്പം മാറ്റുന്നതിനായി ടെർമിനൽ റീസ്റ്റാർട്ട് ചെയ്യും"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"സ്ഥിരീകരിക്കുക"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"പോർട്ട് നിയന്ത്രണം"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"ശ്രവണ പോർട്ടുകൾ അനുവദിക്കുക/നിരസിക്കുക"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ശ്രവണ പോർട്ടുകൾ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"സംരക്ഷിച്ച അനുവദനീയമായ പോർട്ടുകൾ"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"പുതിയ പോർട്ട് അനുവദിക്കുക"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"പുതിയ പോർട്ട് നമ്പർ നൽകുക"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"സംരക്ഷിക്കുക"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"റദ്ദാക്കുക"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ഒരു പുതിയ പോർട്ട് തുറക്കാൻ ടെർമിനൽ അഭ്യർത്ഥിക്കുന്നു"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"പോർട്ട് അഭ്യർത്ഥിച്ചു: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"അംഗീകരിക്കുക"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ടെർമിനൽ റൺ ചെയ്യുന്നു"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ടെർമിനൽ തുറക്കാൻ ക്ലിക്ക് ചെയ്യുക"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"അടയ്ക്കുക"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> പ്രവർത്തനക്ഷമമാക്കി"</string>
</resources>
diff --git a/android/TerminalApp/res/values-mn/strings.xml b/android/TerminalApp/res/values-mn/strings.xml
index f4cb134..daedc25 100644
--- a/android/TerminalApp/res/values-mn/strings.xml
+++ b/android/TerminalApp/res/values-mn/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Терминалын дэлгэц"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Хоосон мөр"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Оролт бичихийн тулд хоёр товшино уу"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux terminal-г суулгах"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux терминалыг эхлүүлэхийн тулд та барагцаагаар <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g>-н өгөгдлийг сүлжээгээр татах шаардлагатай.\nТа үргэлжлүүлэхийг хүсэж байна уу?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Зөвхөн Wi-Fi ашиглан татах"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Оруулах"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Дискийн хэмжээг өөрчлөхийн тулд терминалыг дахин эхлүүлнэ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Баталгаажуулах"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Портын тохиргоо"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Сүлжээний хүсэлт хүлээж буй портуудыг зөвшөөрөх/татгалзах"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Сүлжээний хүсэлт хүлээж буй портууд"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Хадгалсан зөвшөөрөгдсөн портууд"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Шинэ портыг зөвшөөрөх"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Шинэ портын дугаар оруулах"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Хадгалах"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Цуцлах"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминал шинэ порт нээхийг хүсэж байна"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Хүссэн порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Зөвшөөрөх"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминал ажиллаж байна"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Терминалыг нээхийн тулд товшино уу"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Хаах"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> идэвхэжсэн"</string>
</resources>
diff --git a/android/TerminalApp/res/values-mr/strings.xml b/android/TerminalApp/res/values-mr/strings.xml
index 94836b8..69e74bc 100644
--- a/android/TerminalApp/res/values-mr/strings.xml
+++ b/android/TerminalApp/res/values-mr/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"टर्मिनल डिस्प्ले"</string>
<string name="terminal_input" msgid="4602512831433433551">"कर्सर"</string>
<string name="empty_line" msgid="5012067143408427178">"रिकामी ओळ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"इनपुट टाइप करण्यासाठी दोनदा टॅप करा"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux टर्मिनल इंस्टॉल करा"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux टर्मिनल लाँच करण्यासाठी, तुम्ही नेटवर्कवरून अंदाजे <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> डेटा डाउनलोड करणे आवश्यक आहे.\nतुम्हाला पुढे सुरू ठेवायचे आहे का?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"फक्त वाय-फाय वापरून डाउनलोड करा"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"लागू करा"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"डिस्कचा आकार बदलण्यासाठी टर्मिनल पुन्हा सुरू केले जाईल"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"कन्फर्म करा"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"पोर्ट नियंत्रण"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"ऐकण्याच्या पोर्टना अनुमती द्या/नाकारा"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ऐकण्याचे पोर्ट"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"सेव्ह केलेले व अनुमती असलेले पोर्ट"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"नवीन पोर्टला अनुमती द्या"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"नवीन पोर्ट नंबर एंटर करा"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"सेव्ह करा"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"रद्द करा"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"टर्मिनल नवीन पोर्ट उघडण्याची विनंती करत आहे"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"विनंती केलेला पोर्ट: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"स्वीकारा"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"टर्मिनल रन होत आहे"</string>
<string name="service_notification_content" msgid="5772901142342308273">"टर्मिनल उघडण्यासाठी क्लिक करा"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"बंद करा"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> सुरू केले आहे"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ms/strings.xml b/android/TerminalApp/res/values-ms/strings.xml
index cde70e7..f037bac 100644
--- a/android/TerminalApp/res/values-ms/strings.xml
+++ b/android/TerminalApp/res/values-ms/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Paparan terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Baris kosong"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Ketik dua kali untuk menaip input"</string>
<string name="installer_title_text" msgid="500663060973466805">"Pasang terminal Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Untuk melancarkan terminal Linux, anda perlu memuat turun kira-kira <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data melalui rangkaian.\nAdakah anda mahu meneruskan proses?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Muat turun menggunakan Wi-Fi sahaja"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Guna"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal akan dimulakan semula untuk mengubah saiz cakera"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Sahkan"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kawalan port"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Benarkan/tolak port mendengar"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Port mendengar"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Port yang dibenarkan disimpan"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Benarkan port baharu"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Masukkan nombor port baharu"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Simpan"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Batal"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal membuat permintaan untuk membuka port baharu"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port diminta: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Terima"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal sedang dijalankan"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klik untuk membuka terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Tutup"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> didayakan"</string>
</resources>
diff --git a/android/TerminalApp/res/values-my/strings.xml b/android/TerminalApp/res/values-my/strings.xml
index 08f957a..d6b247f 100644
--- a/android/TerminalApp/res/values-my/strings.xml
+++ b/android/TerminalApp/res/values-my/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"တာမီနယ် ပြကွက်"</string>
<string name="terminal_input" msgid="4602512831433433551">"ကာဆာ"</string>
<string name="empty_line" msgid="5012067143408427178">"လိုင်းကို ရှင်းရန်"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"စာရိုက်ထည့်သွင်းရန် နှစ်ချက်တို့ပါ"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux တာမီနယ် ထည့်သွင်းခြင်း"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux တာမီနယ် စတင်ရန် ကွန်ရက်ပေါ်တွင် ဒေတာ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ခန့်ကို ဒေါင်းလုဒ်လုပ်ရမည်။\nရှေ့ဆက်လိုပါသလား။"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi ဖြင့်သာ ဒေါင်းလုဒ်လုပ်ရန်"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"သုံးရန်"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ဒစ်ခ်ကို အရွယ်ပြင်ရန် တာမီနယ်ပြန်စပါမည်"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"အတည်ပြုရန်"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ပို့တ်ထိန်းချုပ်မှု"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"စောင့်နေသောပို့တ်များကို ခွင့်ပြုရန်/ငြင်းပယ်ရန်"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"စောင့်နေသောပို့တ်များ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"ခွင့်ပြုထားသောပို့တ်များ သိမ်းပြီးပြီ"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"ပို့တ်အသစ် ခွင့်ပြုခြင်း"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"ပို့တ်နံပါတ်အသစ် ထည့်ပါ"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"သိမ်းရန်"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"မလုပ်တော့"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"တာမီနယ်က ပို့တ်အသစ်ဖွင့်ရန် တောင်းဆိုနေသည်"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"တောင်းဆိုထားသော ပို့တ်- <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"လက်ခံရန်"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"တာမီနယ်ကို ဖွင့်ထားသည်"</string>
<string name="service_notification_content" msgid="5772901142342308273">"တာမီနယ်ဖွင့်ရန် နှိပ်ပါ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ပိတ်ရန်"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ဖွင့်ထားသည်"</string>
</resources>
diff --git a/android/TerminalApp/res/values-nb/strings.xml b/android/TerminalApp/res/values-nb/strings.xml
index 7919e0d..f324561 100644
--- a/android/TerminalApp/res/values-nb/strings.xml
+++ b/android/TerminalApp/res/values-nb/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalskjerm"</string>
<string name="terminal_input" msgid="4602512831433433551">"Markør"</string>
<string name="empty_line" msgid="5012067143408427178">"Tom linje"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dobbelttrykk for å skrive inn tekst"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installer Linux-terminalen"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"For å starte Linux-terminalen må du laste ned omtrent <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data via nettverket.\nVil du fortsette?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Last ned bare via wifi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Bruk"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminalen starter på nytt for å endre størrelsen på disken"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Bekreft"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portkontroll"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Tillat/avslå lytteporter"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Lytteporter"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Lagrede tillatte porter"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Tillat en ny port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Skriv inn et nytt portnummer"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Lagre"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Avbryt"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminalen prøver å åpne en ny port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Forespurt port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Godta"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminalen kjører"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klikk for å åpne terminalen"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Lukk"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> er aktivert"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ne/strings.xml b/android/TerminalApp/res/values-ne/strings.xml
index 7fa2c4b..6933c21 100644
--- a/android/TerminalApp/res/values-ne/strings.xml
+++ b/android/TerminalApp/res/values-ne/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"टर्मिनल डिस्प्ले"</string>
<string name="terminal_input" msgid="4602512831433433551">"कर्सर"</string>
<string name="empty_line" msgid="5012067143408427178">"खाली लाइन"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"इनपुट टाइप गर्न डबल ट्याप गर्नुहोस्"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux टर्मिनल इन्स्टल गर्नुहोस्"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux टर्मिनल सुरु गर्न तपाईंले नेटवर्क प्रयोग गरेर लगभग <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> जति डेटा डाउनलोड गर्नु पर्ने हुन्छ।\nतपाईं अघि बढ्नु चाहनुहुन्छ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi मार्फत मात्र डाउनलोड गर्नुहोस्"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"लागू गर्नुहोस्"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"डिस्कको आकार बदल्न टर्मिनल रिस्टार्ट गरिने छ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"पुष्टि गर्नुहोस्"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"पोर्टसम्बन्धी कन्ट्रोल"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"लिसनिङ पोर्टहरू हाल्ने अनुमति दिनुहोस्/नदिनुहोस्"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"लिसनिङ पोर्टहरू"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"सेभ गरिएका अनुमति दिइएका पोर्टहरू"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"नयाँ पोर्ट नम्बर हाल्ने अनुमति दिनुहोस्"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"नयाँ पोर्ट नम्बर हाल्नुहोस्"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"सेभ गर्नुहोस्"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"रद्द गर्नुहोस्"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"टर्मिनलले एउटा नयाँ पोर्ट खोल्न अनुरोध गरिरहेको छ"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"निम्न पोर्ट खोल्न अनुरोध गरिएको छ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"स्वीकार गर्नुहोस्"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"टर्मिनल चलिरहेको छ"</string>
<string name="service_notification_content" msgid="5772901142342308273">"टर्मिनल खोल्न क्लिक गर्नुहोस्"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"बन्द गर्नुहोस्"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> अन गरिएको छ"</string>
</resources>
diff --git a/android/TerminalApp/res/values-nl/strings.xml b/android/TerminalApp/res/values-nl/strings.xml
index e5c975d..f373e47 100644
--- a/android/TerminalApp/res/values-nl/strings.xml
+++ b/android/TerminalApp/res/values-nl/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalweergave"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Lege regel"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dubbeltik om invoer te typen"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux-terminal installeren"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Als je Linux-terminal wilt starten, moet je ongeveer <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> aan data downloaden via het netwerk.\nWil je doorgaan?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Alleen downloaden via wifi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Toepassen"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal wordt opnieuw opgestart om de schijfgrootte aan te passen"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Bevestigen"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Poortcontrole"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Luisterende poorten toestaan/weigeren"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Luisterende poorten"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Toegestane poorten opgeslagen"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Een nieuwe poort toestaan"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Voer een nieuw poortnummer in"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Opslaan"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Annuleren"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal verzoekt om een nieuwe poort te openen"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Poort aangevraagd: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepteren"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal wordt uitgevoerd"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klik om terminal te openen"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Sluiten"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> staat aan"</string>
</resources>
diff --git a/android/TerminalApp/res/values-or/strings.xml b/android/TerminalApp/res/values-or/strings.xml
index 3b3e34b..6c63a3b 100644
--- a/android/TerminalApp/res/values-or/strings.xml
+++ b/android/TerminalApp/res/values-or/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ଟର୍ମିନାଲ ଡିସପ୍ଲେ"</string>
<string name="terminal_input" msgid="4602512831433433551">"କର୍ସର"</string>
<string name="empty_line" msgid="5012067143408427178">"ଖାଲି ଲାଇନ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ଇନପୁଟ ଟାଇପ କରିବାକୁ ଦୁଇଥର-ଟାପ କରନ୍ତୁ"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ଟର୍ମିନାଲକୁ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ଟର୍ମିନାଲ ଲଞ୍ଚ କରିବାକୁ ଆପଣଙ୍କୁ ନେଟୱାର୍କ ମାଧ୍ୟମରେ ପ୍ରାୟ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g>ର ଡାଟା ଡାଉନଲୋଡ କରିବାକୁ ହେବ।\nଆପଣ ଆଗକୁ ବଢ଼ିବା ପାଇଁ ଚାହିଁବେ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"କେବଳ ୱାଇ-ଫାଇ ବ୍ୟବହାର କରି ଡାଉନଲୋଡ କରନ୍ତୁ"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ଲାଗୁ କରନ୍ତୁ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ଡିସ୍କକୁ ରିସାଇଜ କରିବାକୁ ଟର୍ମିନାଲ ରିଷ୍ଟାର୍ଟ ହେବ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ପୋର୍ଟ ନିୟନ୍ତ୍ରଣ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"ଶୁଣିବା ପୋର୍ଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ/ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ଶୁଣିବା ପୋର୍ଟ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"ଅନୁମତି ଦିଆଯାଇଥିବା ପୋର୍ଟଗୁଡ଼ିକୁ ସେଭ କରାଯାଇଛି"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"ଏକ ନୂଆ ପୋର୍ଟକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"ଏକ ନୂଆ ପୋର୍ଟ ନମ୍ବର ଲେଖନ୍ତୁ"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"ସେଭ କରନ୍ତୁ"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ଏକ ନୂଆ ପୋର୍ଟ ଖୋଲିବାକୁ ଟର୍ମିନାଲ ଅନୁରୋଧ କରୁଛି"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"ପୋର୍ଟ ପାଇଁ ଅନୁରୋଧ କରାଯାଇଛି: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ଗ୍ରହଣ କରନ୍ତୁ"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ଟର୍ମିନାଲ ଚାଲୁ ଅଛି"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ଟର୍ମିନାଲ ଖୋଲିବାକୁ କ୍ଲିକ କରନ୍ତୁ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ବନ୍ଦ କରନ୍ତୁ"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>କୁ ସକ୍ଷମ କରାଯାଇଛି"</string>
</resources>
diff --git a/android/TerminalApp/res/values-pa/strings.xml b/android/TerminalApp/res/values-pa/strings.xml
index a400bce..45375f7 100644
--- a/android/TerminalApp/res/values-pa/strings.xml
+++ b/android/TerminalApp/res/values-pa/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ਟਰਮੀਨਲ ਡਿਸਪਲੇ"</string>
<string name="terminal_input" msgid="4602512831433433551">"ਕਰਸਰ"</string>
<string name="empty_line" msgid="5012067143408427178">"ਖਾਲੀ ਲਾਈਨ"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ਇਨਪੁੱਟ ਟਾਈਪ ਕਰਨ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ਟਰਮੀਨਲ ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ਟਰਮੀਨਲ ਐਪ ਨੂੰ ਲਾਂਚ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਨੈੱਟਵਰਕ \'ਤੇ ਲਗਭਗ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ਡਾਟਾ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।\nਕੀ ਤੁਸੀਂ ਅੱਗੇ ਵਧਣਾ ਚਾਹੋਗੇ?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"ਸਿਰਫ਼ ਵਾਈ-ਫਾਈ ਦੀ ਵਰਤੋਂ ਨਾਲ ਡਾਊਨਲੋਡ ਕਰੋ"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ਲਾਗੂ ਕਰੋ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ਡਿਸਕ ਦਾ ਆਕਾਰ ਬਦਲਣ ਲਈ ਟਰਮੀਨਲ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"ਤਸਦੀਕ ਕਰੋ"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"ਪੋਰਟ ਕੰਟਰੋਲ"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"ਲਿਸਨਿੰਗ ਪੋਰਟਾਂ ਨੂੰ ਆਗਿਆ ਦਿਓ/ਅਸਵੀਕਾਰ ਕਰੋ"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"ਲਿਸਨਿੰਗ ਪੋਰਟ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਪੋਰਟ ਰੱਖਿਅਤ ਕੀਤੇ ਗਏ"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"ਨਵੇਂ ਪੋਰਟ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"ਇੱਕ ਨਵਾਂ ਪੋਰਟ ਨੰਬਰ ਦਾਖਲ ਕਰੋ"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"ਰੱਖਿਅਤ ਕਰੋ"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ਰੱਦ ਕਰੋ"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ਟਰਮੀਨਲ ਇੱਕ ਨਵੇਂ ਪੋਰਟ ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"ਪੋਰਟ ਸੰਬੰਧੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ਸਵੀਕਾਰ ਕਰੋ"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ਟਰਮੀਨਲ ਚਾਲੂ ਹੈ"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ਟਰਮੀਨਲ ਖੋਲ੍ਹਣ ਲਈ ਕਲਿੱਕ ਕਰੋ"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ਬੰਦ ਕਰੋ"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ਚਾਲੂ ਹੈ"</string>
</resources>
diff --git a/android/TerminalApp/res/values-pl/strings.xml b/android/TerminalApp/res/values-pl/strings.xml
index 066bebc..6fed3fc 100644
--- a/android/TerminalApp/res/values-pl/strings.xml
+++ b/android/TerminalApp/res/values-pl/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Ekran terminala"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Pusty wiersz"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Kliknij dwukrotnie, aby wpisać"</string>
<string name="installer_title_text" msgid="500663060973466805">"Zainstaluj terminal Linuxa"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Aby uruchomić terminal Linuxa, musisz pobrać przez sieć około <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> danych.\nChcesz kontynuować?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Pobieraj tylko przez Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Zastosuj"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Aby zmienić rozmiar dysku, terminal zostanie uruchomiony ponownie"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potwierdź"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kontrola portów"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Zezwalaj/odrzucaj porty nasłuchujące"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Porty nasłuchujące"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Zapisane dozwolone porty"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Zezwól na nowy port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Wpisz nowy numer portu"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Zapisz"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Anuluj"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal wysłał żądanie otwarcia nowego portu"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Żądany port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Zaakceptuj"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal jest uruchomiony"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknij, aby otworzyć terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zamknij"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Układ <xliff:g id="ID_1">VirGL</xliff:g> jest włączony"</string>
</resources>
diff --git a/android/TerminalApp/res/values-pt-rPT/strings.xml b/android/TerminalApp/res/values-pt-rPT/strings.xml
index caab1ac..d0a9210 100644
--- a/android/TerminalApp/res/values-pt-rPT/strings.xml
+++ b/android/TerminalApp/res/values-pt-rPT/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Ecrã do terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Linha vazia"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Toque duas vezes para introduzir o texto"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instale o terminal do Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Para iniciar o terminal do Linux, tem de transferir cerca de <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de dados através da rede.\nQuer continuar?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Transferir apenas através de Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplicar"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"O terminal vai ser reiniciado para redimensionar o disco"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmar"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Controlo de portas"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permitir/negar portas de audição"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Portas de audição"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Portas permitidas guardadas"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Permitir uma nova porta"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Introduza um novo número de porta"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Guardar"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancelar"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"O terminal está a pedir para abrir uma nova porta"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Porta pedida: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceitar"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"O terminal está em execução"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Clique para abrir o terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Fechar"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"A <xliff:g id="ID_1">VirGL</xliff:g> está ativada"</string>
</resources>
diff --git a/android/TerminalApp/res/values-pt/strings.xml b/android/TerminalApp/res/values-pt/strings.xml
index 5273a59..6242b0f 100644
--- a/android/TerminalApp/res/values-pt/strings.xml
+++ b/android/TerminalApp/res/values-pt/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Tela do terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Linha vazia"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Toque duas vezes para digitar"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalar terminal Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Para iniciar o terminal Linux, é necessário baixar cerca de <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de dados pela rede.\nQuer continuar?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Baixar somente com Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplicar"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"O terminal será reiniciado para redimensionar o disco"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmar"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Controle de portas"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permitir/negar portas de detecção"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Portas de detecção"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"As portas permitidas foram salvas"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Permitir uma nova porta"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Digite o número de uma nova porta"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Salvar"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Cancelar"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"O terminal está pedindo para abrir uma nova porta"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Porta solicitada: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceitar"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"O terminal está em execução"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Clique para abrir o terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Fechar"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"O <xliff:g id="ID_1">VirGL</xliff:g> está ativado"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ro/strings.xml b/android/TerminalApp/res/values-ro/strings.xml
index 12ae22e..6912166 100644
--- a/android/TerminalApp/res/values-ro/strings.xml
+++ b/android/TerminalApp/res/values-ro/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Afișaj terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Linie goală"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Atinge de două ori pentru a introduce text"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalează terminalul Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Pentru a lansa terminalul Linux, trebuie să descarci aproximativ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de date prin rețea.\nVrei să continui?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Descarcă numai prin Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Aplică"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminalul va fi repornit pentru a redimensiona discul"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirmă"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Controlul porturilor"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Permite / refuză porturile active"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Porturi active"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Porturi permise salvate"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Acceptă un port nou"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Introdu un număr de port nou"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Salvează"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Anulează"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminalul solicită să deschidă un nou port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Portul solicitat: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Acceptă"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminalul rulează"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Dă clic pentru a deschide terminalul"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Închide"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> este activat"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ru/strings.xml b/android/TerminalApp/res/values-ru/strings.xml
index e53c8a3..ac2bfff 100644
--- a/android/TerminalApp/res/values-ru/strings.xml
+++ b/android/TerminalApp/res/values-ru/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Экран терминала"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Пустая строка"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Нажмите дважды, чтобы начать вводить текст"</string>
<string name="installer_title_text" msgid="500663060973466805">"Установка терминала Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Для запуска терминала Linux нужно скачать примерно <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> данных по сети.\nПродолжить?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Скачивать только по Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Применить"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Для изменения размера диска терминал будет перезапущен."</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Подтвердить"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Управление портами"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Открыть/закрыть доступ к портам прослушивания"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Порты прослушивания"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Сохраненные порты с открытым доступом"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Открыть доступ к новому порту"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Введите номер нового порта"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Сохранить"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Отмена"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминал просит открыть новый порт"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Запрашиваемый порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>."</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Разрешить"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминал запущен"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Нажмите, чтобы открыть терминал."</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Закрыть"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>: включено."</string>
</resources>
diff --git a/android/TerminalApp/res/values-si/strings.xml b/android/TerminalApp/res/values-si/strings.xml
index 2e69729..fe2c6ab 100644
--- a/android/TerminalApp/res/values-si/strings.xml
+++ b/android/TerminalApp/res/values-si/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ටර්මිනල සංදර්ශකය"</string>
<string name="terminal_input" msgid="4602512831433433551">"කර්සරය"</string>
<string name="empty_line" msgid="5012067143408427178">"හිස් රේඛාව"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ආදානය ටයිප් කිරීමට දෙවරක් තට්ටු කරන්න"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ටර්මිනලය ස්ථාපනය කරන්න"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ටර්මිනලය දියත් කිරීමට, ඔබට ජාලය හරහා දත්ත <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> පමණ බාගැනීමට අවශ්ය වේ.\nඔබ ඉදිරියට යාමට කැමති ද?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fi පමණක් භාවිතා කරමින් බාගන්න"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"යොදන්න"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"තැටියේ ප්රමාණය වෙනස් කිරීමට ටර්මිනලය යළි ඇරඹෙනු ඇත"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"තහවුරු කරන්න"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"පෝටය පාලනය"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"සවන්දීමේ පෝටයන්ට ඉඩ දෙන්න/ප්රතික්ෂේප කරන්න"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"සවන්දීමේ පෝටයන්"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"සුරකින ලද ඉඩ දුන් පෝටයන්"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"නව පෝටයකට ඉඩ දෙන්න"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"නව පෝට අංකයක් ඇතුළු කරන්න"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"සුරකින්න"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"අවලංගු කරන්න"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ටර්මිනලය නව පෝටයක් විවෘත කිරීමට ඉල්ලීම් කරයි"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"පෝටය ඉල්ලා ඇත: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"පිළිගන්න"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"පර්යන්තය ධාවනය වේ"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ටර්මිනලය විවෘත කිරීමට ක්ලික් කරන්න"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"වසන්න"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> සබලයි"</string>
</resources>
diff --git a/android/TerminalApp/res/values-sk/strings.xml b/android/TerminalApp/res/values-sk/strings.xml
index 8a06552..dcfe83f 100644
--- a/android/TerminalApp/res/values-sk/strings.xml
+++ b/android/TerminalApp/res/values-sk/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Zobrazenie terminálu"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kurzor"</string>
<string name="empty_line" msgid="5012067143408427178">"Prázdny riadok"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dvakrát klepnite a zadajte vstup"</string>
<string name="installer_title_text" msgid="500663060973466805">"Inštalácia terminálu systému Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Ak chcete spustiť terminál Linux, musíte cez sieť stiahnuť približne <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dát.\nChcete pokračovať?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Sťahovať iba cez Wi‑Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Použiť"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminál sa reštartuje, aby sa zmenila veľkosť disku"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potvrdiť"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Ovládanie portov"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Povoliť alebo zakázať porty počúvania"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Porty počúvania"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Uložené povolené porty"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Povoľte nový port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Zadajte nové číslo portu"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Uložiť"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Zrušiť"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminál požaduje otvoriť nový port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Požadovaný port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prijať"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminál je spustený"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknutím otvorte terminál"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zavrieť"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Procesor <xliff:g id="ID_1">VirGL</xliff:g> je aktivovaný"</string>
</resources>
diff --git a/android/TerminalApp/res/values-sl/strings.xml b/android/TerminalApp/res/values-sl/strings.xml
index 8e0d011..c4a7a14 100644
--- a/android/TerminalApp/res/values-sl/strings.xml
+++ b/android/TerminalApp/res/values-sl/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Prikaz terminala"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kazalec"</string>
<string name="empty_line" msgid="5012067143408427178">"Prazna vrstica"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Dvakrat se dotaknite za tipkanje vnosa"</string>
<string name="installer_title_text" msgid="500663060973466805">"Namestitev terminala Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Če želite zagnati terminal Linux, morate prek omrežja prenesti približno <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podatkov.\nAli želite nadaljevati?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Prenos samo z uporabo povezave Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Uporabi"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal se bo znova zagnal, da se bo izvedla sprememba velikosti diska"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Potrdi"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Nadzor vrat"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Dovoli/zavrni vrata za poslušanje"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Vrata za poslušanje"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Shranjena dovoljena vrata"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Dovoli nova vrata"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Vnesite številko novih vrat"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Shrani"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Prekliči"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal zahteva odpiranje novih vrat"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Zahtevana vrata: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Sprejmi"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal se izvaja"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliknite, če želite odpreti terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Zapri"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> je omogočen"</string>
</resources>
diff --git a/android/TerminalApp/res/values-sq/strings.xml b/android/TerminalApp/res/values-sq/strings.xml
index e4a5072..00cd062 100644
--- a/android/TerminalApp/res/values-sq/strings.xml
+++ b/android/TerminalApp/res/values-sq/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Ekrani i terminalit"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursori"</string>
<string name="empty_line" msgid="5012067143408427178">"Rresht bosh"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Trokit dy herë për të shkruar të dhëna"</string>
<string name="installer_title_text" msgid="500663060973466805">"Instalo terminalin e Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Për të hapur terminalin e Linux, duhet të shkarkosh afërsisht <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> të dhëna nëpërmjet rrjetit.\nDëshiron të vazhdosh?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Shkarko duke përdorur vetëm Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Zbato"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminali do të riniset për të ndryshuar përmasat e diskut"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Konfirmo"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kontrolli i portës"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Lejo/refuzo portat e dëgjimit"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Portat e dëgjimit"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Portat e lejuara të ruajtura"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Lejo një portë të re"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Fut një numër të një porte të re"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Ruaj"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Anulo"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminali po përpiqet të hapë një portë të re"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Porta e kërkuar: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prano"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminali po ekzekutohet"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Kliko për të hapur terminalin"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Mbyll"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> është aktivizuar"</string>
</resources>
diff --git a/android/TerminalApp/res/values-sr/strings.xml b/android/TerminalApp/res/values-sr/strings.xml
index 5b3fc1b..309f960 100644
--- a/android/TerminalApp/res/values-sr/strings.xml
+++ b/android/TerminalApp/res/values-sr/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Приказ терминала"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Празан ред"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Двапут додирните да бисте унели текст"</string>
<string name="installer_title_text" msgid="500663060973466805">"Инсталирајте Linux терминал"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Да бисте покренули Linux терминал, треба да преузмете око <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> података преко мреже.\nЖелите ли да наставите?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Преузимај само преко WiFi мреже"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Примени"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Терминал ће се рестартовати да би се променила величина диска"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Потврди"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Контрола порта"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Дозволите или забраните портове за слушање"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Портови за слушање"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Сачувани дозвољени портови"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Дозволите нови порт"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Унесите нови број порта"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Сачувај"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Откажи"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Терминал тражи да отвори нови порт"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Обавезан порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прихвати"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Терминал је активан"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Кликните да бисте отворили терминал"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Затвори"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> је омогућен"</string>
</resources>
diff --git a/android/TerminalApp/res/values-sv/strings.xml b/android/TerminalApp/res/values-sv/strings.xml
index f6279f5..524b8a1 100644
--- a/android/TerminalApp/res/values-sv/strings.xml
+++ b/android/TerminalApp/res/values-sv/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminalskärm"</string>
<string name="terminal_input" msgid="4602512831433433551">"Markör"</string>
<string name="empty_line" msgid="5012067143408427178">"Tom rad"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Tryck snabbt två gånger för att skriva in data"</string>
<string name="installer_title_text" msgid="500663060973466805">"Installera Linux-terminalen"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Om du vill starta Linux-terminalen måste du ladda ned ungefär <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data via nätverket.\nVill du fortsätta?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Ladda endast ned via wifi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Tillämpa"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminalen startas om för att ändra storlek på disken"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Bekräfta"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portkontroll"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Tillåt/neka lyssningsportar"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Lyssningsportar"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Sparade tillåtna portar"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Tillåt en ny port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Ange ett nytt portnummer"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Spara"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Avbryt"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminalen begär att öppna en ny port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port som begärs: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Godkänn"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminalen körs"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Klicka för att öppna terminalen"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Stäng"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> har aktiverats"</string>
</resources>
diff --git a/android/TerminalApp/res/values-sw/strings.xml b/android/TerminalApp/res/values-sw/strings.xml
index 1d30f53..2b9427b 100644
--- a/android/TerminalApp/res/values-sw/strings.xml
+++ b/android/TerminalApp/res/values-sw/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Skrini ya kituo"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kiteuzi"</string>
<string name="empty_line" msgid="5012067143408427178">"Mstari usio na chochote"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Gusa mara mbili ili uandike data"</string>
<string name="installer_title_text" msgid="500663060973466805">"Weka temino ya Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Unahitaji kupakua takribani <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ya data kupitia mtandao ili uwashe temino ya Linux.\nUngependa kuendelea?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Pakua ukitumia Wi-Fi pekee"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Tekeleza"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Temino itafungwa kisha ifunguliwe ili kubadilisha ukubwa wa diski"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Thibitisha"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Udhibiti wa mlango"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Ruhusu au kataa milango ya usikilizaji"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Milango ya usikilizaji"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Umehifadhi milango inayoruhusiwa"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Ruhusu mlango mpya"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Weka namba ya mlango mpya"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Hifadhi"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Acha"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Temino inatuma ombi la kufungua mlango mpya"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Ombi la mlango: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Kubali"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Temino inatumika"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Bofya ili ufungue temino"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Funga"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> imewashwa"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ta/strings.xml b/android/TerminalApp/res/values-ta/strings.xml
index 6a6e1a8..4e814a9 100644
--- a/android/TerminalApp/res/values-ta/strings.xml
+++ b/android/TerminalApp/res/values-ta/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"டெர்மினல் டிஸ்ப்ளே"</string>
<string name="terminal_input" msgid="4602512831433433551">"கர்சர்"</string>
<string name="empty_line" msgid="5012067143408427178">"வெற்று வரி"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"உள்ளீட்டை டைப் செய்ய இருமுறை தட்டுங்கள்"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux டெர்மினலை நிறுவுதல்"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux டெர்மினலைத் தொடங்க, நெட்வொர்க் மூலம் நீங்கள் சுமார் <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> தரவைப் பதிவிறக்க வேண்டும்.\nதொடர விரும்புகிறீர்களா?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"வைஃபையைப் பயன்படுத்தி மட்டும் பதிவிறக்கு"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"பயன்படுத்து"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"டிஸ்க் அளவை மாற்ற டெர்மினல் மீண்டும் தொடங்கப்படும்"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"உறுதிசெய்"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"போர்ட் கட்டுப்பாடு"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"லிஸனிங் போர்ட்டுகளை அனுமதித்தல்/நிராகரித்தல்"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"லிஸனிங் போர்ட்டுகள்"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"சேமித்த அனுமதிக்கப்பட்ட போர்ட்டுகள்"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"புதிய போர்ட்டை அனுமதித்தல்"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"புதிய போர்ட் எண்ணை டைப் செய்யுங்கள்"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"சேமி"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ரத்துசெய்"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"டெர்மினல் புதிய போர்ட்டைத் திறக்குமாறு கேட்கிறது"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"போர்ட் கேட்கப்பட்டுள்ளது: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ஏற்கிறேன்"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"டெர்மினல் இயக்கத்தில் உள்ளது"</string>
<string name="service_notification_content" msgid="5772901142342308273">"டெர்மினலைத் திறக்க கிளிக் செய்யுங்கள்"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"மூடு"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> இயக்கப்பட்டது"</string>
</resources>
diff --git a/android/TerminalApp/res/values-te/strings.xml b/android/TerminalApp/res/values-te/strings.xml
index 77db188..308e2ff 100644
--- a/android/TerminalApp/res/values-te/strings.xml
+++ b/android/TerminalApp/res/values-te/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal డిస్ప్లే"</string>
<string name="terminal_input" msgid="4602512831433433551">"కర్సర్"</string>
<string name="empty_line" msgid="5012067143408427178">"ఖాళీ లైన్"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"డబుల్-ట్యాప్ చేసి ఇన్పుట్ను టైప్ చేయండి"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux టెర్మినల్ను ఇన్స్టాల్ చేయండి"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux టెర్మినల్ను ప్రారంభించడానికి, మీరు నెట్వర్క్ ద్వారా దాదాపు <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> డేటాను డౌన్లోడ్ చేసుకోవాలి.\nమీరు కొనసాగించాలనుకుంటున్నారా?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Wi-Fiని ఉపయోగించి మాత్రమే డౌన్లోడ్ చేయండి"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"వర్తింపజేయండి"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"డిస్క్ సైజ్ను మార్చడానికి టెర్మినల్ రీస్టార్ట్ అవుతుంది"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"నిర్ధారించండి"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"పోర్ట్ కంట్రోల్"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"వినే పోర్ట్లకు అనుమతినివ్వండి/తిరస్కరించండి"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"వినే పోర్ట్లు"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"సేవ్ చేసిన, అనుమతి ఉన్న పోర్ట్లు"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"కొత్త పోర్ట్కు అనుమతినివ్వండి"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"కొత్త పోర్ట్ నంబర్ను ఎంటర్ చేయండి"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"సేవ్ చేయండి"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"రద్దు చేయండి"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"టెర్మినల్ ఒక కొత్త పోర్ట్ను తెరవడానికి రిక్వెస్ట్ చేస్తోంది"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"పోర్ట్ రిక్వెస్ట్ చేయబడింది: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ఆమోదించండి"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"టెర్మినల్ రన్ అవుతోంది"</string>
<string name="service_notification_content" msgid="5772901142342308273">"టెర్మినల్ను తెరవడానికి క్లిక్ చేయండి"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"మూసివేయండి"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ప్రారంభించబడింది"</string>
</resources>
diff --git a/android/TerminalApp/res/values-th/strings.xml b/android/TerminalApp/res/values-th/strings.xml
index 7c2f6a7..227e854 100644
--- a/android/TerminalApp/res/values-th/strings.xml
+++ b/android/TerminalApp/res/values-th/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"จอแสดงผลของเทอร์มินัล"</string>
<string name="terminal_input" msgid="4602512831433433551">"เคอร์เซอร์"</string>
<string name="empty_line" msgid="5012067143408427178">"บรรทัดว่างเปล่า"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"แตะสองครั้งเพื่อพิมพ์ข้อความ"</string>
<string name="installer_title_text" msgid="500663060973466805">"ติดตั้งเทอร์มินัล Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"หากต้องการเปิดเทอร์มินัล Linux คุณจะต้องดาวน์โหลดข้อมูลประมาณ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ผ่านเครือข่าย\nคุณต้องการดำเนินการต่อไหม"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"ดาวน์โหลดโดยใช้ Wi-Fi เท่านั้น"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"ใช้"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ระบบจะรีสตาร์ทเทอร์มินัลเพื่อปรับขนาดดิสก์"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"ยืนยัน"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"การควบคุมพอร์ต"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"อนุญาต/ปฏิเสธพอร์ตที่กำลังรอการเชื่อมต่อ"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"พอร์ตที่กำลังรอการเชื่อมต่อ"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"บันทึกพอร์ตที่อนุญาตแล้ว"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"อนุญาตพอร์ตใหม่"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"ป้อนหมายเลขพอร์ตใหม่"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"บันทึก"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"ยกเลิก"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"เทอร์มินัลกำลังส่งคำขอเปิดพอร์ตใหม่"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"พอร์ตที่ขอ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ยอมรับ"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"เทอร์มินัลกำลังทำงาน"</string>
<string name="service_notification_content" msgid="5772901142342308273">"คลิกเพื่อเปิดเทอร์มินัล"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"ปิด"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"เปิดใช้งาน <xliff:g id="ID_1">VirGL</xliff:g> แล้ว"</string>
</resources>
diff --git a/android/TerminalApp/res/values-tl/strings.xml b/android/TerminalApp/res/values-tl/strings.xml
index 9de5893..e76e670 100644
--- a/android/TerminalApp/res/values-tl/strings.xml
+++ b/android/TerminalApp/res/values-tl/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Display ng terminal"</string>
<string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Walang lamang linya"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Mag-double tap para mag-type ng input"</string>
<string name="installer_title_text" msgid="500663060973466805">"I-install ang terminal ng Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Para ilunsad ang terminal ng Linux, kailangan mong mag-download ng humigit-kumulang <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> na data sa network.\nGusto mo bang magpatuloy?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Mag-download sa pamamagitan lang ng Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Ilapat"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Ire-restart ang terminal para i-resize ang disk"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Kumpirmahin"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kontrol ng port"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Payagan/tanggihan ang mga port ng pakikinig"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Mga port sa pakikinig"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"I-save ang mga pinayagang port"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Payagan ang bagong port"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Maglagay ng bagong port number"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"I-save"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Kanselahin"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Nag-request ang terminal na magbukas ng bagong port"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Ni-request na port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Tanggapin"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Gumagana ang terminal"</string>
<string name="service_notification_content" msgid="5772901142342308273">"I-click para buksan ang terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Isara"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"Na-enable ang <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-tr/strings.xml b/android/TerminalApp/res/values-tr/strings.xml
index b7717c9..a59bfc4 100644
--- a/android/TerminalApp/res/values-tr/strings.xml
+++ b/android/TerminalApp/res/values-tr/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal ekranı"</string>
<string name="terminal_input" msgid="4602512831433433551">"İmleç"</string>
<string name="empty_line" msgid="5012067143408427178">"Boş satır"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Yazarak giriş yapmak için iki kez dokunun"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux terminalini yükleyin"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux terminalini başlatmak için ağ üzerinden yaklaşık <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> veri indirmeniz gerekir.\nDevam etmek istiyor musunuz?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Yalnızca kablosuz bağlantıyla indir"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Uygula"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal, diski yeniden boyutlandırmak için yeniden başlatılacak"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Onayla"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Bağlantı noktası kontrolü"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Dinelenen bağlantı noktalarına izin ver/izin verme"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Dinlenen bağlantı noktaları"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"İzin verilen kayıtlı bağlantı noktaları"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Yeni bir bağlantı noktasına izin verme"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Yeni bir bağlantı noktası numarası girin"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Kaydet"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"İptal"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal yeni bir bağlantı noktası açmak istiyor"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"İstenilen bağlantı noktası: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Kabul et"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal çalışıyor"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Terminali açmak için tıklayın"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Kapat"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> etkinleştirildi"</string>
</resources>
diff --git a/android/TerminalApp/res/values-uk/strings.xml b/android/TerminalApp/res/values-uk/strings.xml
index 22278cf..b1fcff7 100644
--- a/android/TerminalApp/res/values-uk/strings.xml
+++ b/android/TerminalApp/res/values-uk/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Дисплей термінала"</string>
<string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
<string name="empty_line" msgid="5012067143408427178">"Пустий рядок"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Двічі торкніться, щоб ввести текст"</string>
<string name="installer_title_text" msgid="500663060973466805">"Установити термінал Linux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Щоб запустити термінал Linux, потрібно завантажити приблизно <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> даних через мережу.\nПродовжити?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Завантажувати лише через Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Застосувати"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Термінал буде перезапущено, щоб змінити розмір диска"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Підтвердити"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Керування портами"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Дозволити/заборонити порти прослуховування"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Порти прослуховування"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Збережені дозволені порти"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Дозволити новий порт"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Введіть новий номер порту"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Зберегти"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Скасувати"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Термінал просить відкрити новий порт"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Порт, указаний у запиті: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прийняти"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Термінал запущено"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Натисніть, щоб відкрити термінал"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Закрити"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> увімкнено"</string>
</resources>
diff --git a/android/TerminalApp/res/values-ur/strings.xml b/android/TerminalApp/res/values-ur/strings.xml
index 33b6014..cd6ba7a 100644
--- a/android/TerminalApp/res/values-ur/strings.xml
+++ b/android/TerminalApp/res/values-ur/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"ٹرمینل ڈسپلے"</string>
<string name="terminal_input" msgid="4602512831433433551">"کرسر"</string>
<string name="empty_line" msgid="5012067143408427178">"خالی لائن"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"ان پٹ ٹائپ کرنے کے لیے دو بار تھپتھپائیں"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux ٹرمینل انسٹال کریں"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux ٹرمینل شروع کرنے کے لیے، آپ کو نیٹ ورک پر تقریباً <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ڈیٹا ڈاؤن لوڈ کرنا ہوگا۔\nکیا آپ آگے بڑھنا چاہیں گے؟"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"صرف Wi-Fi کا استعمال کر کے ڈاؤن لوڈ کریں"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"لاگو کریں"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"ڈسک کا سائز تبدیل کرنے کے لیے ٹرمینل کو ری سٹارٹ کیا جائے گا"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"تصدیق کریں"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"پورٹ کنٹرول"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"لسننگ پورٹس کو اجازت دیں/مسترد کریں"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"لسننگ پورٹس"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"اجازت یافتہ پورٹس کو محفوظ کیا گیا"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"نئے پورٹ کی اجازت دی"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"نیا پورٹ نمبر درج کریں"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"محفوظ کریں"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"منسوخ کریں"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"ٹرمینل ایک نیا پورٹ کھولنے کی درخواست کر رہا ہے"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"پورٹ کی درخواست کی گئی: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"قبول کریں"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"ٹرمینل چل رہا ہے"</string>
<string name="service_notification_content" msgid="5772901142342308273">"ٹرمینل کھولنے کے لیے کلک کریں"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"بند کریں"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> فعال ہے"</string>
</resources>
diff --git a/android/TerminalApp/res/values-uz/strings.xml b/android/TerminalApp/res/values-uz/strings.xml
index b1acf66..4a39ca4 100644
--- a/android/TerminalApp/res/values-uz/strings.xml
+++ b/android/TerminalApp/res/values-uz/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Terminal displeyi"</string>
<string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Boʻsh qator"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Matn kiritish uchun ikki marta bosing"</string>
<string name="installer_title_text" msgid="500663060973466805">"Linux terminalini oʻrnatish"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Linux terminalini ishga tushirish uchun tarmoq orqali taxminan <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> axborot yuklab olish kerak.\nDavom etilsinmi?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Faqat Wi-Fi orqali yuklab olish"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Tatbiq etish"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Disk hajmini oʻzgartirish uchun terminal qayta ishga tushiriladi"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Tasdiqlash"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Portlar boshqaruvi"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Uzatish portlariga ruxsat berish/ularni taqiqlash"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Uzatish postlari"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Ruxsat etilgan portlar saqlandi"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Yangi portga ruxsat bering"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Yangi port raqamini kiriting"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Saqlash"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Bekor qilish"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal yangi port ochishni talab qilmoqda"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Talab qilingan port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Qabul qilish"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal ishga tushgan"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Terminalni ochish uchun bosing"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Yopish"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> yoniq"</string>
</resources>
diff --git a/android/TerminalApp/res/values-vi/strings.xml b/android/TerminalApp/res/values-vi/strings.xml
index 9e9ea74..0a4e58d 100644
--- a/android/TerminalApp/res/values-vi/strings.xml
+++ b/android/TerminalApp/res/values-vi/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Màn hình cửa sổ dòng lệnh"</string>
<string name="terminal_input" msgid="4602512831433433551">"Con trỏ"</string>
<string name="empty_line" msgid="5012067143408427178">"Dòng trống"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Nhấn đúp để nhập nội dung"</string>
<string name="installer_title_text" msgid="500663060973466805">"Cài đặt Linux terminal"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Để chạy ứng dụng Terminal trên Linux, bạn cần tải khoảng <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dữ liệu xuống qua mạng.\nBạn có muốn tiếp tục không?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Chỉ tải xuống qua Wi-Fi"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Áp dụng"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Ứng dụng Terminal sẽ khởi động lại để đổi kích thước ổ đĩa"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Xác nhận"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Kiểm soát cổng"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Cho phép/từ chối cổng nghe"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Cổng nghe"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Đã lưu các cổng được cho phép"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Cho phép một cổng mới"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Nhập số cổng mới"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Lưu"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Huỷ"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Ứng dụng Terminal đang yêu cầu mở một cổng mới"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Cổng được yêu cầu: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Chấp nhận"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Terminal đang chạy"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Nhấp để mở ứng dụng Terminal"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Đóng"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> đã được bật"</string>
</resources>
diff --git a/android/TerminalApp/res/values-zh-rCN/strings.xml b/android/TerminalApp/res/values-zh-rCN/strings.xml
index df1feb8..37279d4 100644
--- a/android/TerminalApp/res/values-zh-rCN/strings.xml
+++ b/android/TerminalApp/res/values-zh-rCN/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"终端显示内容"</string>
<string name="terminal_input" msgid="4602512831433433551">"光标"</string>
<string name="empty_line" msgid="5012067143408427178">"空行"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"点按两次即可输入"</string>
<string name="installer_title_text" msgid="500663060973466805">"安装 Linux 终端"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"如需启动 Linux 终端,您需要联网下载大约 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> 的数据。\n要继续吗?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"仅通过 WLAN 下载"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"应用"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"终端将重启以调整磁盘大小"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"确认"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"端口控制"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"允许/拒绝使用监听端口"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"监听端口"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"已保存的获准端口"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"允许使用新端口"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"输入新端口号"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"保存"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"取消"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"终端正在请求打开新端口"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"请求的端口:<xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"接受"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"终端正在运行"</string>
<string name="service_notification_content" msgid="5772901142342308273">"点击即可打开终端"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"关闭"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> 已启用"</string>
</resources>
diff --git a/android/TerminalApp/res/values-zh-rHK/strings.xml b/android/TerminalApp/res/values-zh-rHK/strings.xml
index 11acfb7..a3ea719 100644
--- a/android/TerminalApp/res/values-zh-rHK/strings.xml
+++ b/android/TerminalApp/res/values-zh-rHK/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"終端機顯示畫面"</string>
<string name="terminal_input" msgid="4602512831433433551">"游標"</string>
<string name="empty_line" msgid="5012067143408427178">"空白行"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"㩒兩下就可以將文字轉語音"</string>
<string name="installer_title_text" msgid="500663060973466805">"安裝 Linux 終端機"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"如要啟動 Linux 終端機,你需要透過網絡下載約 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> 資料。\n要繼續嗎?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"只透過 Wi-Fi 下載"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"套用"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"終端機將會重新開機以調整磁碟大小"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"確認"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"連接埠控制項"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"允許/拒絕聆聽連接埠"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"聆聽連接埠"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"已儲存許可的連接埠"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"允許存取新的連接埠"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"輸入新的連接埠號碼"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"儲存"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"取消"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"終端機正在要求開啟新的連接埠"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"已要求連接埠:<xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"接受"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"終端機執行中"</string>
<string name="service_notification_content" msgid="5772901142342308273">"按一下以開啟終端機"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"關閉"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"已啟用 <xliff:g id="ID_1">VirGL</xliff:g>"</string>
</resources>
diff --git a/android/TerminalApp/res/values-zh-rTW/strings.xml b/android/TerminalApp/res/values-zh-rTW/strings.xml
index 67cbe79..2768899 100644
--- a/android/TerminalApp/res/values-zh-rTW/strings.xml
+++ b/android/TerminalApp/res/values-zh-rTW/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"終端機顯示畫面"</string>
<string name="terminal_input" msgid="4602512831433433551">"游標"</string>
<string name="empty_line" msgid="5012067143408427178">"空白行"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"輕觸兩下即可輸入"</string>
<string name="installer_title_text" msgid="500663060973466805">"安裝 Linux 終端機"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"如要啟動 Linux 終端機,必須透過網路下載大約 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> 的資料。\n要繼續嗎?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"僅透過 Wi-Fi 下載"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"套用"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"終端機將重新啟動,以調整磁碟大小"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"確認"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"通訊埠控制"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"允許/拒絕監聽通訊埠"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"監聽通訊埠"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"已儲存允許的通訊埠"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"允許的新通訊埠"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"輸入新的通訊埠號碼"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"儲存"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"取消"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"終端機正在要求開啟新的通訊埠"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"要求的通訊埠:<xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"接受"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"終端機運作中"</string>
<string name="service_notification_content" msgid="5772901142342308273">"點選即可開啟終端機"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"關閉"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> 已啟用"</string>
</resources>
diff --git a/android/TerminalApp/res/values-zu/strings.xml b/android/TerminalApp/res/values-zu/strings.xml
index 327833c..f0811c5 100644
--- a/android/TerminalApp/res/values-zu/strings.xml
+++ b/android/TerminalApp/res/values-zu/strings.xml
@@ -20,8 +20,7 @@
<string name="terminal_display" msgid="4810127497644015237">"Isibonisi setheminali"</string>
<string name="terminal_input" msgid="4602512831433433551">"Icursor"</string>
<string name="empty_line" msgid="5012067143408427178">"Umugqa ongenalutho"</string>
- <!-- no translation found for double_tap_to_edit_text (2344363097580051316) -->
- <skip />
+ <string name="double_tap_to_edit_text" msgid="2344363097580051316">"Thepha kabili ukuze uthayiphe okokufaka"</string>
<string name="installer_title_text" msgid="500663060973466805">"Faka itheminali yeLinux"</string>
<string name="installer_desc_text_format" msgid="5935117404303982823">"Ukuze uqalise itheminali yeLinux, udinga ukudawuniloda cishe idatha engaba ngu-<xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> kunethiwekhi.\nUngathanda yini ukuqhubeka?"</string>
<string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Dawuniloda usebenzisa i-Wi-Fi kuphela"</string>
@@ -46,22 +45,14 @@
<string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Faka"</string>
<string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Itheminali izoqalwa kabusha ukuze ishintshe usayizi wediski"</string>
<string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Qinisekisa"</string>
- <!-- no translation found for settings_port_forwarding_title (4971368519093858377) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_sub_title (6547942778715654953) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_active_ports_title (1841436780635889858) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_other_enabled_ports_title (2644381842623436676) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_title (2734992099990516463) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_textview_hint (3514035855169269600) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_save (1097831033824718393) -->
- <skip />
- <!-- no translation found for settings_port_forwarding_dialog_cancel (1972597831318470889) -->
- <skip />
+ <string name="settings_port_forwarding_title" msgid="4971368519093858377">"Ulawulo lwembobo"</string>
+ <string name="settings_port_forwarding_sub_title" msgid="6547942778715654953">"Vumela/nqabela izimbobo zokulalela"</string>
+ <string name="settings_port_forwarding_active_ports_title" msgid="1841436780635889858">"Izimbobo zokulalela"</string>
+ <string name="settings_port_forwarding_other_enabled_ports_title" msgid="2644381842623436676">"Izimbobo ezivunyelwe ezilondoloziwe"</string>
+ <string name="settings_port_forwarding_dialog_title" msgid="2734992099990516463">"Vumela imbobo entsha"</string>
+ <string name="settings_port_forwarding_dialog_textview_hint" msgid="3514035855169269600">"Faka inombolo yembobo entsha"</string>
+ <string name="settings_port_forwarding_dialog_save" msgid="1097831033824718393">"Londoloza"</string>
+ <string name="settings_port_forwarding_dialog_cancel" msgid="1972597831318470889">"Khansela"</string>
<string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Itheminali icela ukuvula imbobo entsha"</string>
<string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Imbobo iceliwe: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
<string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Yamukela"</string>
@@ -87,5 +78,9 @@
<string name="service_notification_title" msgid="2918088850910713393">"Itheminali iyasebenza"</string>
<string name="service_notification_content" msgid="5772901142342308273">"Chofoza ukuze uvule itheminali"</string>
<string name="service_notification_quit_action" msgid="4888327875869277455">"Vala"</string>
+ <!-- no translation found for service_notification_close_title (1442526433361428844) -->
+ <skip />
+ <!-- no translation found for service_notification_force_quit_action (3462226330416157775) -->
+ <skip />
<string name="virgl_enabled" msgid="5242525588039698086">"I-<xliff:g id="ID_1">VirGL</xliff:g> inikwe amandla."</string>
</resources>
diff --git a/android/TerminalApp/res/values/strings.xml b/android/TerminalApp/res/values/strings.xml
index 20fd95d..9cb6e4d 100644
--- a/android/TerminalApp/res/values/strings.xml
+++ b/android/TerminalApp/res/values/strings.xml
@@ -89,6 +89,8 @@
<string name="settings_port_forwarding_active_ports_title">Listening ports</string>
<!-- Title for other enabled ports setting in port forwarding [CHAR LIMIT=none] -->
<string name="settings_port_forwarding_other_enabled_ports_title">Saved allowed ports</string>
+ <!-- Description of close button for other enabled ports. Used for talkback. [CHAR LIMIT=none] -->
+ <string name="settings_port_forwarding_other_enabled_port_close_button">Delete <xliff:g id="port_number" example="8000">%d</xliff:g></string>
<!-- Dialog title for enabling a new port [CHAR LIMIT=none] -->
<string name="settings_port_forwarding_dialog_title">Allow a new port</string>
@@ -153,6 +155,11 @@
<!-- Notification action button for closing the virtual machine [CHAR LIMIT=20] -->
<string name="service_notification_quit_action">Close</string>
+ <!-- Notification title for foreground service notification during closing [CHAR LIMIT=none] -->
+ <string name="service_notification_close_title">Terminal is closing</string>
+ <!-- Notification action button for force-closing the virtual machine [CHAR LIMIT=30] -->
+ <string name="service_notification_force_quit_action">Force close</string>
+
<!-- This string is for toast message to notify that VirGL is enabled. [CHAR LIMIT=40] -->
<string name="virgl_enabled"><xliff:g>VirGL</xliff:g> is enabled</string>
</resources>
diff --git a/android/virtmgr/Android.bp b/android/virtmgr/Android.bp
index ad63995..3883c34 100644
--- a/android/virtmgr/Android.bp
+++ b/android/virtmgr/Android.bp
@@ -69,7 +69,7 @@
"liblibfdt",
"libfsfdt",
"libhypervisor_props",
- "libzerocopy",
+ "libzerocopy-0.7.35",
"libuuid",
// TODO(b/202115393) stabilize the interface
"packagemanager_aidl-rust",
diff --git a/android/virtmgr/src/aidl.rs b/android/virtmgr/src/aidl.rs
index e9074c6..79c7d81 100644
--- a/android/virtmgr/src/aidl.rs
+++ b/android/virtmgr/src/aidl.rs
@@ -18,7 +18,7 @@
use crate::atom::{write_vm_booted_stats, write_vm_creation_stats};
use crate::composite::make_composite_image;
use crate::crosvm::{AudioConfig, CrosvmConfig, DiskFile, SharedPathConfig, DisplayConfig, GpuConfig, InputDeviceOption, PayloadState, UsbConfig, VmContext, VmInstance, VmState};
-use crate::debug_config::DebugConfig;
+use crate::debug_config::{DebugConfig, DebugPolicy};
use crate::dt_overlay::{create_device_tree_overlay, VM_DT_OVERLAY_MAX_SIZE, VM_DT_OVERLAY_PATH};
use crate::payload::{add_microdroid_payload_images, add_microdroid_system_images, add_microdroid_vendor_image};
use crate::selinux::{check_tee_service_permission, getfilecon, getprevcon, SeContext};
@@ -319,6 +319,12 @@
Ok(Vec::from_iter(SUPPORTED_OS_NAMES.iter().cloned()))
}
+ /// Get printable debug policy for testing and debugging
+ fn getDebugPolicy(&self) -> binder::Result<String> {
+ let debug_policy = DebugPolicy::from_host();
+ Ok(format!("{debug_policy:?}"))
+ }
+
/// Returns whether given feature is enabled
fn isFeatureEnabled(&self, feature: &str) -> binder::Result<bool> {
check_manage_access()?;
@@ -781,7 +787,7 @@
boost_uclamp: config.boostUclamp,
gpu_config,
audio_config,
- no_balloon: config.noBalloon,
+ balloon: config.balloon,
usb_config,
dump_dt_fd,
};
diff --git a/android/virtmgr/src/crosvm.rs b/android/virtmgr/src/crosvm.rs
index a385b82..2bfa4e1 100644
--- a/android/virtmgr/src/crosvm.rs
+++ b/android/virtmgr/src/crosvm.rs
@@ -133,7 +133,7 @@
pub boost_uclamp: bool,
pub gpu_config: Option<GpuConfig>,
pub audio_config: Option<AudioConfig>,
- pub no_balloon: bool,
+ pub balloon: bool,
pub usb_config: UsbConfig,
pub dump_dt_fd: Option<File>,
}
@@ -975,8 +975,7 @@
.arg("--cid")
.arg(config.cid.to_string());
- if system_properties::read_bool("hypervisor.memory_reclaim.supported", false)?
- && !config.no_balloon
+ if system_properties::read_bool("hypervisor.memory_reclaim.supported", false)? && config.balloon
{
command.arg("--balloon-page-reporting");
} else {
diff --git a/android/virtualizationservice/aidl/android/system/virtualizationservice/IVirtualizationService.aidl b/android/virtualizationservice/aidl/android/system/virtualizationservice/IVirtualizationService.aidl
index 0c3f6b7..169c3dc 100644
--- a/android/virtualizationservice/aidl/android/system/virtualizationservice/IVirtualizationService.aidl
+++ b/android/virtualizationservice/aidl/android/system/virtualizationservice/IVirtualizationService.aidl
@@ -82,6 +82,11 @@
*/
String[] getSupportedOSList();
+ /**
+ * Get installed debug policy for test and debugging purpose.
+ */
+ String getDebugPolicy();
+
/** Returns whether given feature is enabled. */
boolean isFeatureEnabled(in String feature);
diff --git a/android/virtualizationservice/aidl/android/system/virtualizationservice/VirtualMachineRawConfig.aidl b/android/virtualizationservice/aidl/android/system/virtualizationservice/VirtualMachineRawConfig.aidl
index 5728a68..3393546 100644
--- a/android/virtualizationservice/aidl/android/system/virtualizationservice/VirtualMachineRawConfig.aidl
+++ b/android/virtualizationservice/aidl/android/system/virtualizationservice/VirtualMachineRawConfig.aidl
@@ -106,7 +106,7 @@
@nullable AudioConfig audioConfig;
- boolean noBalloon;
+ boolean balloon;
/** Enable or disable USB passthrough support */
@nullable UsbConfig usbConfig;
diff --git a/android/virtualizationservice/vfio_handler/Android.bp b/android/virtualizationservice/vfio_handler/Android.bp
index 3635cf1..fec61f1 100644
--- a/android/virtualizationservice/vfio_handler/Android.bp
+++ b/android/virtualizationservice/vfio_handler/Android.bp
@@ -28,7 +28,7 @@
"liblog_rust",
"libnix",
"librustutils",
- "libzerocopy",
+ "libzerocopy-0.7.35",
],
apex_available: ["com.android.virt"],
}
diff --git a/android/vm/src/main.rs b/android/vm/src/main.rs
index 7bfd957..830d56c 100644
--- a/android/vm/src/main.rs
+++ b/android/vm/src/main.rs
@@ -483,6 +483,9 @@
let os_list = get_service()?.getSupportedOSList()?;
println!("Available OS list: {}", serde_json::to_string(&os_list)?);
+ let debug_policy = get_service()?.getDebugPolicy()?;
+ println!("Debug policy: {}", debug_policy);
+
Ok(())
}
diff --git a/build/Android.bp b/build/Android.bp
index 2b97927..ef70fe4 100644
--- a/build/Android.bp
+++ b/build/Android.bp
@@ -75,3 +75,20 @@
tools: ["dtc"],
cmd: "FILES=($(in)) && $(location dtc) -@ -I dts -O dtb $${FILES[-1]} -o $(out)",
}
+
+// This is a temporary workaround until b/343795511 is implemented.
+aconfig_declarations {
+ name: "avf_aconfig_flags",
+ package: "com.android.system.virtualmachine.flags",
+ container: "com.android.virt",
+ srcs: [
+ "avf_flags.aconfig",
+ ],
+}
+
+java_aconfig_library {
+ name: "avf_aconfig_flags_java",
+ aconfig_declarations: "avf_aconfig_flags",
+ sdk_version: "module_current",
+ apex_available: ["com.android.virt"],
+}
diff --git a/build/apex/product_packages.mk b/build/apex/product_packages.mk
index 0646e67..edc8618 100644
--- a/build/apex/product_packages.mk
+++ b/build/apex/product_packages.mk
@@ -65,11 +65,3 @@
$(error RELEASE_AVF_ENABLE_LLPVM_CHANGES must also be enabled)
endif
endif
-
-ifdef RELEASE_AVF_ENABLE_EARLY_VM
- # We can't query TARGET_RELEASE from here, so we use RELEASE_AIDL_USE_UNFROZEN as a proxy value of
- # whether we are building -next release.
- ifneq ($(RELEASE_AIDL_USE_UNFROZEN),true)
- $(error RELEASE_AVF_ENABLE_EARLY_VM can only be enabled in trunk_staging until b/357025924 is fixed)
- endif
-endif
diff --git a/build/avf_flags.aconfig b/build/avf_flags.aconfig
new file mode 100644
index 0000000..9815c60
--- /dev/null
+++ b/build/avf_flags.aconfig
@@ -0,0 +1,11 @@
+package: "com.android.system.virtualmachine.flags"
+container: "com.android.virt"
+
+flag {
+ name: "promote_set_should_use_hugepages_to_system_api"
+ is_exported: true
+ namespace: "virtualization"
+ description: "Flag used in @FlaggedApi annotation for setShouldUseHugepages"
+ bug: "383347947"
+ is_fixed_read_only: true
+}
diff --git a/build/debian/build.sh b/build/debian/build.sh
index 19894c2..9bb1481 100755
--- a/build/debian/build.sh
+++ b/build/debian/build.sh
@@ -11,6 +11,7 @@
echo "Options:"
echo "-h Print usage and this help message and exit."
echo "-a ARCH Architecture of the image [default is host arch: $(uname -m)]"
+ echo "-k Build and use our custom kernel [default is cloud kernel]"
echo "-r Release mode build"
echo "-w Save temp work directory [for debugging]"
}
@@ -22,7 +23,7 @@
}
parse_options() {
- while getopts "a:hrw" option; do
+ while getopts "a:hkrw" option; do
case ${option} in
h)
show_help ; exit
@@ -30,6 +31,9 @@
a)
arch="$OPTARG"
;;
+ k)
+ use_custom_kernel=1
+ ;;
r)
mode=release
;;
@@ -117,6 +121,33 @@
linux-image-generic
)
fi
+
+ if [[ "$use_custom_kernel" -eq 1 ]]; then
+ packages+=(
+ bc
+ bison
+ debhelper
+ dh-exec
+ flex
+ gcc-12
+ kernel-wedge
+ libelf-dev
+ libpci-dev
+ lz4
+ pahole
+ python3-jinja2
+ python3-docutils
+ quilt
+ rsync
+ )
+ if [[ "$arch" == "aarch64" ]]; then
+ packages+=(
+ gcc-arm-linux-gnueabihf
+ gcc-12-aarch64-linux-gnu
+ )
+ fi
+ fi
+
DEBIAN_FRONTEND=noninteractive \
apt install --no-install-recommends --assume-yes "${packages[@]}"
@@ -195,6 +226,82 @@
build_rust_binary_and_copy shutdown_runner
}
+package_custom_kernel() {
+ if [[ "$use_custom_kernel" != 1 ]]; then
+ echo "linux-headers-generic" >> "${config_space}/package_config/AVF"
+ return
+ fi
+
+ # NOTE: 6.1 is the latest LTS kernel for which Debian's kernel build scripts
+ # work on Python 3.10, the default version on our Ubuntu 22.04 builders.
+ local debian_kver="6.1.119-1"
+ local custom_flavour="avf"
+ local ksrc_base_url="https://deb.debian.org/debian/pool/main/l/linux"
+
+ local dsc_url="${ksrc_base_url}/linux_${debian_kver}.dsc"
+ local debian_ksrc_url="${ksrc_base_url}/linux_${debian_kver}.debian.tar.xz"
+ local orig_ksrc_url="${ksrc_base_url}/linux_${debian_kver%-*}.orig.tar.xz"
+
+ # 0. Grab the kernel sources, and the latest debian keyrings
+ mkdir -p "${workdir}/kernel"
+ pushd "${workdir}/kernel" > /dev/null
+ wget "$dsc_url"
+ wget "$orig_ksrc_url"
+ wget "$debian_ksrc_url"
+ rsync -az --progress keyring.debian.org::keyrings/keyrings/ /usr/share/keyrings/
+
+ # 1. Verify, extract and merge patches into the original kernel sources
+ dpkg-source --require-strong-checksums \
+ --require-valid-signature \
+ --extract linux_${debian_kver}.dsc
+ pushd "linux-${debian_kver%-*}" > /dev/null
+ # TODO: Copy our own kernel patches to debian/patches
+ # and add patch file names in the desired order to debian/patches/series
+ ./debian/rules orig
+
+ local abi_kver="$(sed -nE 's;Package: linux-support-(.*);\1;p' debian/control)"
+ local debarch_flavour="${custom_flavour}-${debian_arch}"
+ local abi_flavour="${abi_kver}-${debarch_flavour}"
+
+ # 2. Define our custom flavour and regenerate control file
+ # NOTE: Our flavour extends Debian's `cloud` config on the `none` featureset.
+ cat > debian/config/${debian_arch}/config.${debarch_flavour} <<EOF
+# TODO: Add our custom kernel config to this file
+EOF
+
+ sed -z "s;\[base\]\nflavours:;[base]\nflavours:\n ${debarch_flavour};" \
+ -i debian/config/${debian_arch}/none/defines
+ cat >> debian/config/${debian_arch}/none/defines <<EOF
+[${debarch_flavour}_image]
+configs:
+ config.cloud
+ ${debian_arch}/config.${debarch_flavour}
+EOF
+ cat >> debian/config/${debian_arch}/defines <<EOF
+[${debarch_flavour}_description]
+hardware: ${arch} AVF
+hardware-long: ${arch} Android Virtualization Framework
+EOF
+ ./debian/rules debian/control || true
+
+ # 3. Build the kernel and generate Debian packages
+ ./debian/rules source
+ [[ "$arch" == "$(uname -m)" ]] || export $(dpkg-architecture -a $debian_arch)
+ make -j$(nproc) -f debian/rules.gen \
+ "binary-arch_${debian_arch}_none_${debarch_flavour}"
+
+ # 4. Copy the packages to localdebs and add their names to package_config/AVF
+ popd > /dev/null
+ cp "linux-headers-${abi_flavour}_${debian_kver}_${debian_arch}.deb" \
+ "linux-image-${abi_flavour}-unsigned_${debian_kver}_${debian_arch}.deb" \
+ "${debian_cloud_image}/localdebs/"
+ popd > /dev/null
+ cat >> "${config_space}/package_config/AVF" <<EOF
+linux-headers-${abi_flavour}
+linux-image-${abi_flavour}-unsigned
+EOF
+}
+
run_fai() {
local out="${built_image}"
make -C "${debian_cloud_image}" "image_bookworm_nocloud_${debian_arch}"
@@ -238,12 +345,14 @@
arch="$(uname -m)"
mode=debug
save_workdir=0
+use_custom_kernel=0
parse_options "$@"
check_sudo
install_prerequisites
download_debian_cloud_image
copy_android_config
+package_custom_kernel
run_fai
fdisk -l "${built_image}"
images=()
diff --git a/build/debian/build_in_container.sh b/build/debian/build_in_container.sh
index 5028b74..967f5ab 100755
--- a/build/debian/build_in_container.sh
+++ b/build/debian/build_in_container.sh
@@ -6,17 +6,19 @@
echo "Options:"
echo "-h Print usage and this help message and exit."
echo "-a ARCH Architecture of the image [default is host arch: $(uname -m)]"
+ echo "-k Build and use our custom kernel [default is cloud kernel]"
echo "-r Release mode build"
echo "-s Leave a shell open [default: only if the build fails]"
echo "-w Save temp work directory in the container [for debugging]"
}
arch="$(uname -m)"
+kernel_flag=
release_flag=
save_workdir_flag=
shell_condition="||"
-while getopts "a:rsw" option; do
+while getopts "a:hkrsw" option; do
case ${option} in
a)
arch="$OPTARG"
@@ -24,6 +26,9 @@
h)
show_help ; exit
;;
+ k)
+ kernel_flag="-k"
+ ;;
r)
release_flag="-r"
;;
@@ -53,4 +58,4 @@
-v "$ANDROID_BUILD_TOP/packages/modules/Virtualization:/root/Virtualization" \
--workdir /root/Virtualization/build/debian \
ubuntu:22.04 \
- bash -c "/root/Virtualization/build/debian/build.sh -a $arch $release_flag $save_workdir_flag $shell_condition bash"
+ bash -c "/root/Virtualization/build/debian/build.sh -a $arch $release_flag $kernel_flag $save_workdir_flag $shell_condition bash"
diff --git a/build/debian/fai_config/package_config/AVF b/build/debian/fai_config/package_config/AVF
index 2e55e90..a91c354 100644
--- a/build/debian/fai_config/package_config/AVF
+++ b/build/debian/fai_config/package_config/AVF
@@ -1,5 +1,4 @@
PACKAGES install
bpfcc-tools
-linux-headers-generic
procps
diff --git a/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh b/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh
index 22ac595..a935591 100644
--- a/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh
+++ b/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh
@@ -5,7 +5,7 @@
cd "${KOKORO_ARTIFACTS_DIR}/git/avf/build/debian/"
sudo losetup -D
grep vmx /proc/cpuinfo || true
-sudo ./build.sh -r -a x86_64
+sudo ./build.sh -a x86_64 -k -r
sudo mv images.tar.gz ${KOKORO_ARTIFACTS_DIR} || true
mkdir -p ${KOKORO_ARTIFACTS_DIR}/logs
sudo cp -r /var/log/fai/* ${KOKORO_ARTIFACTS_DIR}/logs || true
diff --git a/build/microdroid/Android.bp b/build/microdroid/Android.bp
index 68b715d..dea0bf3 100644
--- a/build/microdroid/Android.bp
+++ b/build/microdroid/Android.bp
@@ -598,6 +598,12 @@
src: ":microdroid_kernel_prebuilt-x86_64",
},
},
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "16",
+ },
+ ],
include_descriptors_from_images: [
":microdroid_16k_initrd_normal_hashdesc",
":microdroid_16k_initrd_debug_hashdesc",
diff --git a/guest/apkdmverity/Android.bp b/guest/apkdmverity/Android.bp
index 0cb8ca1..64dde3e 100644
--- a/guest/apkdmverity/Android.bp
+++ b/guest/apkdmverity/Android.bp
@@ -22,7 +22,7 @@
"libnum_traits",
"libscopeguard",
"libuuid",
- "libzerocopy",
+ "libzerocopy-0.7.35",
],
proc_macros: ["libnum_derive"],
multilib: {
diff --git a/guest/microdroid_manager/src/vm_secret.rs b/guest/microdroid_manager/src/vm_secret.rs
index 1ad2d88..5cc90ff 100644
--- a/guest/microdroid_manager/src/vm_secret.rs
+++ b/guest/microdroid_manager/src/vm_secret.rs
@@ -36,6 +36,8 @@
use secretkeeper_comm::data_types::error::SecretkeeperError;
use std::fs;
use zeroize::Zeroizing;
+use std::sync::Mutex;
+use std::sync::Arc;
const ENCRYPTEDSTORE_KEY_IDENTIFIER: &str = "encryptedstore_key";
const AUTHORITY_HASH: i64 = -4670549;
@@ -98,27 +100,20 @@
let explicit_dice = OwnedDiceArtifactsWithExplicitKey::from_owned_artifacts(dice_artifacts)
.context("Failed to get Dice artifacts in explicit key format")?;
- // For pVM, skp_secret are stored in Secretkeeper. For non-protected it is all 0s.
+ let session = SkVmSession::new(vm_service, &explicit_dice)?;
+ let id = super::get_instance_id()?.ok_or(anyhow!("Missing instance_id"))?;
+ let explicit_dice_chain = explicit_dice
+ .explicit_key_dice_chain()
+ .ok_or(anyhow!("Missing explicit dice chain, this is unusual"))?;
+ let policy = sealing_policy(explicit_dice_chain)
+ .map_err(|e| anyhow!("Failed to build a sealing_policy: {e}"))?;
let mut skp_secret = Zeroizing::new([0u8; SECRET_SIZE]);
- if super::is_strict_boot() {
- let sk_service = get_secretkeeper_service(vm_service)?;
- let mut session =
- SkSession::new(sk_service, &explicit_dice, Some(get_secretkeeper_identity()?))?;
- let id = super::get_instance_id()?.ok_or(anyhow!("Missing instance_id"))?;
- let explicit_dice_chain = explicit_dice
- .explicit_key_dice_chain()
- .ok_or(anyhow!("Missing explicit dice chain, this is unusual"))?;
- let policy = sealing_policy(explicit_dice_chain)
- .map_err(|e| anyhow!("Failed to build a sealing_policy: {e}"))?;
- if let Some(secret) = get_secret(&mut session, id, Some(policy.clone()))? {
- *skp_secret = secret;
- } else {
- log::warn!(
- "No entry found in Secretkeeper for this VM instance, creating new secret."
- );
- *skp_secret = rand::random();
- store_secret(&mut session, id, skp_secret.clone(), policy)?;
- }
+ if let Some(secret) = session.get_secret(id, Some(policy.clone()))? {
+ *skp_secret = secret
+ } else {
+ log::warn!("No entry found in Secretkeeper for this VM instance, creating new secret.");
+ *skp_secret = rand::random();
+ session.store_secret(id, skp_secret.clone(), policy)?;
}
Ok(Self::V2 {
dice_artifacts: explicit_dice,
@@ -231,48 +226,67 @@
.map_err(|e| format!("DicePolicy construction failed {e:?}"))
}
-fn store_secret(
- session: &mut SkSession,
- id: [u8; ID_SIZE],
- secret: Zeroizing<[u8; SECRET_SIZE]>,
- sealing_policy: Vec<u8>,
-) -> Result<()> {
- let store_request = StoreSecretRequest { id: Id(id), secret: Secret(*secret), sealing_policy };
- log::info!("Secretkeeper operation: {:?}", store_request);
+// The secure session between VM & Secretkeeper
+struct SkVmSession(Arc<Mutex<SkSession>>);
+impl SkVmSession {
+ fn new(
+ vm_service: &Strong<dyn IVirtualMachineService>,
+ dice: &OwnedDiceArtifactsWithExplicitKey,
+ ) -> Result<Self> {
+ let secretkeeper_proxy = get_secretkeeper_service(vm_service)?;
+ let secure_session =
+ SkSession::new(secretkeeper_proxy, dice, Some(get_secretkeeper_identity()?))?;
+ let secure_session = Arc::new(Mutex::new(secure_session));
+ Ok(Self(secure_session))
+ }
- let store_request = store_request.serialize_to_packet().to_vec().map_err(anyhow_err)?;
- let store_response = session.secret_management_request(&store_request)?;
- let store_response = ResponsePacket::from_slice(&store_response).map_err(anyhow_err)?;
- let response_type = store_response.response_type().map_err(anyhow_err)?;
- ensure!(
- response_type == ResponseType::Success,
- "Secretkeeper store failed with error: {:?}",
- *SecretkeeperError::deserialize_from_packet(store_response).map_err(anyhow_err)?
- );
- Ok(())
-}
+ fn store_secret(
+ &self,
+ id: [u8; ID_SIZE],
+ secret: Zeroizing<[u8; SECRET_SIZE]>,
+ sealing_policy: Vec<u8>,
+ ) -> Result<()> {
+ let store_request =
+ StoreSecretRequest { id: Id(id), secret: Secret(*secret), sealing_policy };
+ log::info!("Secretkeeper operation: {:?}", store_request);
-fn get_secret(
- session: &mut SkSession,
- id: [u8; ID_SIZE],
- updated_sealing_policy: Option<Vec<u8>>,
-) -> Result<Option<[u8; SECRET_SIZE]>> {
- let get_request = GetSecretRequest { id: Id(id), updated_sealing_policy };
- log::info!("Secretkeeper operation: {:?}", get_request);
- let get_request = get_request.serialize_to_packet().to_vec().map_err(anyhow_err)?;
- let get_response = session.secret_management_request(&get_request)?;
- let get_response = ResponsePacket::from_slice(&get_response).map_err(anyhow_err)?;
- let response_type = get_response.response_type().map_err(anyhow_err)?;
- if response_type == ResponseType::Success {
- let get_response =
- *GetSecretResponse::deserialize_from_packet(get_response).map_err(anyhow_err)?;
- Ok(Some(get_response.secret.0))
- } else {
- let error = SecretkeeperError::deserialize_from_packet(get_response).map_err(anyhow_err)?;
- if *error == SecretkeeperError::EntryNotFound {
- return Ok(None);
+ let store_request = store_request.serialize_to_packet().to_vec().map_err(anyhow_err)?;
+ let session = &mut *self.0.lock().unwrap();
+ let store_response = session.secret_management_request(&store_request)?;
+ let store_response = ResponsePacket::from_slice(&store_response).map_err(anyhow_err)?;
+ let response_type = store_response.response_type().map_err(anyhow_err)?;
+ ensure!(
+ response_type == ResponseType::Success,
+ "Secretkeeper store failed with error: {:?}",
+ *SecretkeeperError::deserialize_from_packet(store_response).map_err(anyhow_err)?
+ );
+ Ok(())
+ }
+
+ fn get_secret(
+ &self,
+ id: [u8; ID_SIZE],
+ updated_sealing_policy: Option<Vec<u8>>,
+ ) -> Result<Option<[u8; SECRET_SIZE]>> {
+ let get_request = GetSecretRequest { id: Id(id), updated_sealing_policy };
+ log::info!("Secretkeeper operation: {:?}", get_request);
+ let get_request = get_request.serialize_to_packet().to_vec().map_err(anyhow_err)?;
+ let session = &mut *self.0.lock().unwrap();
+ let get_response = session.secret_management_request(&get_request)?;
+ let get_response = ResponsePacket::from_slice(&get_response).map_err(anyhow_err)?;
+ let response_type = get_response.response_type().map_err(anyhow_err)?;
+ if response_type == ResponseType::Success {
+ let get_response =
+ *GetSecretResponse::deserialize_from_packet(get_response).map_err(anyhow_err)?;
+ Ok(Some(get_response.secret.0))
+ } else {
+ let error =
+ SecretkeeperError::deserialize_from_packet(get_response).map_err(anyhow_err)?;
+ if *error == SecretkeeperError::EntryNotFound {
+ return Ok(None);
+ }
+ Err(anyhow!("Secretkeeper get failed: {error:?}"))
}
- Err(anyhow!("Secretkeeper get failed: {error:?}"))
}
}
diff --git a/guest/pvmfw/Android.bp b/guest/pvmfw/Android.bp
index 51f7802..23755cf 100644
--- a/guest/pvmfw/Android.bp
+++ b/guest/pvmfw/Android.bp
@@ -32,7 +32,7 @@
"libuuid_nostd",
"libvirtio_drivers",
"libvmbase",
- "libzerocopy_nostd",
+ "libzerocopy-0.7.35_nostd",
"libzeroize_nostd",
],
}
@@ -77,7 +77,7 @@
"liblibfdt",
"liblog_rust",
"libpvmfw_fdt_template",
- "libzerocopy",
+ "libzerocopy-0.7.35",
],
data: [
":test_pvmfw_devices_vm_dtbo",
@@ -119,7 +119,7 @@
"libdiced_open_dice_nostd",
"libpvmfw_avb_nostd",
"libdiced_sample_inputs_nostd",
- "libzerocopy_nostd",
+ "libzerocopy-0.7.35_nostd",
"libhex",
],
static_libs: ["libopen_dice_clear_memory"],
diff --git a/guest/pvmfw/README.md b/guest/pvmfw/README.md
index 8c8314d..766a923 100644
--- a/guest/pvmfw/README.md
+++ b/guest/pvmfw/README.md
@@ -461,6 +461,7 @@
- `secretkeeper_protection`: pvmfw defers rollback protection to the guest
- `supports_uefi_boot`: pvmfw boots the VM as a EFI payload (experimental)
- `trusty_security_vm`: pvmfw skips rollback protection
+- `"com.android.virt.page_size"`: the guest page size in KiB (optional, defaults to 4)
## Development
diff --git a/guest/pvmfw/avb/Android.bp b/guest/pvmfw/avb/Android.bp
index a1ee626..0294322 100644
--- a/guest/pvmfw/avb/Android.bp
+++ b/guest/pvmfw/avb/Android.bp
@@ -37,10 +37,16 @@
":test_image_with_one_hashdesc",
":test_image_with_non_initrd_hashdesc",
":test_image_with_initrd_and_non_initrd_desc",
- ":test_image_with_prop_desc",
+ ":test_image_with_invalid_page_size",
+ ":test_image_with_negative_page_size",
+ ":test_image_with_overflow_page_size",
+ ":test_image_with_0k_page_size",
+ ":test_image_with_1k_page_size",
+ ":test_image_with_4k_page_size",
+ ":test_image_with_9k_page_size",
+ ":test_image_with_16k_page_size",
":test_image_with_service_vm_prop",
":test_image_with_unknown_vm_type_prop",
- ":test_image_with_multiple_props",
":test_image_with_duplicated_capability",
":test_image_with_rollback_index_5",
":test_image_with_multiple_capabilities",
@@ -117,15 +123,113 @@
}
avb_add_hash_footer {
- name: "test_image_with_prop_desc",
+ name: "test_image_with_invalid_page_size",
src: ":unsigned_test_image",
partition_name: "boot",
private_key: ":pvmfw_sign_key",
salt: "2134",
props: [
{
- name: "mock_prop",
- value: "3333",
+ name: "com.android.virt.page_size",
+ value: "invalid",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_negative_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "-16",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_overflow_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "18014398509481983",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_0k_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "0",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_1k_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "1",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_4k_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "4",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_9k_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "9",
+ },
+ ],
+}
+
+avb_add_hash_footer {
+ name: "test_image_with_16k_page_size",
+ src: ":unsigned_test_image",
+ partition_name: "boot",
+ private_key: ":pvmfw_sign_key",
+ salt: "2134",
+ props: [
+ {
+ name: "com.android.virt.page_size",
+ value: "16",
},
],
}
@@ -159,24 +263,6 @@
}
avb_add_hash_footer {
- name: "test_image_with_multiple_props",
- src: ":unsigned_test_image",
- partition_name: "boot",
- private_key: ":pvmfw_sign_key",
- salt: "2133",
- props: [
- {
- name: "com.android.virt.cap",
- value: "remote_attest",
- },
- {
- name: "another_vm_type",
- value: "foo_vm",
- },
- ],
-}
-
-avb_add_hash_footer {
name: "test_image_with_duplicated_capability",
src: ":unsigned_test_image",
partition_name: "boot",
diff --git a/guest/pvmfw/avb/src/error.rs b/guest/pvmfw/avb/src/error.rs
index 2e1950a..1307e15 100644
--- a/guest/pvmfw/avb/src/error.rs
+++ b/guest/pvmfw/avb/src/error.rs
@@ -28,6 +28,8 @@
InvalidDescriptors(DescriptorError),
/// Unknown vbmeta property.
UnknownVbmetaProperty,
+ /// VBMeta has invalid page_size property.
+ InvalidPageSize,
}
impl From<SlotVerifyError<'_>> for PvmfwVerifyError {
@@ -51,6 +53,7 @@
write!(f, "VBMeta has invalid descriptors. Error: {:?}", e)
}
Self::UnknownVbmetaProperty => write!(f, "Unknown vbmeta property"),
+ Self::InvalidPageSize => write!(f, "Invalid page_size property"),
}
}
}
diff --git a/guest/pvmfw/avb/src/verify.rs b/guest/pvmfw/avb/src/verify.rs
index a073502..8810696 100644
--- a/guest/pvmfw/avb/src/verify.rs
+++ b/guest/pvmfw/avb/src/verify.rs
@@ -17,12 +17,12 @@
use crate::ops::{Ops, Payload};
use crate::partition::PartitionName;
use crate::PvmfwVerifyError;
-use alloc::vec;
use alloc::vec::Vec;
use avb::{
- Descriptor, DescriptorError, DescriptorResult, HashDescriptor, PartitionData,
- PropertyDescriptor, SlotVerifyError, SlotVerifyNoDataResult, VbmetaData,
+ Descriptor, DescriptorError, DescriptorResult, HashDescriptor, PartitionData, SlotVerifyError,
+ SlotVerifyNoDataResult, VbmetaData,
};
+use core::str;
// We use this for the rollback_index field if SlotVerifyData has empty rollback_indexes
const DEFAULT_ROLLBACK_INDEX: u64 = 0;
@@ -45,6 +45,8 @@
pub capabilities: Vec<Capability>,
/// Rollback index of kernel.
pub rollback_index: u64,
+ /// Page size of kernel, if present.
+ pub page_size: Option<usize>,
}
impl VerifiedBootData<'_> {
@@ -91,14 +93,14 @@
/// Returns the capabilities indicated in `descriptor`, or error if the descriptor has
/// unexpected contents.
- fn get_capabilities(descriptor: &PropertyDescriptor) -> Result<Vec<Self>, PvmfwVerifyError> {
- if descriptor.key != Self::KEY {
- return Err(PvmfwVerifyError::UnknownVbmetaProperty);
- }
+ fn get_capabilities(vbmeta_data: &VbmetaData) -> Result<Vec<Self>, PvmfwVerifyError> {
+ let Some(value) = vbmeta_data.get_property_value(Self::KEY) else {
+ return Ok(Vec::new());
+ };
let mut res = Vec::new();
- for v in descriptor.value.split(|b| *b == Self::SEPARATOR) {
+ for v in value.split(|b| *b == Self::SEPARATOR) {
let cap = match v {
Self::REMOTE_ATTEST => Self::RemoteAttest,
Self::TRUSTY_SECURITY_VM => Self::TrustySecurityVm,
@@ -153,30 +155,6 @@
}
}
-/// Verifies that the vbmeta contains at most one property descriptor and it indicates the
-/// vm type is service VM.
-fn verify_property_and_get_capabilities(
- descriptors: &[Descriptor],
-) -> Result<Vec<Capability>, PvmfwVerifyError> {
- let mut iter = descriptors.iter().filter_map(|d| match d {
- Descriptor::Property(p) => Some(p),
- _ => None,
- });
-
- let descriptor = match iter.next() {
- // No property descriptors -> no capabilities.
- None => return Ok(vec![]),
- Some(d) => d,
- };
-
- // Multiple property descriptors -> error.
- if iter.next().is_some() {
- return Err(DescriptorError::InvalidContents.into());
- }
-
- Capability::get_capabilities(descriptor)
-}
-
/// Hash descriptors extracted from a vbmeta image.
///
/// We always have a kernel hash descriptor and may have initrd normal or debug descriptors.
@@ -243,6 +221,23 @@
Ok(digest)
}
+/// Returns the indicated payload page size, if present.
+fn read_page_size(vbmeta_data: &VbmetaData) -> Result<Option<usize>, PvmfwVerifyError> {
+ let Some(property) = vbmeta_data.get_property_value("com.android.virt.page_size") else {
+ return Ok(None);
+ };
+ let size = str::from_utf8(property)
+ .or(Err(PvmfwVerifyError::InvalidPageSize))?
+ .parse::<usize>()
+ .or(Err(PvmfwVerifyError::InvalidPageSize))?
+ .checked_mul(1024)
+ // TODO(stable(unsigned_is_multiple_of)): use .is_multiple_of()
+ .filter(|sz| sz % (4 << 10) == 0 && *sz != 0)
+ .ok_or(PvmfwVerifyError::InvalidPageSize)?;
+
+ Ok(Some(size))
+}
+
/// Verifies the given initrd partition, and checks that the resulting contents looks like expected.
fn verify_initrd(
ops: &mut Ops,
@@ -278,7 +273,8 @@
verify_vbmeta_is_from_kernel_partition(vbmeta_image)?;
let descriptors = vbmeta_image.descriptors()?;
let hash_descriptors = HashDescriptors::get(&descriptors)?;
- let capabilities = verify_property_and_get_capabilities(&descriptors)?;
+ let capabilities = Capability::get_capabilities(vbmeta_image)?;
+ let page_size = read_page_size(vbmeta_image)?;
if initrd.is_none() {
hash_descriptors.verify_no_initrd()?;
@@ -289,6 +285,7 @@
public_key: trusted_public_key,
capabilities,
rollback_index,
+ page_size,
});
}
@@ -309,5 +306,6 @@
public_key: trusted_public_key,
capabilities,
rollback_index,
+ page_size,
})
}
diff --git a/guest/pvmfw/avb/tests/api_test.rs b/guest/pvmfw/avb/tests/api_test.rs
index 430c4b3..0ed0279 100644
--- a/guest/pvmfw/avb/tests/api_test.rs
+++ b/guest/pvmfw/avb/tests/api_test.rs
@@ -28,11 +28,17 @@
use utils::*;
const TEST_IMG_WITH_ONE_HASHDESC_PATH: &str = "test_image_with_one_hashdesc.img";
+const TEST_IMG_WITH_INVALID_PAGE_SIZE_PATH: &str = "test_image_with_invalid_page_size.img";
+const TEST_IMG_WITH_NEGATIVE_PAGE_SIZE_PATH: &str = "test_image_with_negative_page_size.img";
+const TEST_IMG_WITH_OVERFLOW_PAGE_SIZE_PATH: &str = "test_image_with_overflow_page_size.img";
+const TEST_IMG_WITH_0K_PAGE_SIZE_PATH: &str = "test_image_with_0k_page_size.img";
+const TEST_IMG_WITH_1K_PAGE_SIZE_PATH: &str = "test_image_with_1k_page_size.img";
+const TEST_IMG_WITH_4K_PAGE_SIZE_PATH: &str = "test_image_with_4k_page_size.img";
+const TEST_IMG_WITH_9K_PAGE_SIZE_PATH: &str = "test_image_with_9k_page_size.img";
+const TEST_IMG_WITH_16K_PAGE_SIZE_PATH: &str = "test_image_with_16k_page_size.img";
const TEST_IMG_WITH_ROLLBACK_INDEX_5: &str = "test_image_with_rollback_index_5.img";
-const TEST_IMG_WITH_PROP_DESC_PATH: &str = "test_image_with_prop_desc.img";
const TEST_IMG_WITH_SERVICE_VM_PROP_PATH: &str = "test_image_with_service_vm_prop.img";
const TEST_IMG_WITH_UNKNOWN_VM_TYPE_PROP_PATH: &str = "test_image_with_unknown_vm_type_prop.img";
-const TEST_IMG_WITH_MULTIPLE_PROPS_PATH: &str = "test_image_with_multiple_props.img";
const TEST_IMG_WITH_DUPLICATED_CAP_PATH: &str = "test_image_with_duplicated_capability.img";
const TEST_IMG_WITH_NON_INITRD_HASHDESC_PATH: &str = "test_image_with_non_initrd_hashdesc.img";
const TEST_IMG_WITH_INITRD_AND_NON_INITRD_DESC_PATH: &str =
@@ -51,6 +57,7 @@
&load_latest_initrd_normal()?,
b"initrd_normal",
DebugLevel::None,
+ None,
)
}
@@ -63,6 +70,7 @@
salt,
expected_rollback_index,
vec![Capability::TrustySecurityVm],
+ None,
)
}
@@ -72,6 +80,7 @@
&load_latest_initrd_debug()?,
b"initrd_debug",
DebugLevel::Full,
+ None,
)
}
@@ -93,6 +102,7 @@
public_key: &public_key,
capabilities: vec![],
rollback_index: 0,
+ page_size: None,
};
assert_eq!(expected_boot_data, verified_boot_data);
@@ -137,6 +147,7 @@
public_key: &public_key,
capabilities: vec![Capability::RemoteAttest],
rollback_index: 0,
+ page_size: None,
};
assert_eq!(expected_boot_data, verified_boot_data);
@@ -154,16 +165,6 @@
}
#[test]
-fn payload_with_multiple_props_fails_verification_with_no_initrd() -> Result<()> {
- assert_payload_verification_fails(
- &fs::read(TEST_IMG_WITH_MULTIPLE_PROPS_PATH)?,
- /* initrd= */ None,
- &load_trusted_public_key()?,
- PvmfwVerifyError::InvalidDescriptors(DescriptorError::InvalidContents),
- )
-}
-
-#[test]
fn payload_with_duplicated_capability_fails_verification_with_no_initrd() -> Result<()> {
assert_payload_verification_fails(
&fs::read(TEST_IMG_WITH_DUPLICATED_CAP_PATH)?,
@@ -174,16 +175,6 @@
}
#[test]
-fn payload_with_prop_descriptor_fails_verification_with_no_initrd() -> Result<()> {
- assert_payload_verification_fails(
- &fs::read(TEST_IMG_WITH_PROP_DESC_PATH)?,
- /* initrd= */ None,
- &load_trusted_public_key()?,
- PvmfwVerifyError::UnknownVbmetaProperty,
- )
-}
-
-#[test]
fn payload_expecting_initrd_fails_verification_with_no_initrd() -> Result<()> {
assert_payload_verification_fails(
&load_latest_signed_kernel()?,
@@ -257,6 +248,60 @@
}
#[test]
+fn kernel_has_expected_page_size_invalid() {
+ let kernel = fs::read(TEST_IMG_WITH_INVALID_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Err(PvmfwVerifyError::InvalidPageSize));
+}
+
+#[test]
+fn kernel_has_expected_page_size_negative() {
+ let kernel = fs::read(TEST_IMG_WITH_NEGATIVE_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Err(PvmfwVerifyError::InvalidPageSize));
+}
+
+#[test]
+fn kernel_has_expected_page_size_overflow() {
+ let kernel = fs::read(TEST_IMG_WITH_OVERFLOW_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Err(PvmfwVerifyError::InvalidPageSize));
+}
+
+#[test]
+fn kernel_has_expected_page_size_none() {
+ let kernel = fs::read(TEST_IMG_WITH_ONE_HASHDESC_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Ok(None));
+}
+
+#[test]
+fn kernel_has_expected_page_size_0k() {
+ let kernel = fs::read(TEST_IMG_WITH_0K_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Err(PvmfwVerifyError::InvalidPageSize));
+}
+
+#[test]
+fn kernel_has_expected_page_size_1k() {
+ let kernel = fs::read(TEST_IMG_WITH_1K_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Err(PvmfwVerifyError::InvalidPageSize));
+}
+
+#[test]
+fn kernel_has_expected_page_size_4k() {
+ let kernel = fs::read(TEST_IMG_WITH_4K_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Ok(Some(4usize << 10)));
+}
+
+#[test]
+fn kernel_has_expected_page_size_9k() {
+ let kernel = fs::read(TEST_IMG_WITH_9K_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Err(PvmfwVerifyError::InvalidPageSize));
+}
+
+#[test]
+fn kernel_has_expected_page_size_16k() {
+ let kernel = fs::read(TEST_IMG_WITH_16K_PAGE_SIZE_PATH).unwrap();
+ assert_eq!(read_page_size(&kernel), Ok(Some(16usize << 10)));
+}
+
+#[test]
fn kernel_footer_with_vbmeta_offset_overwritten_fails_verification() -> Result<()> {
// Arrange.
let mut kernel = load_latest_signed_kernel()?;
@@ -412,6 +457,7 @@
public_key: &public_key,
capabilities: vec![],
rollback_index: 5,
+ page_size: None,
};
assert_eq!(expected_boot_data, verified_boot_data);
Ok(())
diff --git a/guest/pvmfw/avb/tests/utils.rs b/guest/pvmfw/avb/tests/utils.rs
index 61bfbf2..79552b5 100644
--- a/guest/pvmfw/avb/tests/utils.rs
+++ b/guest/pvmfw/avb/tests/utils.rs
@@ -114,6 +114,7 @@
initrd: &[u8],
initrd_salt: &[u8],
expected_debug_level: DebugLevel,
+ page_size: Option<usize>,
) -> Result<()> {
let public_key = load_trusted_public_key()?;
let kernel = load_latest_signed_kernel()?;
@@ -133,6 +134,7 @@
public_key: &public_key,
capabilities,
rollback_index: if cfg!(llpvm_changes) { 1 } else { 0 },
+ page_size,
};
assert_eq!(expected_boot_data, verified_boot_data);
@@ -144,6 +146,7 @@
salt: &[u8],
expected_rollback_index: u64,
capabilities: Vec<Capability>,
+ page_size: Option<usize>,
) -> Result<()> {
let public_key = load_trusted_public_key()?;
let verified_boot_data = verify_payload(
@@ -163,12 +166,23 @@
public_key: &public_key,
capabilities,
rollback_index: expected_rollback_index,
+ page_size,
};
assert_eq!(expected_boot_data, verified_boot_data);
Ok(())
}
+pub fn read_page_size(kernel: &[u8]) -> Result<Option<usize>, PvmfwVerifyError> {
+ let public_key = load_trusted_public_key().unwrap();
+ let verified_boot_data = verify_payload(
+ kernel,
+ None, // initrd
+ &public_key,
+ )?;
+ Ok(verified_boot_data.page_size)
+}
+
pub fn hash(inputs: &[&[u8]]) -> Digest {
let mut digester = sha::Sha256::new();
inputs.iter().for_each(|input| digester.update(input));
diff --git a/guest/pvmfw/src/dice.rs b/guest/pvmfw/src/dice.rs
index b597309..6694881 100644
--- a/guest/pvmfw/src/dice.rs
+++ b/guest/pvmfw/src/dice.rs
@@ -200,6 +200,7 @@
public_key: b"public key",
capabilities: vec![],
rollback_index: 42,
+ page_size: None,
};
const HASH: Hash = *b"sixtyfourbyteslongsentencearerarebutletsgiveitatrycantbethathard";
diff --git a/guest/pvmfw/src/entry.rs b/guest/pvmfw/src/entry.rs
index 343c2fc..862fb1d 100644
--- a/guest/pvmfw/src/entry.rs
+++ b/guest/pvmfw/src/entry.rs
@@ -15,10 +15,9 @@
//! Low-level entry and exit points of pvmfw.
use crate::config;
-use crate::memory;
+use crate::memory::MemorySlices;
use core::arch::asm;
use core::mem::size_of;
-use core::ops::Range;
use core::slice;
use log::error;
use log::warn;
@@ -74,22 +73,36 @@
configure_heap!(SIZE_128KB);
limit_stack_size!(SIZE_4KB * 12);
+#[derive(Debug)]
+enum NextStage {
+ LinuxBoot(usize),
+ LinuxBootWithUart(usize),
+}
+
/// Entry point for pVM firmware.
pub fn start(fdt_address: u64, payload_start: u64, payload_size: u64, _arg3: u64) {
- // Limitations in this function:
- // - can't access non-pvmfw memory (only statically-mapped memory)
- // - can't access MMIO (except the console, already configured by vmbase)
+ let fdt_address = fdt_address.try_into().unwrap();
+ let payload_start = payload_start.try_into().unwrap();
+ let payload_size = payload_size.try_into().unwrap();
- match main_wrapper(fdt_address as usize, payload_start as usize, payload_size as usize) {
- Ok((entry, bcc, keep_uart)) => {
- jump_to_payload(fdt_address, entry.try_into().unwrap(), bcc, keep_uart)
- }
- Err(e) => {
- const REBOOT_REASON_CONSOLE: usize = 1;
- console_writeln!(REBOOT_REASON_CONSOLE, "{}", e.as_avf_reboot_string());
- reboot()
- }
- }
+ let reboot_reason = match main_wrapper(fdt_address, payload_start, payload_size) {
+ Err(r) => r,
+ Ok((next_stage, slices)) => match next_stage {
+ NextStage::LinuxBootWithUart(ep) => jump_to_payload(ep, &slices),
+ NextStage::LinuxBoot(ep) => {
+ if let Err(e) = unshare_uart() {
+ error!("Failed to unmap UART: {e}");
+ RebootReason::InternalError
+ } else {
+ jump_to_payload(ep, &slices)
+ }
+ }
+ },
+ };
+
+ const REBOOT_REASON_CONSOLE: usize = 1;
+ console_writeln!(REBOOT_REASON_CONSOLE, "{}", reboot_reason.as_avf_reboot_string());
+ reboot()
// if we reach this point and return, vmbase::entry::rust_entry() will call power::shutdown().
}
@@ -98,11 +111,11 @@
///
/// Provide the abstractions necessary for start() to abort the pVM boot and for main() to run with
/// the assumption that its environment has been properly configured.
-fn main_wrapper(
+fn main_wrapper<'a>(
fdt: usize,
payload: usize,
payload_size: usize,
-) -> Result<(usize, Range<usize>, bool), RebootReason> {
+) -> Result<(NextStage, MemorySlices<'a>), RebootReason> {
// Limitations in this function:
// - only access MMIO once (and while) it has been mapped and configured
// - only perform logging once the logger has been initialized
@@ -122,13 +135,7 @@
let config_entries = appended.get_entries();
- let slices = memory::MemorySlices::new(
- fdt,
- payload,
- payload_size,
- config_entries.vm_dtbo,
- config_entries.vm_ref_dt,
- )?;
+ let mut slices = MemorySlices::new(fdt, payload, payload_size)?;
// This wrapper allows main() to be blissfully ignorant of platform details.
let (next_bcc, debuggable_payload) = crate::main(
@@ -137,7 +144,10 @@
slices.ramdisk,
config_entries.bcc,
config_entries.debug_policy,
+ config_entries.vm_dtbo,
+ config_entries.vm_ref_dt,
)?;
+ slices.add_dice_chain(next_bcc);
// Keep UART MMIO_GUARD-ed for debuggable payloads, to enable earlycon.
let keep_uart = cfg!(debuggable_vms_improvements) && debuggable_payload;
@@ -150,13 +160,28 @@
})?;
unshare_all_memory();
- Ok((slices.kernel.as_ptr() as usize, next_bcc, keep_uart))
+ let next_stage = select_next_stage(slices.kernel, keep_uart);
+
+ Ok((next_stage, slices))
}
-fn jump_to_payload(fdt_address: u64, payload_start: u64, bcc: Range<usize>, keep_uart: bool) -> ! {
- if !keep_uart {
- unshare_uart().unwrap();
+fn select_next_stage(kernel: &[u8], keep_uart: bool) -> NextStage {
+ if keep_uart {
+ NextStage::LinuxBootWithUart(kernel.as_ptr() as _)
+ } else {
+ NextStage::LinuxBoot(kernel.as_ptr() as _)
}
+}
+
+fn jump_to_payload(entrypoint: usize, slices: &MemorySlices) -> ! {
+ let fdt_address = slices.fdt.as_ptr() as usize;
+ let bcc = slices
+ .dice_chain
+ .map(|slice| {
+ let r = slice.as_ptr_range();
+ (r.start as usize)..(r.end as usize)
+ })
+ .expect("Missing DICE chain");
deactivate_dynamic_page_tables();
@@ -296,8 +321,8 @@
eh_stack = in(reg) u64::try_from(eh_stack.start.0).unwrap(),
eh_stack_end = in(reg) u64::try_from(eh_stack.end.0).unwrap(),
dcache_line_size = in(reg) u64::try_from(min_dcache_line_size()).unwrap(),
- in("x0") fdt_address,
- in("x30") payload_start,
+ in("x0") u64::try_from(fdt_address).unwrap(),
+ in("x30") u64::try_from(entrypoint).unwrap(),
options(noreturn),
);
};
diff --git a/guest/pvmfw/src/fdt.rs b/guest/pvmfw/src/fdt.rs
index 027f163..bfbd2e6 100644
--- a/guest/pvmfw/src/fdt.rs
+++ b/guest/pvmfw/src/fdt.rs
@@ -16,7 +16,6 @@
use crate::bootargs::BootArgsIterator;
use crate::device_assignment::{self, DeviceAssignmentInfo, VmDtbo};
-use crate::helpers::GUEST_PAGE_SIZE;
use crate::Box;
use crate::RebootReason;
use alloc::collections::BTreeMap;
@@ -83,7 +82,7 @@
/// Extract from /config the address range containing the pre-loaded kernel. Absence of /config is
/// not an error.
-fn read_kernel_range_from(fdt: &Fdt) -> libfdt::Result<Option<Range<usize>>> {
+pub fn read_kernel_range_from(fdt: &Fdt) -> libfdt::Result<Option<Range<usize>>> {
let addr = cstr!("kernel-address");
let size = cstr!("kernel-size");
@@ -101,7 +100,7 @@
/// Extract from /chosen the address range containing the pre-loaded ramdisk. Absence is not an
/// error as there can be initrd-less VM.
-fn read_initrd_range_from(fdt: &Fdt) -> libfdt::Result<Option<Range<usize>>> {
+pub fn read_initrd_range_from(fdt: &Fdt) -> libfdt::Result<Option<Range<usize>>> {
let start = cstr!("linux,initrd-start");
let end = cstr!("linux,initrd-end");
@@ -147,7 +146,10 @@
/// Reads and validates the memory range in the DT.
///
/// Only one memory range is expected with the crosvm setup for now.
-fn read_and_validate_memory_range(fdt: &Fdt) -> Result<Range<usize>, RebootReason> {
+fn read_and_validate_memory_range(
+ fdt: &Fdt,
+ guest_page_size: usize,
+) -> Result<Range<usize>, RebootReason> {
let mut memory = fdt.memory().map_err(|e| {
error!("Failed to read memory range from DT: {e}");
RebootReason::InvalidFdt
@@ -169,8 +171,8 @@
}
let size = range.len();
- if size % GUEST_PAGE_SIZE != 0 {
- error!("Memory size {:#x} is not a multiple of page size {:#x}", size, GUEST_PAGE_SIZE);
+ if size % guest_page_size != 0 {
+ error!("Memory size {:#x} is not a multiple of page size {:#x}", size, guest_page_size);
return Err(RebootReason::InvalidFdt);
}
@@ -854,16 +856,17 @@
fn validate_swiotlb_info(
swiotlb_info: &SwiotlbInfo,
memory: &Range<usize>,
+ guest_page_size: usize,
) -> Result<(), RebootReason> {
let size = swiotlb_info.size;
let align = swiotlb_info.align;
- if size == 0 || (size % GUEST_PAGE_SIZE) != 0 {
+ if size == 0 || (size % guest_page_size) != 0 {
error!("Invalid swiotlb size {:#x}", size);
return Err(RebootReason::InvalidFdt);
}
- if let Some(align) = align.filter(|&a| a % GUEST_PAGE_SIZE != 0) {
+ if let Some(align) = align.filter(|&a| a % guest_page_size != 0) {
error!("Invalid swiotlb alignment {:#x}", align);
return Err(RebootReason::InvalidFdt);
}
@@ -989,7 +992,6 @@
#[derive(Debug)]
pub struct DeviceTreeInfo {
- pub kernel_range: Option<Range<usize>>,
pub initrd_range: Option<Range<usize>>,
pub memory_range: Range<usize>,
bootargs: Option<CString>,
@@ -1015,15 +1017,11 @@
}
pub fn sanitize_device_tree(
- fdt: &mut [u8],
+ fdt: &mut Fdt,
vm_dtbo: Option<&mut [u8]>,
vm_ref_dt: Option<&[u8]>,
+ guest_page_size: usize,
) -> Result<DeviceTreeInfo, RebootReason> {
- let fdt = Fdt::from_mut_slice(fdt).map_err(|e| {
- error!("Failed to load FDT: {e}");
- RebootReason::InvalidFdt
- })?;
-
let vm_dtbo = match vm_dtbo {
Some(vm_dtbo) => Some(VmDtbo::from_mut_slice(vm_dtbo).map_err(|e| {
error!("Failed to load VM DTBO: {e}");
@@ -1032,7 +1030,7 @@
None => None,
};
- let info = parse_device_tree(fdt, vm_dtbo.as_deref())?;
+ let info = parse_device_tree(fdt, vm_dtbo.as_deref(), guest_page_size)?;
fdt.clone_from(FDT_TEMPLATE).map_err(|e| {
error!("Failed to instantiate FDT from the template DT: {e}");
@@ -1085,18 +1083,17 @@
Ok(info)
}
-fn parse_device_tree(fdt: &Fdt, vm_dtbo: Option<&VmDtbo>) -> Result<DeviceTreeInfo, RebootReason> {
- let kernel_range = read_kernel_range_from(fdt).map_err(|e| {
- error!("Failed to read kernel range from DT: {e}");
- RebootReason::InvalidFdt
- })?;
-
+fn parse_device_tree(
+ fdt: &Fdt,
+ vm_dtbo: Option<&VmDtbo>,
+ guest_page_size: usize,
+) -> Result<DeviceTreeInfo, RebootReason> {
let initrd_range = read_initrd_range_from(fdt).map_err(|e| {
error!("Failed to read initrd range from DT: {e}");
RebootReason::InvalidFdt
})?;
- let memory_range = read_and_validate_memory_range(fdt)?;
+ let memory_range = read_and_validate_memory_range(fdt, guest_page_size)?;
let bootargs = read_bootargs_from(fdt).map_err(|e| {
error!("Failed to read bootargs from DT: {e}");
@@ -1149,7 +1146,7 @@
error!("Swiotlb info missing from DT");
RebootReason::InvalidFdt
})?;
- validate_swiotlb_info(&swiotlb_info, &memory_range)?;
+ validate_swiotlb_info(&swiotlb_info, &memory_range, guest_page_size)?;
let device_assignment = match vm_dtbo {
Some(vm_dtbo) => {
@@ -1194,7 +1191,6 @@
})?;
Ok(DeviceTreeInfo {
- kernel_range,
initrd_range,
memory_range,
bootargs,
diff --git a/guest/pvmfw/src/helpers.rs b/guest/pvmfw/src/helpers.rs
deleted file mode 100644
index 0552640..0000000
--- a/guest/pvmfw/src/helpers.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2022, The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//! Miscellaneous helper functions.
-
-use vmbase::memory::SIZE_4KB;
-
-pub const GUEST_PAGE_SIZE: usize = SIZE_4KB;
diff --git a/guest/pvmfw/src/main.rs b/guest/pvmfw/src/main.rs
index bde03ff..a28a039 100644
--- a/guest/pvmfw/src/main.rs
+++ b/guest/pvmfw/src/main.rs
@@ -28,47 +28,42 @@
mod exceptions;
mod fdt;
mod gpt;
-mod helpers;
mod instance;
mod memory;
+mod rollback;
use crate::bcc::Bcc;
use crate::dice::PartialInputs;
use crate::entry::RebootReason;
-use crate::fdt::modify_for_next_stage;
-use crate::helpers::GUEST_PAGE_SIZE;
-use crate::instance::EntryBody;
-use crate::instance::Error as InstanceError;
-use crate::instance::{get_recorded_entry, record_instance_entry};
+use crate::fdt::{modify_for_next_stage, sanitize_device_tree};
+use crate::rollback::perform_rollback_protection;
use alloc::borrow::Cow;
use alloc::boxed::Box;
use bssl_avf::Digester;
-use core::ops::Range;
use cstr::cstr;
use diced_open_dice::{bcc_handover_parse, DiceArtifacts, DiceContext, Hidden, VM_KEY_ALGORITHM};
use libfdt::{Fdt, FdtNode};
use log::{debug, error, info, trace, warn};
use pvmfw_avb::verify_payload;
-use pvmfw_avb::Capability;
use pvmfw_avb::DebugLevel;
use pvmfw_embedded_key::PUBLIC_KEY;
use vmbase::fdt::pci::{PciError, PciInfo};
use vmbase::heap;
-use vmbase::memory::flush;
+use vmbase::memory::{flush, init_shared_pool, SIZE_4KB};
use vmbase::rand;
use vmbase::virtio::pci;
-const NEXT_BCC_SIZE: usize = GUEST_PAGE_SIZE;
-
-fn main(
- fdt: &mut Fdt,
+fn main<'a>(
+ untrusted_fdt: &mut Fdt,
signed_kernel: &[u8],
ramdisk: Option<&[u8]>,
current_bcc_handover: &[u8],
mut debug_policy: Option<&[u8]>,
-) -> Result<(Range<usize>, bool), RebootReason> {
+ vm_dtbo: Option<&mut [u8]>,
+ vm_ref_dt: Option<&[u8]>,
+) -> Result<(&'a [u8], bool), RebootReason> {
info!("pVM firmware");
- debug!("FDT: {:?}", fdt.as_ptr());
+ debug!("FDT: {:?}", untrusted_fdt.as_ptr());
debug!("Signed kernel: {:?} ({:#x} bytes)", signed_kernel.as_ptr(), signed_kernel.len());
debug!("AVB public key: addr={:?}, size={:#x} ({1})", PUBLIC_KEY.as_ptr(), PUBLIC_KEY.len());
if let Some(rd) = ramdisk {
@@ -97,14 +92,6 @@
debug_policy = None;
}
- // Set up PCI bus for VirtIO devices.
- let pci_info = PciInfo::from_fdt(fdt).map_err(handle_pci_error)?;
- debug!("PCI: {:#x?}", pci_info);
- let mut pci_root = pci::initialize(pci_info).map_err(|e| {
- error!("Failed to initialize PCI: {e}");
- RebootReason::InternalError
- })?;
-
let verified_boot_data = verify_payload(signed_kernel, ramdisk, PUBLIC_KEY).map_err(|e| {
error!("Failed to verify the payload: {e}");
RebootReason::PayloadVerificationError
@@ -115,7 +102,23 @@
info!("Please disregard any previous libavb ERROR about initrd_normal.");
}
- let next_bcc = heap::aligned_boxed_slice(NEXT_BCC_SIZE, GUEST_PAGE_SIZE).ok_or_else(|| {
+ let guest_page_size = verified_boot_data.page_size.unwrap_or(SIZE_4KB);
+ let fdt_info = sanitize_device_tree(untrusted_fdt, vm_dtbo, vm_ref_dt, guest_page_size)?;
+ let fdt = untrusted_fdt; // DT has now been sanitized.
+ let pci_info = PciInfo::from_fdt(fdt).map_err(handle_pci_error)?;
+ debug!("PCI: {:#x?}", pci_info);
+ // Set up PCI bus for VirtIO devices.
+ let mut pci_root = pci::initialize(pci_info).map_err(|e| {
+ error!("Failed to initialize PCI: {e}");
+ RebootReason::InternalError
+ })?;
+ init_shared_pool(fdt_info.swiotlb_info.fixed_range()).map_err(|e| {
+ error!("Failed to initialize shared pool: {e}");
+ RebootReason::InternalError
+ })?;
+
+ let next_bcc_size = guest_page_size;
+ let next_bcc = heap::aligned_boxed_slice(next_bcc_size, guest_page_size).ok_or_else(|| {
error!("Failed to allocate the next-stage BCC");
RebootReason::InternalError
})?;
@@ -128,65 +131,14 @@
})?;
let instance_hash = if cfg!(llpvm_changes) { Some(salt_from_instance_id(fdt)?) } else { None };
- let defer_rollback_protection = should_defer_rollback_protection(fdt)?
- && verified_boot_data.has_capability(Capability::SecretkeeperProtection);
- let (new_instance, salt) = if defer_rollback_protection {
- info!("Guest OS is capable of Secretkeeper protection, deferring rollback protection");
- // rollback_index of the image is used as security_version and is expected to be > 0 to
- // discourage implicit allocation.
- if verified_boot_data.rollback_index == 0 {
- error!("Expected positive rollback_index, found 0");
- return Err(RebootReason::InvalidPayload);
- };
- (false, instance_hash.unwrap())
- } else if verified_boot_data.has_capability(Capability::RemoteAttest) {
- info!("Service VM capable of remote attestation detected, performing version checks");
- if service_vm_version::VERSION != verified_boot_data.rollback_index {
- // For RKP VM, we only boot if the version in the AVB footer of its kernel matches
- // the one embedded in pvmfw at build time.
- // This prevents the pvmfw from booting a roll backed RKP VM.
- error!(
- "Service VM version mismatch: expected {}, found {}",
- service_vm_version::VERSION,
- verified_boot_data.rollback_index
- );
- return Err(RebootReason::InvalidPayload);
- }
- (false, instance_hash.unwrap())
- } else if verified_boot_data.has_capability(Capability::TrustySecurityVm) {
- // The rollback protection of Trusty VMs are handled by AuthMgr, so we don't need to
- // handle it here.
- info!("Trusty Security VM detected");
- (false, instance_hash.unwrap())
- } else {
- info!("Fallback to instance.img based rollback checks");
- let (recorded_entry, mut instance_img, header_index) =
- get_recorded_entry(&mut pci_root, cdi_seal).map_err(|e| {
- error!("Failed to get entry from instance.img: {e}");
- RebootReason::InternalError
- })?;
- let (new_instance, salt) = if let Some(entry) = recorded_entry {
- check_dice_measurements_match_entry(&dice_inputs, &entry)?;
- let salt = instance_hash.unwrap_or(entry.salt);
- (false, salt)
- } else {
- // New instance!
- let salt = instance_hash.map_or_else(rand::random_array, Ok).map_err(|e| {
- error!("Failed to generated instance.img salt: {e}");
- RebootReason::InternalError
- })?;
-
- let entry = EntryBody::new(&dice_inputs, &salt);
- record_instance_entry(&entry, cdi_seal, &mut instance_img, header_index).map_err(
- |e| {
- error!("Failed to get recorded entry in instance.img: {e}");
- RebootReason::InternalError
- },
- )?;
- (true, salt)
- };
- (new_instance, salt)
- };
+ let (new_instance, salt, defer_rollback_protection) = perform_rollback_protection(
+ fdt,
+ &verified_boot_data,
+ &dice_inputs,
+ &mut pci_root,
+ cdi_seal,
+ instance_hash,
+ )?;
trace!("Got salt for instance: {salt:x?}");
let new_bcc_handover = if cfg!(dice_changes) {
@@ -248,43 +200,7 @@
})?;
info!("Starting payload...");
-
- let bcc_range = {
- let r = next_bcc.as_ptr_range();
- (r.start as usize)..(r.end as usize)
- };
-
- Ok((bcc_range, debuggable))
-}
-
-fn check_dice_measurements_match_entry(
- dice_inputs: &PartialInputs,
- entry: &EntryBody,
-) -> Result<(), RebootReason> {
- ensure_dice_measurements_match_entry(dice_inputs, entry).map_err(|e| {
- error!(
- "Dice measurements do not match recorded entry. \
- This may be because of update: {e}"
- );
- RebootReason::InternalError
- })?;
-
- Ok(())
-}
-
-fn ensure_dice_measurements_match_entry(
- dice_inputs: &PartialInputs,
- entry: &EntryBody,
-) -> Result<(), InstanceError> {
- if entry.code_hash != dice_inputs.code_hash {
- Err(InstanceError::RecordedCodeHashMismatch)
- } else if entry.auth_hash != dice_inputs.auth_hash {
- Err(InstanceError::RecordedAuthHashMismatch)
- } else if entry.mode() != dice_inputs.mode {
- Err(InstanceError::RecordedDiceModeMismatch)
- } else {
- Ok(())
- }
+ Ok((next_bcc, debuggable))
}
// Get the "salt" which is one of the input for DICE derivation.
@@ -314,18 +230,6 @@
})
}
-fn should_defer_rollback_protection(fdt: &Fdt) -> Result<bool, RebootReason> {
- let node = avf_untrusted_node(fdt)?;
- let defer_rbp = node
- .getprop(cstr!("defer-rollback-protection"))
- .map_err(|e| {
- error!("Failed to get defer-rollback-protection property in DT: {e}");
- RebootReason::InvalidFdt
- })?
- .is_some();
- Ok(defer_rbp)
-}
-
fn avf_untrusted_node(fdt: &Fdt) -> Result<FdtNode, RebootReason> {
let node = fdt.node(cstr!("/avf/untrusted")).map_err(|e| {
error!("Failed to get /avf/untrusted node: {e}");
diff --git a/guest/pvmfw/src/memory.rs b/guest/pvmfw/src/memory.rs
index 35bfd3a..a663008 100644
--- a/guest/pvmfw/src/memory.rs
+++ b/guest/pvmfw/src/memory.rs
@@ -15,7 +15,7 @@
//! Low-level allocation and tracking of main memory.
use crate::entry::RebootReason;
-use crate::fdt;
+use crate::fdt::{read_initrd_range_from, read_kernel_range_from};
use core::num::NonZeroUsize;
use core::slice;
use log::debug;
@@ -24,23 +24,18 @@
use log::warn;
use vmbase::{
layout::crosvm,
- memory::{init_shared_pool, map_data, map_rodata, resize_available_memory},
+ memory::{map_data, map_rodata, resize_available_memory},
};
pub(crate) struct MemorySlices<'a> {
pub fdt: &'a mut libfdt::Fdt,
pub kernel: &'a [u8],
pub ramdisk: Option<&'a [u8]>,
+ pub dice_chain: Option<&'a [u8]>,
}
impl<'a> MemorySlices<'a> {
- pub fn new(
- fdt: usize,
- kernel: usize,
- kernel_size: usize,
- vm_dtbo: Option<&mut [u8]>,
- vm_ref_dt: Option<&[u8]>,
- ) -> Result<Self, RebootReason> {
+ pub fn new(fdt: usize, kernel: usize, kernel_size: usize) -> Result<Self, RebootReason> {
let fdt_size = NonZeroUsize::new(crosvm::FDT_MAX_SIZE).unwrap();
// TODO - Only map the FDT as read-only, until we modify it right before jump_to_payload()
// e.g. by generating a DTBO for a template DT in main() and, on return, re-map DT as RW,
@@ -51,44 +46,39 @@
})?;
// SAFETY: map_data validated the range to be in main memory, mapped, and not overlap.
- let fdt = unsafe { slice::from_raw_parts_mut(fdt as *mut u8, fdt_size.into()) };
-
- let info = fdt::sanitize_device_tree(fdt, vm_dtbo, vm_ref_dt)?;
- let fdt = libfdt::Fdt::from_mut_slice(fdt).map_err(|e| {
- error!("Failed to load sanitized FDT: {e}");
+ let untrusted_fdt = unsafe { slice::from_raw_parts_mut(fdt as *mut u8, fdt_size.into()) };
+ let untrusted_fdt = libfdt::Fdt::from_mut_slice(untrusted_fdt).map_err(|e| {
+ error!("Failed to load input FDT: {e}");
RebootReason::InvalidFdt
})?;
- debug!("Fdt passed validation!");
- let memory_range = info.memory_range;
+ let memory_range = untrusted_fdt.first_memory_range().map_err(|e| {
+ error!("Failed to read memory range from DT: {e}");
+ RebootReason::InvalidFdt
+ })?;
debug!("Resizing MemoryTracker to range {memory_range:#x?}");
resize_available_memory(&memory_range).map_err(|e| {
error!("Failed to use memory range value from DT: {memory_range:#x?}: {e}");
RebootReason::InvalidFdt
})?;
- init_shared_pool(info.swiotlb_info.fixed_range()).map_err(|e| {
- error!("Failed to initialize shared pool: {e}");
- RebootReason::InternalError
+ let kernel_range = read_kernel_range_from(untrusted_fdt).map_err(|e| {
+ error!("Failed to read kernel range: {e}");
+ RebootReason::InvalidFdt
})?;
-
- let (kernel_start, kernel_size) = if let Some(r) = info.kernel_range {
- let size = r.len().try_into().map_err(|_| {
- error!("Invalid kernel size: {:#x}", r.len());
- RebootReason::InternalError
- })?;
- (r.start, size)
+ let (kernel_start, kernel_size) = if let Some(r) = kernel_range {
+ (r.start, r.len())
} else if cfg!(feature = "legacy") {
warn!("Failed to find the kernel range in the DT; falling back to legacy ABI");
- let size = NonZeroUsize::new(kernel_size).ok_or_else(|| {
- error!("Invalid kernel size: {kernel_size:#x}");
- RebootReason::InvalidPayload
- })?;
- (kernel, size)
+ (kernel, kernel_size)
} else {
error!("Failed to locate the kernel from the DT");
return Err(RebootReason::InvalidPayload);
};
+ let kernel_size = kernel_size.try_into().map_err(|_| {
+ error!("Invalid kernel size: {kernel_size:#x}");
+ RebootReason::InvalidPayload
+ })?;
map_rodata(kernel_start, kernel_size).map_err(|e| {
error!("Failed to map kernel range: {e}");
@@ -99,7 +89,11 @@
// SAFETY: map_rodata validated the range to be in main memory, mapped, and not overlap.
let kernel = unsafe { slice::from_raw_parts(kernel, kernel_size.into()) };
- let ramdisk = if let Some(r) = info.initrd_range {
+ let initrd_range = read_initrd_range_from(untrusted_fdt).map_err(|e| {
+ error!("Failed to read initrd range: {e}");
+ RebootReason::InvalidFdt
+ })?;
+ let ramdisk = if let Some(r) = initrd_range {
debug!("Located ramdisk at {r:?}");
let ramdisk_size = r.len().try_into().map_err(|_| {
error!("Invalid ramdisk size: {:#x}", r.len());
@@ -118,6 +112,12 @@
None
};
- Ok(Self { fdt, kernel, ramdisk })
+ let dice_chain = None;
+
+ Ok(Self { fdt: untrusted_fdt, kernel, ramdisk, dice_chain })
+ }
+
+ pub fn add_dice_chain(&mut self, dice_chain: &'a [u8]) {
+ self.dice_chain = Some(dice_chain)
}
}
diff --git a/guest/pvmfw/src/rollback.rs b/guest/pvmfw/src/rollback.rs
new file mode 100644
index 0000000..bc16332
--- /dev/null
+++ b/guest/pvmfw/src/rollback.rs
@@ -0,0 +1,159 @@
+// Copyright 2024, The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Support for guest-specific rollback protection (RBP).
+
+use crate::dice::PartialInputs;
+use crate::entry::RebootReason;
+use crate::instance::EntryBody;
+use crate::instance::Error as InstanceError;
+use crate::instance::{get_recorded_entry, record_instance_entry};
+use cstr::cstr;
+use diced_open_dice::Hidden;
+use libfdt::{Fdt, FdtNode};
+use log::{error, info};
+use pvmfw_avb::Capability;
+use pvmfw_avb::VerifiedBootData;
+use virtio_drivers::transport::pci::bus::PciRoot;
+use vmbase::rand;
+
+/// Performs RBP based on the input payload, current DICE chain, and host-controlled platform.
+///
+/// On success, returns a tuple containing:
+/// - `new_instance`: true if a new entry was created using the legacy instance.img solution;
+/// - `salt`: the salt representing the instance, to be used during DICE derivation;
+/// - `defer_rollback_protection`: if RBP is being deferred.
+pub fn perform_rollback_protection(
+ fdt: &Fdt,
+ verified_boot_data: &VerifiedBootData,
+ dice_inputs: &PartialInputs,
+ pci_root: &mut PciRoot,
+ cdi_seal: &[u8],
+ instance_hash: Option<Hidden>,
+) -> Result<(bool, Hidden, bool), RebootReason> {
+ let defer_rollback_protection = should_defer_rollback_protection(fdt)?
+ && verified_boot_data.has_capability(Capability::SecretkeeperProtection);
+ let (new_instance, salt) = if defer_rollback_protection {
+ info!("Guest OS is capable of Secretkeeper protection, deferring rollback protection");
+ // rollback_index of the image is used as security_version and is expected to be > 0 to
+ // discourage implicit allocation.
+ if verified_boot_data.rollback_index == 0 {
+ error!("Expected positive rollback_index, found 0");
+ return Err(RebootReason::InvalidPayload);
+ };
+ (false, instance_hash.unwrap())
+ } else if verified_boot_data.has_capability(Capability::RemoteAttest) {
+ info!("Service VM capable of remote attestation detected, performing version checks");
+ if service_vm_version::VERSION != verified_boot_data.rollback_index {
+ // For RKP VM, we only boot if the version in the AVB footer of its kernel matches
+ // the one embedded in pvmfw at build time.
+ // This prevents the pvmfw from booting a roll backed RKP VM.
+ error!(
+ "Service VM version mismatch: expected {}, found {}",
+ service_vm_version::VERSION,
+ verified_boot_data.rollback_index
+ );
+ return Err(RebootReason::InvalidPayload);
+ }
+ (false, instance_hash.unwrap())
+ } else if verified_boot_data.has_capability(Capability::TrustySecurityVm) {
+ // The rollback protection of Trusty VMs are handled by AuthMgr, so we don't need to
+ // handle it here.
+ info!("Trusty Security VM detected");
+ (false, instance_hash.unwrap())
+ } else {
+ info!("Fallback to instance.img based rollback checks");
+ let (recorded_entry, mut instance_img, header_index) =
+ get_recorded_entry(pci_root, cdi_seal).map_err(|e| {
+ error!("Failed to get entry from instance.img: {e}");
+ RebootReason::InternalError
+ })?;
+ let (new_instance, salt) = if let Some(entry) = recorded_entry {
+ check_dice_measurements_match_entry(dice_inputs, &entry)?;
+ let salt = instance_hash.unwrap_or(entry.salt);
+ (false, salt)
+ } else {
+ // New instance!
+ let salt = instance_hash.map_or_else(rand::random_array, Ok).map_err(|e| {
+ error!("Failed to generated instance.img salt: {e}");
+ RebootReason::InternalError
+ })?;
+
+ let entry = EntryBody::new(dice_inputs, &salt);
+ record_instance_entry(&entry, cdi_seal, &mut instance_img, header_index).map_err(
+ |e| {
+ error!("Failed to get recorded entry in instance.img: {e}");
+ RebootReason::InternalError
+ },
+ )?;
+ (true, salt)
+ };
+ (new_instance, salt)
+ };
+
+ Ok((new_instance, salt, defer_rollback_protection))
+}
+
+fn check_dice_measurements_match_entry(
+ dice_inputs: &PartialInputs,
+ entry: &EntryBody,
+) -> Result<(), RebootReason> {
+ ensure_dice_measurements_match_entry(dice_inputs, entry).map_err(|e| {
+ error!(
+ "Dice measurements do not match recorded entry. \
+ This may be because of update: {e}"
+ );
+ RebootReason::InternalError
+ })?;
+
+ Ok(())
+}
+
+fn ensure_dice_measurements_match_entry(
+ dice_inputs: &PartialInputs,
+ entry: &EntryBody,
+) -> Result<(), InstanceError> {
+ if entry.code_hash != dice_inputs.code_hash {
+ Err(InstanceError::RecordedCodeHashMismatch)
+ } else if entry.auth_hash != dice_inputs.auth_hash {
+ Err(InstanceError::RecordedAuthHashMismatch)
+ } else if entry.mode() != dice_inputs.mode {
+ Err(InstanceError::RecordedDiceModeMismatch)
+ } else {
+ Ok(())
+ }
+}
+
+fn should_defer_rollback_protection(fdt: &Fdt) -> Result<bool, RebootReason> {
+ let node = avf_untrusted_node(fdt)?;
+ let defer_rbp = node
+ .getprop(cstr!("defer-rollback-protection"))
+ .map_err(|e| {
+ error!("Failed to get defer-rollback-protection property in DT: {e}");
+ RebootReason::InvalidFdt
+ })?
+ .is_some();
+ Ok(defer_rbp)
+}
+
+fn avf_untrusted_node(fdt: &Fdt) -> Result<FdtNode, RebootReason> {
+ let node = fdt.node(cstr!("/avf/untrusted")).map_err(|e| {
+ error!("Failed to get /avf/untrusted node: {e}");
+ RebootReason::InvalidFdt
+ })?;
+ node.ok_or_else(|| {
+ error!("/avf/untrusted node is missing in DT");
+ RebootReason::InvalidFdt
+ })
+}
diff --git a/guest/trusty/security_vm/launcher/src/main.rs b/guest/trusty/security_vm/launcher/src/main.rs
index 9611f26..f0af9b6 100644
--- a/guest/trusty/security_vm/launcher/src/main.rs
+++ b/guest/trusty/security_vm/launcher/src/main.rs
@@ -78,6 +78,7 @@
memoryMib: args.memory_size_mib,
cpuTopology: args.cpu_topology,
platformVersion: "~1.0".to_owned(),
+ balloon: true, // TODO: probably don't want ballooning.
// TODO: add instanceId
..Default::default()
});
diff --git a/libs/devicemapper/Android.bp b/libs/devicemapper/Android.bp
index 5332469..17727f1 100644
--- a/libs/devicemapper/Android.bp
+++ b/libs/devicemapper/Android.bp
@@ -16,7 +16,7 @@
"libhex",
"libnix",
"libuuid",
- "libzerocopy",
+ "libzerocopy-0.7.35",
],
multilib: {
lib32: {
diff --git a/libs/framework-virtualization/Android.bp b/libs/framework-virtualization/Android.bp
index d5ac878..98fa53d 100644
--- a/libs/framework-virtualization/Android.bp
+++ b/libs/framework-virtualization/Android.bp
@@ -15,6 +15,7 @@
],
static_libs: [
"android.system.virtualizationservice-java",
+ "avf_aconfig_flags_java",
// For android.sysprop.HypervisorProperties
"PlatformProperties",
],
@@ -51,6 +52,9 @@
"FlaggedApi",
],
},
+ aconfig_declarations: [
+ "avf_aconfig_flags",
+ ],
}
gensrcs {
diff --git a/libs/framework-virtualization/api/system-current.txt b/libs/framework-virtualization/api/system-current.txt
index d9bafa1..233491f 100644
--- a/libs/framework-virtualization/api/system-current.txt
+++ b/libs/framework-virtualization/api/system-current.txt
@@ -66,6 +66,7 @@
method public boolean isEncryptedStorageEnabled();
method public boolean isProtectedVm();
method public boolean isVmOutputCaptured();
+ method @FlaggedApi("com.android.system.virtualmachine.flags.promote_set_should_use_hugepages_to_system_api") public boolean shouldUseHugepages();
field public static final int CPU_TOPOLOGY_MATCH_HOST = 1; // 0x1
field public static final int CPU_TOPOLOGY_ONE_CPU = 0; // 0x0
field public static final int DEBUG_LEVEL_FULL = 1; // 0x1
@@ -82,6 +83,7 @@
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setMemoryBytes(@IntRange(from=1) long);
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setPayloadBinaryName(@NonNull String);
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setProtectedVm(boolean);
+ method @FlaggedApi("com.android.system.virtualmachine.flags.promote_set_should_use_hugepages_to_system_api") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setShouldUseHugepages(boolean);
method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setVmOutputCaptured(boolean);
}
diff --git a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
index 3829f9f..d6b38ea 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
@@ -22,6 +22,7 @@
import static java.util.Objects.requireNonNull;
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
@@ -49,6 +50,8 @@
import android.text.TextUtils;
import android.util.Log;
+import com.android.system.virtualmachine.flags.Flags;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -601,6 +604,18 @@
}
/**
+ * Returns whether this VM enabled the hint to use transparent huge pages.
+ *
+ * @see Builder#setShouldUseHugepages
+ * @hide
+ */
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_PROMOTE_SET_SHOULD_USE_HUGEPAGES_TO_SYSTEM_API)
+ public boolean shouldUseHugepages() {
+ return mShouldUseHugepages;
+ }
+
+ /**
* Tests if this config is compatible with other config. Being compatible means that the configs
* can be interchangeably used for the same virtual machine; they do not change the VM identity
* or secrets. Such changes include varying the number of CPUs or the size of the RAM. Changes
@@ -621,8 +636,8 @@
&& this.mVmOutputCaptured == other.mVmOutputCaptured
&& this.mVmConsoleInputSupported == other.mVmConsoleInputSupported
&& this.mConnectVmConsole == other.mConnectVmConsole
- && this.mConsoleInputDevice == other.mConsoleInputDevice
&& (this.mVendorDiskImage == null) == (other.mVendorDiskImage == null)
+ && Objects.equals(this.mConsoleInputDevice, other.mConsoleInputDevice)
&& Objects.equals(this.mPayloadConfigPath, other.mPayloadConfigPath)
&& Objects.equals(this.mPayloadBinaryName, other.mPayloadBinaryName)
&& Objects.equals(this.mPackageName, other.mPackageName)
@@ -798,7 +813,7 @@
Optional.ofNullable(customImageConfig.getAudioConfig())
.map(ac -> ac.toParcelable())
.orElse(null);
- config.noBalloon = !customImageConfig.useAutoMemoryBalloon();
+ config.balloon = customImageConfig.useAutoMemoryBalloon();
config.usbConfig =
Optional.ofNullable(customImageConfig.getUsbConfig())
.map(
@@ -1364,7 +1379,26 @@
return this;
}
- /** @hide */
+ /**
+ * Hints whether the VM should make use of the transparent huge pages feature.
+ *
+ * <p>Note: this API just provides a hint, whether the VM will actually use transparent huge
+ * pages additionally depends on the following:
+ *
+ * <ul>
+ * <li>{@code /sys/kernel/mm/transparent_hugepages/shmem_enabled} should be configured
+ * with the value {@code 'advise'}.
+ * <li>Android host kernel version should be at least {@code android15-5.15}
+ * </ul>
+ *
+ * @see https://docs.kernel.org/admin-guide/mm/transhuge.html
+ * @see
+ * https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Virtualization/docs/hugepages.md
+ * @hide
+ */
+ @SystemApi
+ @FlaggedApi(Flags.FLAG_PROMOTE_SET_SHOULD_USE_HUGEPAGES_TO_SYSTEM_API)
+ @NonNull
public Builder setShouldUseHugepages(boolean shouldUseHugepages) {
mShouldUseHugepages = shouldUseHugepages;
return this;
diff --git a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java
index 93f29a9..1708caa 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java
@@ -486,7 +486,6 @@
private boolean network;
private GpuConfig gpuConfig;
private boolean trackpad;
- // TODO(b/363985291): balloon breaks Linux VM behavior
private boolean autoMemoryBalloon = false;
private UsbConfig usbConfig;
diff --git a/libs/libavf/include/android/virtualization.h b/libs/libavf/include/android/virtualization.h
index 92528d3..7ab7431 100644
--- a/libs/libavf/include/android/virtualization.h
+++ b/libs/libavf/include/android/virtualization.h
@@ -139,15 +139,6 @@
bool protectedVm) __INTRODUCED_IN(36);
/**
- * Set whether a virtual machine uses memory ballooning.
- *
- * \param config a virtual machine config object.
- * \param balloon whether the virtual machine should use memory ballooning.
- */
-void AVirtualMachineRawConfig_setBalloon(AVirtualMachineRawConfig* _Nonnull config, bool balloon)
- __INTRODUCED_IN(36);
-
-/**
* Set whether to use an alternate, hypervisor-specific authentication method
* for protected VMs.
*
diff --git a/libs/libavf/libavf.map.txt b/libs/libavf/libavf.map.txt
index 34ab0e5..efc368a 100644
--- a/libs/libavf/libavf.map.txt
+++ b/libs/libavf/libavf.map.txt
@@ -1,4 +1,4 @@
-LIBAVF { # introduced=36
+LIBAVF {
global:
AVirtualMachineRawConfig_create; # apex llndk
AVirtualMachineRawConfig_destroy; # apex llndk
@@ -9,7 +9,6 @@
AVirtualMachineRawConfig_addDisk; # apex llndk
AVirtualMachineRawConfig_setMemoryMib; # apex llndk
AVirtualMachineRawConfig_setProtectedVm; # apex llndk
- AVirtualMachineRawConfig_setBalloon; # apex llndk
AVirtualMachineRawConfig_setHypervisorSpecificAuthMethod; # apex llndk
AVirtualMachineRawConfig_addCustomMemoryBackingFile; # apex llndk
AVirtualizationService_create; # apex llndk
diff --git a/libs/libavf/src/lib.rs b/libs/libavf/src/lib.rs
index c392ab2..56cdfb7 100644
--- a/libs/libavf/src/lib.rs
+++ b/libs/libavf/src/lib.rs
@@ -205,21 +205,6 @@
config.protectedVm = protected_vm;
}
-/// Set whether a virtual machine uses memory ballooning or not.
-///
-/// # Safety
-/// `config` must be a pointer returned by `AVirtualMachineRawConfig_create`.
-#[no_mangle]
-pub unsafe extern "C" fn AVirtualMachineRawConfig_setBalloon(
- config: *mut VirtualMachineRawConfig,
- balloon: bool,
-) {
- // SAFETY: `config` is assumed to be a valid, non-null pointer returned by
- // AVirtualMachineRawConfig_create. It's the only reference to the object.
- let config = unsafe { &mut *config };
- config.noBalloon = !balloon;
-}
-
/// NOT IMPLEMENTED.
///
/// # Returns
diff --git a/libs/libfdt/Android.bp b/libs/libfdt/Android.bp
index 09f288d..1e24ff4 100644
--- a/libs/libfdt/Android.bp
+++ b/libs/libfdt/Android.bp
@@ -38,7 +38,7 @@
"libcstr",
"liblibfdt_bindgen",
"libstatic_assertions",
- "libzerocopy_nostd",
+ "libzerocopy-0.7.35_nostd",
],
}
diff --git a/libs/libservice_vm_manager/src/lib.rs b/libs/libservice_vm_manager/src/lib.rs
index 0f322bb..5bb97d7 100644
--- a/libs/libservice_vm_manager/src/lib.rs
+++ b/libs/libservice_vm_manager/src/lib.rs
@@ -238,7 +238,8 @@
memoryMib: VM_MEMORY_MB,
cpuTopology: CpuTopology::ONE_CPU,
platformVersion: "~1.0".to_string(),
- gdbPort: 0, // No gdb
+ gdbPort: 0, // No gdb
+ balloon: true, // TODO: probably don't want ballooning.
..Default::default()
});
let console_out = Some(android_log_fd()?);
diff --git a/libs/libvmbase/Android.bp b/libs/libvmbase/Android.bp
index 3088633..7bcdc1d 100644
--- a/libs/libvmbase/Android.bp
+++ b/libs/libvmbase/Android.bp
@@ -91,7 +91,7 @@
"libtinyvec_nostd",
"libuuid_nostd",
"libvirtio_drivers",
- "libzerocopy_nostd",
+ "libzerocopy-0.7.35_nostd",
"libzeroize_nostd",
],
whole_static_libs: [
diff --git a/libs/vmconfig/src/lib.rs b/libs/vmconfig/src/lib.rs
index ef932c2..e520f0e 100644
--- a/libs/vmconfig/src/lib.rs
+++ b/libs/vmconfig/src/lib.rs
@@ -133,6 +133,7 @@
.collect::<Result<_>>()?,
consoleInputDevice: self.console_input_device.clone(),
usbConfig: usb_config,
+ balloon: true,
..Default::default()
})
}
diff --git a/microfuchsia/microfuchsiad/src/instance_starter.rs b/microfuchsia/microfuchsiad/src/instance_starter.rs
index 8216039..e3c4e8d 100644
--- a/microfuchsia/microfuchsiad/src/instance_starter.rs
+++ b/microfuchsia/microfuchsiad/src/instance_starter.rs
@@ -86,6 +86,7 @@
platformVersion: "1.0.0".into(),
#[cfg(enable_console)]
consoleInputDevice: Some("ttyS0".into()),
+ balloon: true,
..Default::default()
});
let vm_instance = VmInstance::create(
diff --git a/tests/testapk/Android.bp b/tests/testapk/Android.bp
index 8314f43..01af51c 100644
--- a/tests/testapk/Android.bp
+++ b/tests/testapk/Android.bp
@@ -15,11 +15,6 @@
java_defaults {
name: "MicrodroidTestAppsDefaults",
- test_suites: [
- "cts",
- "vts",
- "general-tests",
- ],
static_libs: [
"com.android.microdroid.testservice-java",
"com.android.microdroid.test.vmshare_service-java",
@@ -64,17 +59,60 @@
min_sdk_version: "33",
}
+DATA = [
+ ":MicrodroidTestAppUpdated",
+ ":MicrodroidVmShareApp",
+ ":test_microdroid_vendor_image",
+ ":test_microdroid_vendor_image_unsigned",
+]
+
android_test {
name: "MicrodroidTestApp",
defaults: ["MicrodroidVersionsTestAppDefaults"],
manifest: "AndroidManifestV5.xml",
- // Defined in ../vmshareapp/Android.bp
- data: [
- ":MicrodroidTestAppUpdated",
- ":MicrodroidVmShareApp",
- ":test_microdroid_vendor_image",
- ":test_microdroid_vendor_image_unsigned",
- ],
+ test_suites: ["general-tests"],
+ test_config: "AndroidTest.xml",
+ data: DATA,
+}
+
+android_test {
+ name: "MicrodroidTestApp.CTS",
+ defaults: ["MicrodroidVersionsTestAppDefaults"],
+ manifest: "AndroidManifestV5.xml",
+ test_suites: ["cts"],
+ test_config: ":MicrodroidTestApp.CTS.config",
+ data: DATA,
+}
+
+android_test {
+ name: "MicrodroidTestApp.VTS",
+ defaults: ["MicrodroidVersionsTestAppDefaults"],
+ manifest: "AndroidManifestV5.xml",
+ test_suites: ["vts"],
+ test_config: ":MicrodroidTestApp.VTS.config",
+ data: DATA,
+}
+
+genrule {
+ name: "MicrodroidTestApp.CTS.config",
+ srcs: ["AndroidTest.xml"],
+ out: ["out.xml"],
+ cmd: "sed " +
+ "-e 's/<!-- PLACEHOLDER_FOR_ANNOTATION -->/" +
+ "<option name=\"include-annotation\" value=\"com.android.compatibility.common.util.CddTest\" \\/>/' " +
+ "-e 's/MicrodroidTestApp.apk/MicrodroidTestApp.CTS.apk/' " +
+ "$(in) > $(out)",
+}
+
+genrule {
+ name: "MicrodroidTestApp.VTS.config",
+ srcs: ["AndroidTest.xml"],
+ out: ["out.xml"],
+ cmd: "sed " +
+ "-e 's/<!-- PLACEHOLDER_FOR_ANNOTATION -->/" +
+ "<option name=\"include-annotation\" value=\"com.android.compatibility.common.util.VsrTest\" \\/>/' " +
+ "-e 's/MicrodroidTestApp.apk/MicrodroidTestApp.VTS.apk/' " +
+ "$(in) > $(out)",
}
android_test_helper_app {
diff --git a/tests/testapk/AndroidTest.xml b/tests/testapk/AndroidTest.xml
index e490da4..221c25c 100644
--- a/tests/testapk/AndroidTest.xml
+++ b/tests/testapk/AndroidTest.xml
@@ -43,4 +43,6 @@
<!-- Controller that will skip the module if a native bridge situation is detected -->
<!-- For example: module wants to run arm and device is x86 -->
<object type="module_controller" class="com.android.tradefed.testtype.suite.module.NativeBridgeModuleController" />
+
+ <!-- PLACEHOLDER_FOR_ANNOTATION -->
</configuration>
diff --git a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
index b1485e3..b2e65bc 100644
--- a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
+++ b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
@@ -83,7 +83,6 @@
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.function.ThrowingRunnable;
@@ -176,7 +175,8 @@
private static final String VM_SHARE_APP_PACKAGE_NAME = "com.android.microdroid.vmshare_app";
- private void createAndConnectToVmHelper(int cpuTopology) throws Exception {
+ private void createAndConnectToVmHelper(int cpuTopology, boolean shouldUseHugepages)
+ throws Exception {
assumeSupportedDevice();
VirtualMachineConfig config =
@@ -184,6 +184,7 @@
.setMemoryBytes(minMemoryRequired())
.setDebugLevel(DEBUG_LEVEL_FULL)
.setCpuTopology(cpuTopology)
+ .setShouldUseHugepages(shouldUseHugepages)
.build();
VirtualMachine vm = forceCreateNewVirtualMachine("test_vm", config);
@@ -211,13 +212,31 @@
@Test
@CddTest(requirements = {"9.17/C-1-1", "9.17/C-2-1"})
public void createAndConnectToVm() throws Exception {
- createAndConnectToVmHelper(CPU_TOPOLOGY_ONE_CPU);
+ createAndConnectToVmHelper(CPU_TOPOLOGY_ONE_CPU, /* shouldUseHugepages= */ false);
}
@Test
@CddTest(requirements = {"9.17/C-1-1", "9.17/C-2-1"})
public void createAndConnectToVm_HostCpuTopology() throws Exception {
- createAndConnectToVmHelper(CPU_TOPOLOGY_MATCH_HOST);
+ createAndConnectToVmHelper(CPU_TOPOLOGY_MATCH_HOST, /* shouldUseHugepages= */ false);
+ }
+
+ @Test
+ public void createAndConnectToVm_WithHugepages() throws Exception {
+ // Note: setting shouldUseHugepages to true only hints that VM wants to use transparent huge
+ // pages. Whether it will actually be used depends on the value in the
+ // /sys/kernel/mm/transparent_hugepages/shmem_enabled.
+ // See packages/modules/Virtualization/docs/hugepages.md
+ createAndConnectToVmHelper(CPU_TOPOLOGY_ONE_CPU, /* shouldUseHugepages= */ true);
+ }
+
+ @Test
+ public void createAndConnectToVm_HostCpuTopology_WithHugepages() throws Exception {
+ // Note: setting shouldUseHugepages to true only hints that VM wants to use transparent huge
+ // pages. Whether it will actually be used depends on the value in the
+ // /sys/kernel/mm/transparent_hugepages/shmem_enabled.
+ // See packages/modules/Virtualization/docs/hugepages.md
+ createAndConnectToVmHelper(CPU_TOPOLOGY_MATCH_HOST, /* shouldUseHugepages= */ true);
}
@Test
@@ -580,6 +599,7 @@
assertThat(minimal.getEncryptedStorageBytes()).isEqualTo(0);
assertThat(minimal.isVmOutputCaptured()).isFalse();
assertThat(minimal.getOs()).isEqualTo("microdroid");
+ assertThat(minimal.shouldUseHugepages()).isFalse();
// Maximal has everything that can be set to some non-default value. (And has different
// values than minimal for the required fields.)
@@ -595,7 +615,8 @@
.setCpuTopology(CPU_TOPOLOGY_MATCH_HOST)
.setEncryptedStorageBytes(1_000_000)
.setVmOutputCaptured(true)
- .setOs("microdroid_gki-android14-6.1");
+ .setOs("microdroid_gki-android14-6.1")
+ .setShouldUseHugepages(true);
VirtualMachineConfig maximal = maximalBuilder.build();
assertThat(maximal.getApkPath()).isEqualTo("/apk/path");
@@ -612,6 +633,7 @@
assertThat(maximal.getEncryptedStorageBytes()).isEqualTo(1_000_000);
assertThat(maximal.isVmOutputCaptured()).isTrue();
assertThat(maximal.getOs()).isEqualTo("microdroid_gki-android14-6.1");
+ assertThat(maximal.shouldUseHugepages()).isTrue();
assertThat(minimal.isCompatibleWith(maximal)).isFalse();
assertThat(minimal.isCompatibleWith(minimal)).isTrue();
@@ -681,6 +703,7 @@
assertConfigCompatible(
baseline, newBaselineBuilder().setCpuTopology(CPU_TOPOLOGY_MATCH_HOST))
.isTrue();
+ assertConfigCompatible(baseline, newBaselineBuilder().setShouldUseHugepages(true)).isTrue();
// Changes that must be incompatible, since they must change the VM identity.
assertConfigCompatible(baseline, newBaselineBuilder().addExtraApk("foo")).isFalse();
@@ -1931,30 +1954,27 @@
assertThat(checkVmOutputIsRedirectedToLogcat(true)).isTrue();
}
- private boolean setSystemProperties(String name, String value) {
+ private boolean isDebugPolicyEnabled(String entry) {
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
UiAutomation uiAutomation = instrumentation.getUiAutomation();
- String cmd = "setprop " + name + " " + (value.isEmpty() ? "\"\"" : value);
- return runInShellWithStderr(TAG, uiAutomation, cmd).trim().isEmpty();
+ String cmd = "/apex/com.android.virt/bin/vm info";
+ String output = runInShellWithStderr(TAG, uiAutomation, cmd).trim();
+ for (String line : output.split("\\v")) {
+ if (line.matches("^.*Debug policy.*" + entry + ": true.*$")) {
+ return true;
+ }
+ }
+ return false;
}
@Test
- @Ignore("b/372874464")
public void outputIsNotRedirectedToLogcatIfNotDebuggable() throws Exception {
assumeSupportedDevice();
- // Disable debug policy to ensure no log output.
- String sysprop = "hypervisor.virtualizationmanager.debug_policy.path";
- String old = SystemProperties.get(sysprop);
- assumeTrue(
- "Can't disable debug policy. Perhapse user build?",
- setSystemProperties(sysprop, ""));
+ // Debug policy shouldn't enable log
+ assumeFalse(isDebugPolicyEnabled("log"));
- try {
- assertThat(checkVmOutputIsRedirectedToLogcat(false)).isFalse();
- } finally {
- assertThat(setSystemProperties(sysprop, old)).isTrue();
- }
+ assertThat(checkVmOutputIsRedirectedToLogcat(false)).isFalse();
}
@Test