Compare commits

...
Author SHA1 Message Date
maxjivi05 fd69ed7c5f Ship the SteamVR driver and layer in the VR pack and let Setup uninstall it
The tracking pack becomes the vr pack: it now also carries the droiddeck-vr
driver and Vulkan layer, the Luma Ultra base calibration and the licenses of
everything inside it, so none of it ships in the APK. The guest copy is staged
from the pack before each session and removed when the pack is absent, which
also cleans up what older builds installed. Setup shows the VR module with
download and uninstall, the session drawer and Play SteamVR download it on
demand, and an older tracking or vr pack is replaced on upgrade.
2026-10-20 12:10:45 -04:00
72 changed files with 1169 additions and 181 deletions

No files matched your search

+1 -1
View File
@@ -61,7 +61,7 @@ jobs:
jq -r --arg n "$2" '.assets // [] | .[] | select(.name == $n) | .digest // empty'
}
commit=$(gh api "repos/$GITHUB_REPOSITORY/actions/runs/$BUILD_RUN" --jq .head_sha 2>/dev/null || echo "$GITHUB_SHA")
for name in proot directaudio tracking xbox comet; do
for name in proot directaudio vr xbox comet; do
file="packs/$name.tar.zst"
[ -f "$file" ] || { echo "::error::$name.tar.zst is missing from Build APK run $BUILD_RUN"; exit 1; }
sha=$(sha256sum "$file" | cut -d' ' -f1)
+1 -1
View File
@@ -15,7 +15,7 @@ DroidDeck brings the SteamOS experience to Android: Valve's Steam client in Big
## Requirements and install
Use Android 9 or newer on a supported Adreno device (730 or newer, or 8xx). Adreno 6xx is experimental: DirectX 11 uses DXVK 2 and may run, and DirectX 12 games can still crash. Mali, Xclipse, PowerVR, and Adreno 710 are unsupported. No root is required. Allow about 3 GB for the runtime and 1.1 GB more for the desktop and emulators. Install the APK from [Releases](https://github.com/Droid-Deck/DroidDeck/releases), install the Linux runtime, then press **Play** and sign in. Steam downloads on first launch. Install **Desktop & apps** to use the desktop and emulators. The **Store** installs Linux apps and games from Flathub (ARM64 builds) with Flatpak; with additional options to install Appimages and set up scripts. **Stores** (Setup › Stores › "Show Stores in the rail") signs in to GOG, Epic Games and Amazon Games and downloads games into the Games storage. Epic keeps its direct API install path. Opening Epic Stores prepares Epic’s official Linux launcher preview. When installed, Epic games launched from DroidDeck use that client, and games installed in the client are imported into DroidDeck’s library and shortcuts. The x86-64 client runs through FEX on ARM and DroidDeck retains its Proton hooks; this preview and ARM setup are outside Epic’s listed Linux support. The cog on a store’s chip row sets its opening tab and download speed tier.
Use Android 9 or newer on a supported Adreno device (730 or newer, or 8xx). Adreno 6xx is experimental: DirectX 11 uses DXVK 2 and may run, and DirectX 12 games can still crash. Mali, Xclipse, PowerVR, and Adreno 710 are unsupported. No root is required. Allow about 3 GB for the runtime and 1.1 GB more for the desktop and emulators. Install the APK from [Releases](https://github.com/Droid-Deck/DroidDeck/releases), install the Linux runtime, then press **Play** and sign in. Steam downloads on first launch. Install **Desktop & apps** to use the desktop and emulators. SteamVR on glasses, Quest and Cardboard and camera hand tracking use the **VR module**, a one-time download from Setup or the first **Play SteamVR** that Setup can uninstall again. The **Store** installs Linux apps and games from Flathub (ARM64 builds) with Flatpak; with additional options to install Appimages and set up scripts. **Stores** (Setup › Stores › "Show Stores in the rail") signs in to GOG, Epic Games and Amazon Games and downloads games into the Games storage. Epic keeps its direct API install path. Opening Epic Stores prepares Epic’s official Linux launcher preview. When installed, Epic games launched from DroidDeck use that client, and games installed in the client are imported into DroidDeck’s library and shortcuts. The x86-64 client runs through FEX on ARM and DroidDeck retains its Proton hooks; this preview and ARM setup are outside Epic’s listed Linux support. The cog on a store’s chip row sets its opening tab and download speed tier.
On Android 14 and newer, before Steam launches, you must turn on **Disable child process restrictions** in Developer options. If this option is not available in developer settings (Android 12 and 13 devices), first launch of Steam will present a "Fix it for me" button, which will help automate the setup process.
+6 -6
View File
@@ -84,10 +84,10 @@ def commitTime = (gitValue(['show', '-s', '--format=%ct', 'HEAD']) ?: '0').with
def desktopKde = rootProject.file('tools/desktop-kde/release.env').readLines()
.findAll { it.contains('=') && !it.startsWith('#') }
.collectEntries { def kv = it.split('=', 2); [(kv[0].trim()): kv[1].trim()] }
def trackingPack = rootProject.file('tools/packs/tracking/release.env').readLines()
def vrPack = rootProject.file('tools/packs/vr/release.env').readLines()
.findAll { it.contains('=') && !it.startsWith('#') }
.collectEntries { def kv = it.split('=', 2); [(kv[0].trim()): kv[1].trim()] }
def addonPacks = ['proot', 'directaudio', 'tracking', 'xbox', 'comet'].collectEntries { name ->
def addonPacks = ['proot', 'directaudio', 'vr', 'xbox', 'comet'].collectEntries { name ->
def pack = file("build/packs/${name}.tar.zst")
if (!pack.isFile()) {
if (ciBuild) throw new GradleException("Add-on pack ${pack} is missing: run tools/packs/build.sh app/build/packs")
@@ -195,7 +195,7 @@ android {
androidResources {
// aapt's default ignore list, plus the trees shipped as add-on packs (tools/packs).
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:<dir>droiddeck-xbox:<dir>droiddeck-comet:<dir>directaudio'
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:<dir>droiddeck-xbox:<dir>droiddeck-comet:<dir>droiddeck-vr:<dir>directaudio'
}
packagingOptions {
@@ -205,7 +205,7 @@ android {
jniLibs {
useLegacyPackaging = true
pickFirsts += ['**/libtermux.so']
// Shipped in the proot and tracking packs (tools/packs) and run or loaded from there.
// Shipped in the proot and VR packs (tools/packs) and run or loaded from there.
excludes += ['**/libproot.so', '**/libproot-loader.so', '**/libopencv_java4.so', '**/libmediapipe_tasks_jni.so']
}
}
@@ -313,7 +313,7 @@ if (!skipRust) android.sourceSets.main.jniLibs.srcDir(rustJniLibsDir)
tasks.named('preBuild').configure { dependsOn(buildRustStores) }
dependencies {
implementation "org.opencv:opencv:${trackingPack.OPENCV_VERSION}"
implementation "org.opencv:opencv:${vrPack.OPENCV_VERSION}"
implementation 'org.khronos.openxr:openxr_loader_for_android:1.1.49'
implementation 'com.github.luben:zstd-jni:1.5.7-4@aar'
implementation 'org.apache.commons:commons-compress:1.27.1'
@@ -333,7 +333,7 @@ dependencies {
implementation 'androidx.camera:camera-camera2:1.4.2'
implementation 'androidx.camera:camera-lifecycle:1.4.2'
implementation 'androidx.webkit:webkit:1.12.1'
implementation("com.google.mediapipe:tasks-vision:${trackingPack.MEDIAPIPE_VERSION}") {
implementation("com.google.mediapipe:tasks-vision:${vrPack.MEDIAPIPE_VERSION}") {
exclude group: 'com.google.auto.value', module: 'auto-value'
}
@@ -34,6 +34,7 @@ class App : Application() {
com.droiddeck.launcher.core.AddonPack.PROOT.ensure(this)
com.droiddeck.launcher.core.AddonPack.DIRECTAUDIO.ensure(this)
}
com.droiddeck.launcher.runtime.VrPack.init(this)
GpuClockPin.clearLeftover(this)
com.droiddeck.launcher.glasses.Glasses.init(this)
com.droiddeck.launcher.glasses.GlassesMenuMirror.initialize(this)
@@ -84,6 +84,8 @@ import com.droiddeck.launcher.input.TouchpadGestures
import com.droiddeck.launcher.input.TouchscreenGestures
import com.droiddeck.launcher.input.ScrollTouchGestures
import com.droiddeck.launcher.runtime.LinuxRuntime
import com.droiddeck.launcher.runtime.VrPack
import com.droiddeck.launcher.core.AddonPack
import com.droiddeck.launcher.session.LoadingState
import com.droiddeck.launcher.session.PerfHud
import com.droiddeck.launcher.session.PerfMode
@@ -429,6 +431,7 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
SessionState.steamVr = intent.getBooleanExtra(EXTRA_STEAMVR, false)
} else if (intent.getBooleanExtra(EXTRA_STEAMVR, false) && SessionState.mode == SessionService.MODE_STEAM) {
SessionState.steamVr = true
if (!VrPack.installed(this)) VrPack.ensure(this)
}
if (SessionState.steamVr) Glasses.prepareSteamVrStart()
if (intent.action == SessionService.ACTION_AGENT_START) {
@@ -535,7 +538,8 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
(repair || !com.droiddeck.launcher.runtime.DesktopCatalog.desktopInstalled(this))
val needProton = (intent.getStringExtra(SessionService.EXTRA_MODE) ?: SessionService.MODE_STEAM) == SessionService.MODE_STEAM &&
com.droiddeck.launcher.runtime.DesktopCatalog.protonSeedNeeded(this)
if (needRuntime || needResume || needDesktop || needProton) installThenStart(needRuntime, needDesktop, needProton, needResume)
val needVr = intent.getBooleanExtra(EXTRA_STEAMVR, false) && !VrPack.installed(this)
if (needRuntime || needResume || needDesktop || needProton || needVr) installThenStart(needRuntime, needDesktop, needProton, needResume, needVr)
}
hud = PerfHud(this)
hud.onPresentingWindowChanged = {
@@ -1381,17 +1385,17 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
@Volatile private var installingRuntime = false
private var repairOffered by mutableStateOf(false)
private fun installThenStart(runtime: Boolean, desktop: Boolean, proton: Boolean = false, resume: Boolean = false) {
private fun installThenStart(runtime: Boolean, desktop: Boolean, proton: Boolean = false, resume: Boolean = false, vr: Boolean = false) {
if (SessionState.stopRequested) return
installingRuntime = true
SessionState.installing = if (runtime) "runtime" else if (resume) "package" else if (desktop) "desktop" else "proton"
SessionState.installing = if (runtime) "runtime" else if (resume) "package" else if (desktop) "desktop" else if (proton) "proton" else "vr"
SessionEvents.transition(
SessionPhase.INSTALLING_RUNTIME,
"${SessionState.installing}.installing",
mapOf("component" to SessionState.installing),
)
val first = if (runtime || resume) RUNTIME_LINES else if (desktop) DESKTOP_LINES else PROTON_LINES
loading.say(getString(first.downloading), first.topic, readable = true)
val first = if (runtime || resume) RUNTIME_LINES else if (desktop) DESKTOP_LINES else if (proton) PROTON_LINES else null
loading.say(getString(first?.downloading ?: R.string.session_vr_downloading), first?.topic ?: LoadingState.Topic.RUNTIME, readable = true)
loading.percent = -1
Thread({
var failedComponent: String? = null
@@ -1420,6 +1424,12 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
if (protonProblem == null) SessionEvents.record("proton.ready")
else SessionEvents.record("proton.skipped", mapOf("reason" to protonProblem))
}
if (problem == null && vr && !SessionState.stopRequested) {
SessionState.installing = "vr"
SessionEvents.transition(SessionPhase.INSTALLING_RUNTIME, "vr.installing", mapOf("component" to "vr"))
problem = installVr()
if (problem == null) SessionEvents.record("vr.ready") else failedComponent = "vr"
}
uiHandler.post {
installingRuntime = false
SessionState.installing = null
@@ -1434,6 +1444,7 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
val code = when (failedComponent) {
"runtime" -> "RUNTIME_INSTALL_FAILED"
"package" -> "PACKAGE_RESUME_FAILED"
"vr" -> "VR_PACK_INSTALL_FAILED"
else -> "DESKTOP_INSTALL_FAILED"
}
SessionEvents.fail(code, problem)
@@ -1507,6 +1518,19 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
return problem?.let { getString(R.string.session_desktop_install_failed, it) }
}
private fun installVr(): String? {
val mb = VrPack.size / 1_000_000
uiHandler.post { loading.percent = -1; loading.say(getString(R.string.session_vr_downloading), LoadingState.Topic.RUNTIME, readable = true) }
val ok = VrPack.await(this, { !SessionState.stopRequested }) { state ->
if (state is AddonPack.State.Downloading) uiHandler.post {
val percent = (state.progress * 100).toInt()
loading.percent = percent
loading.say(getString(R.string.session_vr_downloading_mb, percent * mb / 100, mb), LoadingState.Topic.RUNTIME, readable = true)
}
}
return if (ok || SessionState.stopRequested) null else getString(R.string.session_vr_install_failed)
}
private fun installProton(): String? {
uiHandler.post { loading.percent = -1; loading.say(getString(PROTON_LINES.downloading), PROTON_LINES.topic, readable = true) }
val catalog = com.droiddeck.launcher.runtime.DesktopCatalog
@@ -2833,6 +2857,7 @@ class SessionActivity : ComponentActivity(), SurfaceHolder.Callback {
if (intent.getBooleanExtra(EXTRA_STEAMVR, false) && SessionState.mode == SessionService.MODE_STEAM) {
SessionState.steamVr = true
steamVrAutoTried = false
if (!VrPack.installed(this)) VrPack.ensure(this)
}
if (intent.action == SessionService.ACTION_HOME_GUIDE) {
handleHomeGuideIntent(intent)
@@ -45,6 +45,18 @@ internal class AddonPack(val name: String, private val sha256: String, val size:
fun installed(context: Context): Boolean = available && File(dir(context), COMPLETE).isFile
fun outdated(context: Context): Boolean = !installed(context) &&
root(context).listFiles().orEmpty().any { it.name != sha256 && File(it, COMPLETE).isFile }
fun remove(context: Context): Boolean {
synchronized(lock) {
if (mutableState.value is State.Downloading) return false
root(context).deleteRecursively()
mutableState.value = State.Missing
}
return !root(context).exists()
}
fun refresh(context: Context): State {
val now = mutableState.value
if (now is State.Downloading) return now
@@ -126,9 +138,11 @@ internal class AddonPack(val name: String, private val sha256: String, val size:
@JvmField
val DIRECTAUDIO = AddonPack("directaudio", BuildConfig.PACK_DIRECTAUDIO_SHA256, BuildConfig.PACK_DIRECTAUDIO_SIZE,
listOf("linux-wine11/version.txt", "linux-wine11-systhread/version.txt"))
val TRACKING = AddonPack("tracking", BuildConfig.PACK_TRACKING_SHA256, BuildConfig.PACK_TRACKING_SIZE, listOf(
val VR = AddonPack("vr", BuildConfig.PACK_VR_SHA256, BuildConfig.PACK_VR_SIZE, listOf(
"hand_landmarker.task", "hand_landmarker_lite.task", "pose_landmarker_lite.task",
"libopencv_java4.so", "libmediapipe_tasks_jni.so"))
"libopencv_java4.so", "libmediapipe_tasks_jni.so", "luma-ultra-640x480.json",
"droiddeck/bin/linuxarm64/driver_droiddeck.so", "layer/libVkLayer_droiddeck_vr.so",
"layer/VK_LAYER_DROIDDECK_vr_implicit.json"))
val XBOX = AddonPack("xbox", BuildConfig.PACK_XBOX_SHA256, BuildConfig.PACK_XBOX_SIZE,
listOf("version", "xodus-cli", "xodus-service"))
val COMET = AddonPack("comet", BuildConfig.PACK_COMET_SHA256, BuildConfig.PACK_COMET_SIZE,
@@ -1,10 +1,10 @@
package com.droiddeck.launcher.glasses
import com.droiddeck.launcher.handtracking.TrackingPack
import com.droiddeck.launcher.runtime.VrPack
internal enum class HandModel(val file: String, val sha256: String) {
FULL(TrackingPack.HAND, "fbc2a30080c3c557093b5ddfc334698132eb341044ccee322ccf8bcf3607cde1"),
LITE(TrackingPack.HAND_LITE, "173c0f47ecee7e935bd4a1e93aa580756b4180c1307c07d709313e82c28672c8");
FULL(VrPack.HAND, "fbc2a30080c3c557093b5ddfc334698132eb341044ccee322ccf8bcf3607cde1"),
LITE(VrPack.HAND_LITE, "173c0f47ecee7e935bd4a1e93aa580756b4180c1307c07d709313e82c28672c8");
companion object {
val DEFAULT = FULL
@@ -10,7 +10,6 @@ internal data class StereoCalibrationProfile(
val verified: Boolean, val bundledBase: Boolean = false,
) {
companion object {
const val BASE_ASSET = "calibration/luma-ultra-640x480.json"
const val BASE_IDENTITY = "luma-ultra-base-v1"
fun select(saved: String?, base: () -> String?, identity: String?, width: Int, height: Int): StereoCalibrationProfile? {
@@ -3,7 +3,7 @@ package com.droiddeck.launcher.glasses
import com.droiddeck.launcher.core.AddonPack
import android.content.Context
import com.droiddeck.launcher.R
import com.droiddeck.launcher.handtracking.TrackingPack
import com.droiddeck.launcher.runtime.VrPack
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
@@ -171,7 +171,7 @@ internal class StereoHandEngine(private val context: Context, private val token:
} finally { calibrationProgress = calibrationProgress.copy(solving = false) }
} }
private fun detector(selected: HandModel=model, useGpu: Boolean=gpu, maxHands: Int=2): HandLandmarker {
val bytes=TrackingPack.file(context,selected.file).readBytes()
val bytes=VrPack.file(context,selected.file).readBytes()
val hash=MessageDigest.getInstance("SHA-256").digest(bytes).joinToString("") { "%02x".format(it) }
check(hash==selected.sha256) { context.getString(R.string.spatial_model_checksum_error) }
return HandLandmarker.createFromOptions(context,HandLandmarker.HandLandmarkerOptions.builder()
@@ -326,11 +326,11 @@ internal class StereoHandEngine(private val context: Context, private val token:
SpatialTracking.session.setHands(generation,SpatialHand(),SpatialHand())
}
private fun loop() {
val loaded=TrackingPack.awaitNative(context,{ running }) { state ->
val loaded=VrPack.awaitNative(context,{ running }) { state ->
if(state is AddonPack.State.Downloading)
message=context.getString(R.string.tracking_pack_downloading,(state.progress*100).toInt())
message=context.getString(R.string.setup_runtime_progress,context.getString(R.string.vr_module_downloading),(state.progress*100).toInt())
}
if(!loaded) { if(running) message=context.getString(R.string.tracking_pack_failed);return }
if(!loaded) { if(running) message=context.getString(R.string.vr_module_failed);return }
var grayL=Mat();var grayR=Mat();val rgba=Mat()
var bmpL: Bitmap?=null;var bmpR: Bitmap?=null
var leftGray=ByteArray(0);var rightGray=ByteArray(0)
@@ -341,7 +341,7 @@ internal class StereoHandEngine(private val context: Context, private val token:
var lastSource=0L;var lastStamp=0L;var captureOn=false;var captureRate=1000;var lastInputSeq=0L
var rate=0f
try {
check(TrackingPack.loadNative(context)) { context.getString(R.string.spatial_opencv_load_error) }
check(VrPack.loadNative(context)) { context.getString(R.string.spatial_opencv_load_error) }
joyConFlow=StereoJoyConFlow()
while(running) {
while(true) {
@@ -395,7 +395,7 @@ internal class StereoHandEngine(private val context: Context, private val token:
calibration?.close()
val selected=StereoCalibrationProfile.select(
if(identity!=null) runCatching { profile.readText() }.getOrNull() else null,
{ runCatching { context.assets.open(StereoCalibrationProfile.BASE_ASSET).bufferedReader().use { it.readText() } }.getOrNull() },
{ runCatching { VrPack.file(context,VrPack.LUMA_CALIBRATION).readText() }.getOrNull() },
identity,w,h)
calibration=selected?.let(StereoCalibration::fromProfile)
calibrator?.close();calibrator=null
@@ -1,5 +1,6 @@
package com.droiddeck.launcher.handtracking
import com.droiddeck.launcher.runtime.VrPack
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
@@ -186,8 +187,8 @@ internal class HandCamera(
private fun prepare() {
if (stopped) return
runCatching {
check(TrackingPack.loadNative(context)) { "hand tracking download is not installed" }
val model = TrackingPack.model(context, TrackingPack.POSE)
check(VrPack.loadNative(context)) { "the VR pack is not installed" }
val model = VrPack.model(context, VrPack.POSE)
val options = PoseLandmarker.PoseLandmarkerOptions.builder()
.setBaseOptions(BaseOptions.builder().setModelAssetBuffer(model).setDelegate(Delegate.CPU).build())
.setRunningMode(RunningMode.VIDEO)
@@ -1,5 +1,6 @@
package com.droiddeck.launcher.handtracking
import com.droiddeck.launcher.runtime.VrPack
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
@@ -150,9 +151,9 @@ internal class HandModel private constructor(private val landmarkers: List<HandL
private const val MIN_CONFIDENCE = 0.4f
fun open(context: Context): HandModel {
check(TrackingPack.loadNative(context)) { "hand tracking download is not installed" }
check(VrPack.loadNative(context)) { "the VR pack is not installed" }
fun landmarker(mode: RunningMode, hands: Int): HandLandmarker {
val model = TrackingPack.model(context, TrackingPack.HAND)
val model = VrPack.model(context, VrPack.HAND)
return HandLandmarker.createFromOptions(context, HandLandmarker.HandLandmarkerOptions.builder()
.setBaseOptions(BaseOptions.builder().setModelAssetBuffer(model).setDelegate(Delegate.CPU).build())
.setRunningMode(mode)
@@ -1,5 +1,6 @@
package com.droiddeck.launcher.handtracking
import com.droiddeck.launcher.runtime.VrPack
import com.droiddeck.launcher.core.AddonPack
import android.Manifest
import android.content.Context
@@ -40,11 +41,11 @@ internal object HandTracking {
side = prefs.getString(SIDE, null),
permitted = permitted(context),
sides = if (supported) TrackingCameras.sides(found) else emptySet(),
downloaded = TrackingPack.installed(context),
downloaded = VrPack.installed(context),
)
state.value = next
if (next.enabled && next.usable && !next.downloaded && TrackingPack.refresh(context) == AddonPack.State.Missing)
TrackingPack.ensure(context)
if (next.enabled && next.usable && !next.downloaded && VrPack.refresh(context) == AddonPack.State.Missing)
VrPack.ensure(context)
return next
}
@@ -1,56 +0,0 @@
package com.droiddeck.launcher.handtracking
import android.content.Context
import android.util.Log
import com.droiddeck.launcher.core.AddonPack
import java.io.File
import java.io.FileInputStream
import java.nio.ByteBuffer
import java.nio.channels.FileChannel
/** Hand-tracking models and the OpenCV/MediaPipe native libraries, downloaded on first use. */
internal object TrackingPack {
const val HAND = "hand_landmarker.task"
const val HAND_LITE = "hand_landmarker_lite.task"
const val POSE = "pose_landmarker_lite.task"
private const val OPENCV = "libopencv_java4.so"
private const val MEDIAPIPE = "libmediapipe_tasks_jni.so"
private const val TAG = "TrackingPack"
private val pack = AddonPack.TRACKING
val state get() = pack.state
val size get() = pack.size
private val lock = Any()
@Volatile private var nativeLoaded = false
fun installed(context: Context) = pack.installed(context)
fun refresh(context: Context) = pack.refresh(context)
fun ensure(context: Context) = pack.ensure(context) { HandTracking.load(it) }
fun file(context: Context, name: String): File = pack.file(context, name)
fun model(context: Context, name: String): ByteBuffer =
FileInputStream(file(context, name)).use { it.channel.map(FileChannel.MapMode.READ_ONLY, 0, it.channel.size()) }
/**
* Loads OpenCV and MediaPipe from the pack. MediaPipe's own System.loadLibrary then resolves to the
* already-loaded library by soname, so this must run before any MediaPipe task class initializes.
*/
fun loadNative(context: Context): Boolean {
if (nativeLoaded) return true
synchronized(lock) {
if (nativeLoaded) return true
if (!pack.installed(context)) return false
return runCatching {
System.load(file(context, OPENCV).absolutePath)
System.load(file(context, MEDIAPIPE).absolutePath)
nativeLoaded = true
true
}.onFailure { Log.e(TAG, "native libraries failed to load", it) }.getOrDefault(false)
}
}
/** Blocks the calling worker thread until the pack is usable, starting the download if needed. */
fun awaitNative(context: Context, running: () -> Boolean, onState: (AddonPack.State) -> Unit): Boolean =
pack.await(context, running, onState) && loadNative(context)
}
@@ -0,0 +1,149 @@
package com.droiddeck.launcher.runtime
import android.content.Context
import android.util.Log
import com.droiddeck.launcher.R
import com.droiddeck.launcher.core.AddonPack
import com.droiddeck.launcher.core.FileUtils
import com.droiddeck.launcher.handtracking.HandTracking
import com.droiddeck.launcher.session.SessionPhase
import com.droiddeck.launcher.session.SessionState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import java.io.File
import java.io.FileInputStream
import java.nio.ByteBuffer
import java.nio.channels.FileChannel
import java.util.concurrent.Executors
/** The SteamVR driver and layer, hand-tracking models, OpenCV/MediaPipe native libraries and Luma calibration, downloaded on first use. */
internal object VrPack {
data class Removal(val busy: Boolean = false, val error: String? = null)
const val HAND = "hand_landmarker.task"
const val HAND_LITE = "hand_landmarker_lite.task"
const val POSE = "pose_landmarker_lite.task"
const val LUMA_CALIBRATION = "luma-ultra-640x480.json"
private const val OPENCV = "libopencv_java4.so"
private const val MEDIAPIPE = "libmediapipe_tasks_jni.so"
private const val GUEST = "usr/local/lib/droiddeck-vr"
private const val IMPLICIT_LAYER = "usr/share/vulkan/implicit_layer.d/droiddeck_vr.json"
private const val PACKED_LAYER = "layer/VK_LAYER_DROIDDECK_vr_implicit.json"
private const val MARKER = ".pack"
private const val LEGACY = "addons/tracking"
private const val TAG = "VrPack"
private val TREES = listOf("droiddeck", "layer")
private val IDLE = setOf(SessionPhase.IDLE, SessionPhase.FAILED)
private val pack = AddonPack.VR
val state get() = pack.state
val size get() = pack.size
private val lock = Any()
private val guest = Any()
@Volatile private var nativeLoaded = false
private val worker = Executors.newSingleThreadExecutor { Thread(it, "vr-pack").apply { isDaemon = true } }
private val mutableRemoval = MutableStateFlow(Removal())
val removal: StateFlow<Removal> = mutableRemoval.asStateFlow()
fun init(context: Context) {
val app = context.applicationContext
pack.refresh(app)
val legacy = File(app.filesDir, LEGACY)
val upgrade = pack.outdated(app) || legacy.listFiles().orEmpty().any { File(it, AddonPack.COMPLETE).isFile }
if (legacy.exists()) worker.execute { legacy.deleteRecursively() }
if (upgrade) ensure(app)
}
fun installed(context: Context) = pack.installed(context)
fun refresh(context: Context) = pack.refresh(context)
fun ensure(context: Context) = pack.ensure(context) { app ->
HandTracking.load(app)
if (SessionState.running || SessionState.phase !in IDLE) stageGuest(app, LinuxRuntime.rootDir(app))
}
fun await(context: Context, running: () -> Boolean, onState: (AddonPack.State) -> Unit): Boolean =
pack.await(context, running, onState)
fun file(context: Context, name: String): File = pack.file(context, name)
fun installedBytes(context: Context): Long = pack.dir(context).walkBottomUp().filter { it.isFile }.sumOf { it.length() }
fun model(context: Context, name: String): ByteBuffer =
FileInputStream(file(context, name)).use { it.channel.map(FileChannel.MapMode.READ_ONLY, 0, it.channel.size()) }
/**
* Loads OpenCV and MediaPipe from the pack. MediaPipe's own System.loadLibrary then resolves to the
* already-loaded library by soname, so this must run before any MediaPipe task class initializes.
*/
fun loadNative(context: Context): Boolean {
if (nativeLoaded) return true
synchronized(lock) {
if (nativeLoaded) return true
if (!pack.installed(context)) return false
return runCatching {
System.load(file(context, OPENCV).absolutePath)
System.load(file(context, MEDIAPIPE).absolutePath)
nativeLoaded = true
true
}.onFailure { Log.e(TAG, "native libraries failed to load", it) }.getOrDefault(false)
}
}
/** Blocks the calling worker thread until the pack is usable, starting the download if needed. */
fun awaitNative(context: Context, running: () -> Boolean, onState: (AddonPack.State) -> Unit): Boolean =
pack.await(context, running, onState) && loadNative(context)
fun stageGuest(context: Context, root: File) = synchronized(guest) {
val tree = File(root, GUEST)
val layer = File(root, IMPLICIT_LAYER)
if (!pack.installed(context)) {
FileUtils.delete(tree)
FileUtils.delete(layer)
return@synchronized
}
val dir = pack.dir(context)
if (FileUtils.readString(File(tree, MARKER)) == dir.name && layer.isFile) return@synchronized
runCatching {
FileUtils.delete(tree)
TREES.forEach { copy(File(dir, it), File(tree, it)) }
copy(File(dir, PACKED_LAYER), layer)
check(FileUtils.writeString(File(tree, MARKER), dir.name))
}.onFailure { Log.w(TAG, "could not stage the VR pack", it) }
}
fun uninstall(context: Context) {
val app = context.applicationContext
worker.execute {
mutableRemoval.value = Removal(busy = true)
val maintenance = LinuxRuntimeInstaller.beginMaintenance(app, app.getString(R.string.vr_module_removing))
val error = when {
maintenance == null -> app.getString(R.string.vr_module_busy)
maintenance.run(null) { remove(app) } -> null
else -> LinuxRuntimeInstaller.removalError() ?: app.getString(R.string.vr_module_remove_failed)
}
if (error == null) HandTracking.setEnabled(app, false)
mutableRemoval.value = Removal(error = error)
}
}
private fun remove(context: Context): String? = synchronized(guest) {
if (!pack.remove(context)) return@synchronized context.getString(R.string.vr_module_remove_failed)
val root = LinuxRuntime.rootDir(context)
FileUtils.delete(File(root, GUEST))
FileUtils.delete(File(root, IMPLICIT_LAYER))
null
}
private fun copy(source: File, target: File) {
if (source.isDirectory) {
source.listFiles().orEmpty().forEach { copy(it, File(target, it.name)) }
return
}
target.parentFile?.mkdirs()
val staged = File(target.path + ".staged")
source.inputStream().use { input -> staged.outputStream().use { FileUtils.copy(input, it) } }
staged.setExecutable(true, false)
check(staged.renameTo(target)) { "could not stage ${target.name}" }
}
}
@@ -11,6 +11,7 @@ import com.droiddeck.launcher.runtime.DesktopCatalog
import com.droiddeck.launcher.runtime.LegacyNames
import com.droiddeck.launcher.runtime.LinuxRuntime
import com.droiddeck.launcher.runtime.ProotFastPath
import com.droiddeck.launcher.runtime.VrPack
import java.io.File
object SessionFiles {
@@ -115,22 +116,6 @@ object SessionFiles {
val msitools = listOf("msiinfo", "cabextract", "7z", "7z.so", "libmsi-1.0.so.0", "libgsf-1.so.114", "libgcab-1.0.so.0")
.map { "usr/local/lib/droiddeck-msitools/$it" } +
listOf("NOTICE", "GPL-2", "GPL-3", "LGPL-2.1", "7zip-License", "7zip-unRarLicense").map { "usr/local/share/licenses/droiddeck-msitools/$it" }
val handModels = listOf("left", "right").flatMap { side ->
listOf("droiddeck_hand_$side.json", "hand.mtl", "hand.png", "hand_open.obj", "hand_fist.obj", "thumb_index_open.obj",
"thumb_index_pinch.obj")
.map { "droiddeck/resources/rendermodels/droiddeck_hand_$side/$it" }
}
val vr = (listOf(
"droiddeck/bin/linuxarm64/driver_droiddeck.so",
"droiddeck/bin/linuxarm64/xr-display-mode",
"droiddeck/driver.vrdrivermanifest",
"droiddeck/resources/settings/default.vrsettings",
"layer/libVkLayer_droiddeck_vr.so",
"layer/libdroiddeck_vr_scheduling.so",
"layer/VK_LAYER_DROIDDECK_vr.json",
) + handModels).map { "usr/local/lib/droiddeck-vr/$it" to "usr/local/lib/droiddeck-vr/$it" } +
listOf("usr/local/lib/droiddeck-vr/layer/VK_LAYER_DROIDDECK_vr_implicit.json" to
"usr/share/vulkan/implicit_layer.d/droiddeck_vr.json")
val fexPreloads = listOf("x86_64", "i386").flatMap { arch ->
listOf("libblsession.so", "libfakeinput.so", "libfaultreport.so").map { "$arch/$it" to "usr/local/lib/droiddeck-fex/$arch/$it" }
} + listOf("libvulkan-thunk.so", "libwebkitinput.so").map { "x86_64/$it" to "usr/local/lib/droiddeck-fex/x86_64/$it" }
@@ -138,7 +123,7 @@ object SessionFiles {
"usr/local/bin/gamescope" to "usr/local/bin/gamescope",
"usr/local/lib/droiddeck/uruntime" to "usr/local/lib/droiddeck/uruntime",
"usr/local/share/licenses/uruntime/LICENSE" to "usr/local/share/licenses/uruntime/LICENSE",
) + mangoapp + msitools.map { it to it } + vr + fexPreloads).filter { (asset, _) ->
) + mangoapp + msitools.map { it to it } + fexPreloads).filter { (asset, _) ->
val dir = asset.substringBeforeLast('/')
runCatching { context.assets.list("linuxfs/$dir")?.contains(asset.substringAfterLast('/')) == true }.getOrDefault(false)
}
@@ -162,6 +147,7 @@ object SessionFiles {
}
if (installed) ledger.staged(relative, target) else Log.e(TAG, "$relative NOT staged")
}
VrPack.stageGuest(context, root)
File(root, "usr/local/bin/bannerlator-steam-compat").delete()
LegacyNames.migrateRootfs(root)
ComponentsManager.migrateLaunchDir(context)
@@ -359,21 +359,20 @@ private fun DesktopFiles(s: FrontEndState, a: FrontEndActions) {
val size by produceState<Long?>(null) { value = withContext(Dispatchers.IO) { runCatching { com.droiddeck.launcher.runtime.DesktopCatalog.desktopSize(ctx) }.getOrNull() } }
SettingsRow(stringResource(R.string.desktop_size), size?.let { FileUtils.sizeToString(it) } ?: "…") {}
SettingsRow(stringResource(R.string.desktop_remove_title), stringResource(R.string.desktop_remove_text)) {
UninstallDesktop(enabled = !s.runtimeActionsBlocked, onUninstall = a.onRemoveDesktop)
UninstallButton(stringResource(R.string.desktop_uninstall_title), stringResource(R.string.desktop_remove_text),
enabled = !s.runtimeActionsBlocked, onUninstall = a.onRemoveDesktop)
}
}
}
@Composable
private fun UninstallDesktop(enabled: Boolean, onUninstall: () -> Unit) {
internal fun UninstallButton(title: String, note: String, enabled: Boolean, modifier: Modifier = Modifier, onUninstall: () -> Unit) {
val colors = MaterialTheme.colorScheme
val label = stringResource(R.string.common_uninstall)
val title = stringResource(R.string.desktop_uninstall_title)
val note = stringResource(R.string.desktop_remove_text)
val keep = stringResource(R.string.flathub_keep)
var at by remember { mutableStateOf<Rect?>(null) }
Box(Modifier.onGloballyPositioned { at = it.boundsInRoot() }) {
SecondaryButton(label, enabled = enabled, compact = true) {
SecondaryButton(label, enabled = enabled, compact = true, modifier = modifier) {
val from = at ?: return@SecondaryButton
Steps.ask(StepAsk(
anchor = from, side = StepSide.Left, accent = colors.error, pillCorner = 12.dp, items = 3,
@@ -335,6 +335,9 @@ internal fun SetupPanel(
}
}
SettingsGroup(stringResource(R.string.setup_runtime)) { runtimeCheck(false) }
SettingsGroup(stringResource(R.string.vr_module_title)) {
VrModuleRows(uninstall = !s.sessionRunning && !s.runtimeActionsBlocked)
}
}
1 -> {
val controller = s.controller
@@ -1,11 +1,9 @@
package com.droiddeck.launcher.ui
import com.droiddeck.launcher.core.AddonPack
import android.Manifest
import android.content.Intent
import android.net.Uri
import android.provider.Settings
import android.text.format.Formatter
import android.speech.tts.TextToSpeech
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
@@ -72,7 +70,6 @@ import com.droiddeck.launcher.handtracking.Advice
import com.droiddeck.launcher.handtracking.BodyPose
import com.droiddeck.launcher.handtracking.HandCamera
import com.droiddeck.launcher.handtracking.HandTracking
import com.droiddeck.launcher.handtracking.TrackingPack
import com.droiddeck.launcher.handtracking.Landmark
import com.droiddeck.launcher.handtracking.TrackingCameras
import kotlinx.coroutines.delay
@@ -189,27 +186,12 @@ internal fun HandCameraRows(host: MenuHost, track: (String) -> Modifier, inSessi
})
!s.permitted -> ActionRow(stringResource(R.string.hand_camera_access), stringResource(R.string.hand_camera_access_hint),
stringResource(R.string.hand_camera_allow_button), { ask.launch(Manifest.permission.CAMERA) })
!s.downloaded -> TrackingPackRow()
!s.downloaded -> VrModuleRows(uninstall = null, track)
!inSession -> ActionRow(stringResource(R.string.hand_camera_placement), stringResource(R.string.hand_camera_placement_hint),
stringResource(R.string.hand_camera_check), { HandTracking.requestCheck() })
}
}
@Composable
private fun TrackingPackRow() {
val context = LocalContext.current
val pack by TrackingPack.state.collectAsState()
val size = Formatter.formatShortFileSize(context, TrackingPack.size)
when (val now = pack) {
is AddonPack.State.Downloading -> ActionRow(stringResource(R.string.tracking_pack_title),
stringResource(R.string.tracking_pack_hint, size), stringResource(R.string.tracking_pack_download), {}, progress = now.progress)
AddonPack.State.Failed -> ActionRow(stringResource(R.string.tracking_pack_title),
stringResource(R.string.tracking_pack_failed), stringResource(R.string.tracking_pack_retry), { TrackingPack.ensure(context) })
else -> ActionRow(stringResource(R.string.tracking_pack_title),
stringResource(R.string.tracking_pack_hint, size), stringResource(R.string.tracking_pack_download), { TrackingPack.ensure(context) })
}
}
@Composable
private fun PlacementCheck(settings: HandTracking.Settings, play: Boolean, onPlay: () -> Unit, onClose: () -> Unit) {
val context = LocalContext.current
@@ -79,6 +79,7 @@ import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
@@ -142,6 +143,8 @@ import com.droiddeck.launcher.gpu.SteamVr
import com.droiddeck.launcher.gpu.ScreenEffects
import com.droiddeck.launcher.session.SessionPrefs
import com.droiddeck.launcher.session.ComponentsManager
import com.droiddeck.launcher.core.AddonPack
import com.droiddeck.launcher.runtime.VrPack
import com.droiddeck.launcher.input.SecondScreenDisplay
import com.droiddeck.launcher.input.SecondScreenMode
import kotlinx.coroutines.flow.collect
@@ -308,6 +311,7 @@ internal fun SessionDrawer(open: Boolean, requestedPage: SessionDrawerPage, cont
val pal = LocalPalette.current
val host = rememberMenuHost()
val (glasses, glassesSettings) = rememberGlasses()
val vrPack by VrPack.state.collectAsState()
val glassesPages = glassesTabs(glasses)
var selectedGlassesTab by rememberSaveable { mutableStateOf(GlassesTab.DISPLAY) }
val glassesTab = selectedGlassesTab.takeIf { key -> glassesPages.any { it.first == key } } ?: GlassesTab.DISPLAY
@@ -486,7 +490,10 @@ internal fun SessionDrawer(open: Boolean, requestedPage: SessionDrawerPage, cont
onAdvancedToggle = { advancedEffectsExpanded = !advancedEffectsExpanded }) { key -> focus.track(page, key) }
}
SessionDrawerPage.VR -> {
SteamVrGroup(a) { key -> focus.track(page, key) }
if (vrPack == AddonPack.State.Ready) SteamVrGroup(a) { key -> focus.track(page, key) }
else SettingsGroup(stringResource(R.string.vr_module_title)) {
VrModuleRows(uninstall = null) { key -> focus.track(page, key) }
}
if (!a.glassesOutput) CardboardGroup(host, a) { key -> focus.track(page, key) }
}
SessionDrawerPage.CONTROLLER -> {
@@ -987,6 +994,8 @@ private fun SteamVrGroup(a: DrawerActions, track: (String) -> Modifier) {
@Composable
private fun SteamVrRow(a: DrawerActions) {
val vrLabel = stringResource(R.string.cardboard_steamvr)
val vrPack by VrPack.state.collectAsState()
if (vrPack != AddonPack.State.Ready) return VrModuleRows(uninstall = null)
when (a.steamVr) {
SteamVr.Status.NOT_INSTALLED -> ActionRow(vrLabel, null, stringResource(R.string.cardboard_steamvr_install), { a.onSteamVr("install") })
SteamVr.Status.INSTALLING -> SettingsRow(vrLabel, stringResource(R.string.cardboard_steamvr_installing)) {}
@@ -29,7 +29,7 @@ import androidx.compose.ui.unit.dp
import com.droiddeck.launcher.R
import com.droiddeck.launcher.core.AppUiPrefs
import com.droiddeck.launcher.glasses.CalibrationDistance
import com.droiddeck.launcher.handtracking.TrackingPack
import com.droiddeck.launcher.runtime.VrPack
import com.droiddeck.launcher.glasses.Glasses
import com.droiddeck.launcher.glasses.SpatialCalibrationProgress
import com.droiddeck.launcher.glasses.SpatialTracking
@@ -95,7 +95,7 @@ class SpatialTrackingActivity : ComponentActivity() {
}
override fun onPause() { SpatialTracking.diagnostics(false);super.onPause() }
private fun printBoard() {
if(!TrackingPack.loadNative(this)) return
if(!VrPack.loadNative(this)) return
val c=StereoCalibrator(this);val mat=Mat()
c.board.generateImage(Size(1500.0,2100.0),mat,0,1)
val bitmap=Bitmap.createBitmap(1500,2100,Bitmap.Config.ARGB_8888)
@@ -31,6 +31,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
@@ -50,6 +51,8 @@ import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.unit.dp
import com.droiddeck.launcher.frontend.Library
import com.droiddeck.launcher.glasses.GlassesMenuMirror
import com.droiddeck.launcher.core.AddonPack
import com.droiddeck.launcher.runtime.VrPack
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.key
@@ -107,6 +110,7 @@ internal fun SteamHome(s: FrontEndState, a: FrontEndActions, modifier: Modifier)
},
)
val (glasses, glassesSettings) = rememberGlasses()
val vrPack by VrPack.state.collectAsState()
val headset = glasses.present && glasses.canControl
val drop = rememberDropSheetState()
LaunchedEffect(headset) { if (!headset && (drop.open || drop.shown)) drop.reset() }
@@ -117,7 +121,8 @@ internal fun SteamHome(s: FrontEndState, a: FrontEndActions, modifier: Modifier)
if (headset) DropSheet(
drop, glassesTabs(glasses), covered = lifted,
button = { enabled ->
PrimaryButton(stringResource(R.string.games_play_steamvr), enabled = !s.busy && glasses.usable, large = true, icon = Icons.Filled.PlayArrow, fill = true,
PrimaryButton(stringResource(if (vrPack == AddonPack.State.Ready) R.string.games_play_steamvr else R.string.games_install_play_steamvr),
enabled = !s.busy && glasses.usable, large = true, icon = Icons.Filled.PlayArrow, fill = true,
modifier = Modifier.fillMaxWidth().testTag("play-steamvr")) { if (enabled) { drop.open = false; a.onPlaySteamVr() } }
},
) { tab ->
@@ -0,0 +1,62 @@
package com.droiddeck.launcher.ui
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.droiddeck.launcher.R
import com.droiddeck.launcher.core.AddonPack
import com.droiddeck.launcher.core.FileUtils
import com.droiddeck.launcher.runtime.VrPack
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@Composable
internal fun VrModuleRows(uninstall: Boolean?, track: (String) -> Modifier = { Modifier }) {
val context = LocalContext.current
val pack by VrPack.state.collectAsState()
val removal by VrPack.removal.collectAsState()
val title = stringResource(R.string.vr_module_title)
val now = pack
when {
removal.busy -> {
SettingsRow(title, stringResource(R.string.vr_module_removing)) {}
Box(Modifier.fillMaxWidth().padding(start = 14.dp, end = 14.dp, bottom = 10.dp)) {
LinearProgressIndicator(modifier = Modifier.fillMaxWidth().height(4.dp))
}
}
now is AddonPack.State.Downloading -> {
val percent = (now.progress * 100).toInt()
SettingsRow(title, stringResource(R.string.setup_runtime_progress, stringResource(R.string.vr_module_downloading), percent)) {}
Box(Modifier.fillMaxWidth().padding(start = 14.dp, end = 14.dp, bottom = 10.dp)) {
LinearProgressIndicator(progress = { now.progress }, modifier = Modifier.fillMaxWidth().height(4.dp))
}
}
now == AddonPack.State.Ready -> {
val size by produceState<Long?>(null) { value = withContext(Dispatchers.IO) { VrPack.installedBytes(context) } }
SettingsRow(title, stringResource(R.string.vr_module_installed, size?.let { FileUtils.sizeToString(it) } ?: "…")) {
if (uninstall != null) UninstallButton(stringResource(R.string.vr_module_uninstall_title), stringResource(R.string.vr_module_uninstall_text),
enabled = uninstall, modifier = Modifier.testTag("vr-module-uninstall")) { VrPack.uninstall(context) }
}
}
else -> {
val hint = if (now == AddonPack.State.Failed) stringResource(R.string.vr_module_failed)
else stringResource(R.string.vr_module_hint, FileUtils.sizeToString(VrPack.size))
SettingsRow(title, hint) {
PrimaryButton(stringResource(R.string.common_download), compact = true,
modifier = track("vr-module").testTag("vr-module-download")) { VrPack.ensure(context) }
}
}
}
removal.error?.let { Box(Modifier.padding(horizontal = 14.dp, vertical = 6.dp)) { Note(it) } }
}
+14
View File
@@ -1036,6 +1036,7 @@
<string name="games_empty">الألعاب التي تثبّتها في Steam تظهر هنا بعد الجلسة.</string>
<string name="games_play_steam">تشغيل Steam</string>
<string name="games_play_steamvr">تشغيل SteamVR</string>
<string name="games_install_play_steamvr">تنزيل وتشغيل SteamVR</string>
<string name="games_launch_settings">إعدادات التشغيل</string>
<string name="games_launch">تشغيل</string>
<string name="games_files">ملفات اللعبة</string>
@@ -1394,9 +1395,12 @@
<string name="session_proton_downloading_mb">جارٍ تنزيل Proton Experimental (ARM64) · %1$d من %2$d MB</string>
<string name="session_proton_checking">جارٍ فحص Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">جارٍ فك ضغط Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">جارٍ تنزيل وحدة الواقع الافتراضي</string>
<string name="session_vr_downloading_mb">جارٍ تنزيل وحدة الواقع الافتراضي · %1$d من %2$d MB</string>
<string name="session_runtime_catalog_unreachable">تعذّر الوصول إلى كتالوج بيئة التشغيل. تحقَّق من الاتصال واضغط على «تشغيل» مرة أخرى.</string>
<string name="session_runtime_install_failed">لم يتم تثبيت بيئة تشغيل Linux. تحقَّق من بيئة التشغيل في «الإعداد» واضغط على «تشغيل» مرة أخرى.</string>
<string name="session_desktop_install_failed">لم يتم تثبيت سطح المكتب (%1$s). تحقَّق من الاتصال واضغط على «سطح المكتب» مرة أخرى.</string>
<string name="session_vr_install_failed">لم يتم تثبيت وحدة الواقع الافتراضي. تحقَّق من الاتصال واضغط على «تشغيل SteamVR» مرة أخرى.</string>
<string name="session_ended_named">توقّف %1$s بشكل غير متوقَّع. شارِك السجلات مع بلاغ عن الخطأ، أو حاوِل مرة أخرى.</string>
<string name="session_ended_program">توقّف البرنامج بشكل غير متوقَّع. شارِك السجلات مع بلاغ عن الخطأ، أو حاوِل مرة أخرى.</string>
<string name="session_ended_desktop">توقّف سطح المكتب بشكل غير متوقَّع. شارِك السجلات مع بلاغ عن الخطأ، أو حاوِل مرة أخرى.</string>
@@ -2551,6 +2555,16 @@
<string name="hand_camera_placement">وضع الكاميرا</string>
<string name="hand_camera_placement_hint">تحقّق من أن الكاميرا تراك قبل اللعب.</string>
<string name="hand_camera_check">تحقّق</string>
<string name="vr_module_title">وحدة الواقع الافتراضي</string>
<string name="vr_module_hint">SteamVR على النظارات وQuest وCardboard، مع تتبع اليدين بالكاميرا · تنزيل %1$s</string>
<string name="vr_module_installed">مثبّتة · %1$s</string>
<string name="vr_module_downloading">جارٍ تنزيل وحدة الواقع الافتراضي</string>
<string name="vr_module_failed">تعذّر تنزيل وحدة الواقع الافتراضي. تحقَّق من الاتصال وحاول مرة أخرى.</string>
<string name="vr_module_removing">جارٍ إزالة وحدة الواقع الافتراضي</string>
<string name="vr_module_busy">أوقف الجلسة قبل إزالة وحدة الواقع الافتراضي.</string>
<string name="vr_module_remove_failed">تعذّرت إزالة وحدة الواقع الافتراضي</string>
<string name="vr_module_uninstall_title">إلغاء تثبيت وحدة الواقع الافتراضي؟</string>
<string name="vr_module_uninstall_text">سيتوقف SteamVR وتتبع اليدين بالكاميرا عن العمل حتى تنزّلها مجددًا. يبقى SteamVR نفسه والألعاب والإعدادات كما هي.</string>
<string name="hand_camera_check_title">وضع الكاميرا</string>
<string name="hand_camera_how_rear">ضع الجهاز واقفًا على بُعد 1.5 إلى 2 متر تقريبًا بارتفاع الصدر، مع توجيه الكاميرا الخلفية نحوك. ثم ادخل إلى مجال الرؤية ويداك ممدودتان.</string>
<string name="hand_camera_how_front">ضع الجهاز واقفًا على بُعد 1.5 إلى 2 متر تقريبًا بارتفاع الصدر، مع توجيه الشاشة نحوك. ثم ادخل إلى مجال الرؤية ويداك ممدودتان.</string>
@@ -997,6 +997,16 @@
<string name="hand_camera_placement">Posición de la cámara</string>
<string name="hand_camera_placement_hint">Comprueba que la cámara pueda verte antes de jugar.</string>
<string name="hand_camera_check">Comprobar</string>
<string name="vr_module_title">Módulo de RV</string>
<string name="vr_module_hint">SteamVR en lentes, Quest y Cardboard, además de seguimiento de manos con la cámara · descarga de %1$s</string>
<string name="vr_module_installed">Instalado · %1$s</string>
<string name="vr_module_downloading">Descargando el módulo de RV</string>
<string name="vr_module_failed">No se pudo descargar el módulo de RV. Revisa la conexión y vuelve a intentarlo.</string>
<string name="vr_module_removing">Quitando el módulo de RV</string>
<string name="vr_module_busy">Detén la sesión antes de quitar el módulo de RV.</string>
<string name="vr_module_remove_failed">No se pudo quitar el módulo de RV</string>
<string name="vr_module_uninstall_title">¿Desinstalar el módulo de RV?</string>
<string name="vr_module_uninstall_text">SteamVR y el seguimiento de manos con la cámara dejarán de funcionar hasta que lo vuelvas a descargar. SteamVR, los juegos y la configuración se conservan.</string>
<string name="hand_camera_check_title">Posición de la cámara</string>
<string name="hand_camera_how_rear">Coloca el dispositivo de pie a 1,5-2 metros de distancia, a la altura del pecho, con la cámara trasera hacia ti. Luego entra en el encuadre con las manos extendidas.</string>
<string name="hand_camera_how_front">Coloca el dispositivo de pie a 1,5-2 metros de distancia, a la altura del pecho, con la pantalla hacia ti. Luego entra en el encuadre con las manos extendidas.</string>
@@ -1074,6 +1084,7 @@
<string name="games_empty">Los juegos que instales en Steam aparecen aquí después de la sesión.</string>
<string name="games_play_steam">Jugar en Steam</string>
<string name="games_play_steamvr">Jugar en SteamVR</string>
<string name="games_install_play_steamvr">Descargar y jugar en SteamVR</string>
<string name="games_launch_settings">Ajustes de inicio</string>
<string name="games_launch">Iniciar</string>
<string name="games_files">Archivos del juego</string>
@@ -1406,9 +1417,12 @@
<string name="session_proton_downloading_mb">descargando Proton Experimental (ARM64) · %1$d de %2$d MB</string>
<string name="session_proton_checking">comprobando Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">descomprimiendo Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">descargando el módulo de RV</string>
<string name="session_vr_downloading_mb">descargando el módulo de RV · %1$d de %2$d MB</string>
<string name="session_runtime_catalog_unreachable">No se pudo acceder al catálogo del runtime. Revisa la conexión y vuelve a presionar Jugar.</string>
<string name="session_runtime_install_failed">El runtime de Linux no se instaló. Revisa el runtime en Configuración y vuelve a presionar Jugar.</string>
<string name="session_desktop_install_failed">El escritorio no se instaló (%1$s). Revisa la conexión y presiona Escritorio de nuevo.</string>
<string name="session_vr_install_failed">El módulo de RV no se instaló. Revisa la conexión y presiona Jugar en SteamVR de nuevo.</string>
<string name="session_ended_named">%1$s se detuvo inesperadamente. Comparte los registros en un informe de error o inténtalo de nuevo.</string>
<string name="session_ended_program">El programa se detuvo inesperadamente. Comparte los registros en un informe de error o inténtalo de nuevo.</string>
<string name="session_ended_desktop">El escritorio se detuvo inesperadamente. Comparte los registros en un informe de error o inténtalo de nuevo.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Игрите, които инсталирате в Steam, се показват тук след сесията.</string>
<string name="games_play_steam">Пускане на Steam</string>
<string name="games_play_steamvr">Пускане на SteamVR</string>
<string name="games_install_play_steamvr">Изтегли и пусни SteamVR</string>
<string name="games_launch_settings">Настройки за стартиране</string>
<string name="games_launch">Стартиране</string>
<string name="games_files">Файлове на играта</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">изтегляне на Proton Experimental (ARM64) · %1$d от %2$d MB</string>
<string name="session_proton_checking">проверка на Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">разопаковане на Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">изтегляне на VR модула</string>
<string name="session_vr_downloading_mb">изтегляне на VR модула · %1$d от %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Каталогът на средата не можа да бъде достигнат. Провери връзката и натисни „Пускане“ отново.</string>
<string name="session_runtime_install_failed">Средата на Linux не се инсталира. Провери средата в „Настройка“ и натисни „Пускане“ отново.</string>
<string name="session_desktop_install_failed">Работният плот не се инсталира (%1$s). Провери връзката и натисни „Desktop“ отново.</string>
<string name="session_vr_install_failed">VR модулът не се инсталира. Провери връзката и натисни „Пускане на SteamVR“ отново.</string>
<string name="session_ended_named">%1$s спря неочаквано. Сподели логовете в отчет за грешка или опитай отново.</string>
<string name="session_ended_program">Програмата спря неочаквано. Сподели логовете в отчет за грешка или опитай отново.</string>
<string name="session_ended_desktop">Работният плот спря неочаквано. Сподели логовете в отчет за грешка или опитай отново.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Разположение на камерата</string>
<string name="hand_camera_placement_hint">Проверете дали камерата ви вижда, преди да играете.</string>
<string name="hand_camera_check">Проверка</string>
<string name="vr_module_title">VR модул</string>
<string name="vr_module_hint">SteamVR на очила, Quest и Cardboard, плюс проследяване на ръцете с камерата · изтегляне %1$s</string>
<string name="vr_module_installed">Инсталиран · %1$s</string>
<string name="vr_module_downloading">Изтегляне на VR модула</string>
<string name="vr_module_failed">VR модулът не можа да бъде изтеглен. Провери връзката и опитай отново.</string>
<string name="vr_module_removing">Премахване на VR модула</string>
<string name="vr_module_busy">Спри сесията, преди да премахнеш VR модула.</string>
<string name="vr_module_remove_failed">VR модулът не можа да бъде премахнат</string>
<string name="vr_module_uninstall_title">Деинсталиране на VR модула?</string>
<string name="vr_module_uninstall_text">SteamVR и проследяването на ръцете с камерата спират да работят, докато не го изтеглиш отново. Самият SteamVR, игрите и настройките се запазват.</string>
<string name="hand_camera_check_title">Разположение на камерата</string>
<string name="hand_camera_how_rear">Поставете устройството изправено на 1,5–2 метра разстояние, приблизително на нивото на гърдите, със задната камера, насочена към вас. След това застанете в кадър с протегнати ръце.</string>
<string name="hand_camera_how_front">Поставете устройството изправено на 1,5–2 метра разстояние, приблизително на нивото на гърдите, с екрана, насочен към вас. След това застанете в кадър с протегнати ръце.</string>
+14
View File
@@ -1024,6 +1024,7 @@
<string name="games_empty">Hry, které nainstalujete ve Steamu, se zde zobrazí po relaci.</string>
<string name="games_play_steam">Hrát ve Steamu</string>
<string name="games_play_steamvr">Hrát ve SteamVR</string>
<string name="games_install_play_steamvr">Stáhnout a hrát ve SteamVR</string>
<string name="games_launch_settings">Nastavení spuštění</string>
<string name="games_launch">Spustit</string>
<string name="games_files">Soubory hry</string>
@@ -1368,9 +1369,12 @@
<string name="session_proton_downloading_mb">stahování Proton Experimental (ARM64) · %1$d z %2$d MB</string>
<string name="session_proton_checking">kontrola Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">rozbalování Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">stahování modulu VR</string>
<string name="session_vr_downloading_mb">stahování modulu VR · %1$d z %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Nepodařilo se spojit s katalogem runtime. Zkontrolujte připojení a znovu stiskněte Hrát.</string>
<string name="session_runtime_install_failed">Runtime Linuxu se nenainstaloval. Zkontrolujte runtime v Přípravě a znovu stiskněte Hrát.</string>
<string name="session_desktop_install_failed">Plocha se nenainstalovala (%1$s). Zkontrolujte připojení a znovu stiskněte Plocha.</string>
<string name="session_vr_install_failed">Modul VR se nenainstaloval. Zkontrolujte připojení a znovu stiskněte Hrát ve SteamVR.</string>
<string name="session_ended_named">Došlo k neočekávanému zastavení %1$s. Přiložte logy k hlášení chyby, nebo zkuste znovu.</string>
<string name="session_ended_program">Program neočekávaně skončil. Přiložte logy k hlášení chyby, nebo zkuste znovu.</string>
<string name="session_ended_desktop">Plocha neočekávaně skončila. Přiložte logy k hlášení chyby, nebo zkuste znovu.</string>
@@ -2501,6 +2505,16 @@
<string name="hand_camera_placement">Umístění kamery</string>
<string name="hand_camera_placement_hint">Než začnete hrát, zkontrolujte, že vás kamera vidí.</string>
<string name="hand_camera_check">Zkontrolovat</string>
<string name="vr_module_title">Modul VR</string>
<string name="vr_module_hint">SteamVR na brýlích, Quest a Cardboard a sledování rukou kamerou · stažení %1$s</string>
<string name="vr_module_installed">Nainstalováno · %1$s</string>
<string name="vr_module_downloading">Stahování modulu VR</string>
<string name="vr_module_failed">Modul VR se nepodařilo stáhnout. Zkontrolujte připojení a zkuste to znovu.</string>
<string name="vr_module_removing">Odebírání modulu VR</string>
<string name="vr_module_busy">Před odebráním modulu VR ukončete relaci.</string>
<string name="vr_module_remove_failed">Modul VR se nepodařilo odebrat</string>
<string name="vr_module_uninstall_title">Odinstalovat modul VR?</string>
<string name="vr_module_uninstall_text">SteamVR a sledování rukou kamerou přestanou fungovat, dokud modul znovu nestáhnete. SteamVR samotný, hry a nastavení zůstanou zachovány.</string>
<string name="hand_camera_check_title">Umístění kamery</string>
<string name="hand_camera_how_rear">Postavte zařízení svisle do vzdálenosti 1,5 až 2 metry přibližně ve výšce hrudníku tak, aby zadní kamera směřovala k vám. Pak se postavte do záběru s nataženýma rukama.</string>
<string name="hand_camera_how_front">Postavte zařízení svisle do vzdálenosti 1,5 až 2 metry přibližně ve výšce hrudníku tak, aby obrazovka směřovala k vám. Pak se postavte do záběru s nataženýma rukama.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Spil, du installerer i Steam, vises her efter sessionen.</string>
<string name="games_play_steam">Spil Steam</string>
<string name="games_play_steamvr">Spil SteamVR</string>
<string name="games_install_play_steamvr">Download og spil SteamVR</string>
<string name="games_launch_settings">Startindstillinger</string>
<string name="games_launch">Start</string>
<string name="games_files">Spilfiler</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">downloader Proton Experimental (ARM64) · %1$d af %2$d MB</string>
<string name="session_proton_checking">kontrollerer Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">udpakker Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">downloader VR-modulet</string>
<string name="session_vr_downloading_mb">downloader VR-modulet · %1$d af %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Kunne ikke nå runtime-kataloget. Kontroller forbindelsen, og tryk på Spil igen.</string>
<string name="session_runtime_install_failed">Linux-runtime blev ikke installeret. Kontroller runtime i Opsætning, og tryk på Spil igen.</string>
<string name="session_desktop_install_failed">Skrivebordet blev ikke installeret (%1$s). Kontroller forbindelsen, og tryk på Skrivebord igen.</string>
<string name="session_vr_install_failed">VR-modulet blev ikke installeret. Kontroller forbindelsen, og tryk på Spil SteamVR igen.</string>
<string name="session_ended_named">%1$s stoppede uventet. Del logs med en fejlrapport, eller prøv igen.</string>
<string name="session_ended_program">Programmet stoppede uventet. Del logs med en fejlrapport, eller prøv igen.</string>
<string name="session_ended_desktop">Skrivebordet stoppede uventet. Del logs med en fejlrapport, eller prøv igen.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Kameraplacering</string>
<string name="hand_camera_placement_hint">Tjek, at kameraet kan se dig, før du spiller.</string>
<string name="hand_camera_check">Tjek</string>
<string name="vr_module_title">VR-modul</string>
<string name="vr_module_hint">SteamVR på briller, Quest og Cardboard samt håndsporing med kameraet · %1$s download</string>
<string name="vr_module_installed">Installeret · %1$s</string>
<string name="vr_module_downloading">Downloader VR-modulet</string>
<string name="vr_module_failed">VR-modulet kunne ikke downloades. Kontroller forbindelsen, og prøv igen.</string>
<string name="vr_module_removing">Fjerner VR-modulet</string>
<string name="vr_module_busy">Stop sessionen, før du fjerner VR-modulet.</string>
<string name="vr_module_remove_failed">VR-modulet kunne ikke fjernes</string>
<string name="vr_module_uninstall_title">Afinstaller VR-modulet?</string>
<string name="vr_module_uninstall_text">SteamVR og håndsporing med kameraet holder op med at virke, indtil du downloader det igen. Selve SteamVR, spil og indstillinger bevares.</string>
<string name="hand_camera_check_title">Kameraplacering</string>
<string name="hand_camera_how_rear">Stil enheden op 1,5 til 2 meter væk i cirka brysthøjde med bagkameraet vendt mod dig. Træd så ind i billedet med hænderne ude.</string>
<string name="hand_camera_how_front">Stil enheden op 1,5 til 2 meter væk i cirka brysthøjde med skærmen vendt mod dig. Træd så ind i billedet med hænderne ude.</string>
+14
View File
@@ -1001,6 +1001,7 @@
<string name="games_empty">Spiele, die du in Steam installierst, erscheinen hier nach der Sitzung.</string>
<string name="games_play_steam">Mit Steam spielen</string>
<string name="games_play_steamvr">Mit SteamVR spielen</string>
<string name="games_install_play_steamvr">Herunterladen und mit SteamVR spielen</string>
<string name="games_launch_settings">Starteinstellungen</string>
<string name="games_launch">Starten</string>
<string name="games_files">Spieldateien</string>
@@ -1331,9 +1332,12 @@
<string name="session_proton_downloading_mb">Proton Experimental (ARM64) wird heruntergeladen · %1$d von %2$d MB</string>
<string name="session_proton_checking">Proton Experimental (ARM64) wird geprüft</string>
<string name="session_proton_unpacking">Proton Experimental (ARM64) wird entpackt</string>
<string name="session_vr_downloading">VR-Modul wird heruntergeladen</string>
<string name="session_vr_downloading_mb">VR-Modul wird heruntergeladen · %1$d von %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Der Katalog der Laufzeiten war nicht erreichbar. Prüfe die Verbindung und tippe erneut auf Spielen.</string>
<string name="session_runtime_install_failed">Die Linux-Laufzeit wurde nicht installiert. Prüfe sie unter Einrichtung und tippe erneut auf Spielen.</string>
<string name="session_desktop_install_failed">Der Desktop wurde nicht installiert (%1$s). Prüfe die Verbindung und tippe erneut auf Desktop.</string>
<string name="session_vr_install_failed">Das VR-Modul wurde nicht installiert. Prüfe die Verbindung und tippe erneut auf Mit SteamVR spielen.</string>
<string name="session_ended_named">%1$s wurde unerwartet beendet. Teile die Protokolle mit einem Fehlerbericht oder versuche es erneut.</string>
<string name="session_ended_program">Das Programm wurde unerwartet beendet. Teile die Protokolle mit einem Fehlerbericht oder versuche es erneut.</string>
<string name="session_ended_desktop">Der Desktop wurde unerwartet beendet. Teile die Protokolle mit einem Fehlerbericht oder versuche es erneut.</string>
@@ -2437,6 +2441,16 @@
<string name="hand_camera_placement">Kameraplatzierung</string>
<string name="hand_camera_placement_hint">Prüfe, ob die Kamera dich sehen kann, bevor du spielst.</string>
<string name="hand_camera_check">Prüfen</string>
<string name="vr_module_title">VR-Modul</string>
<string name="vr_module_hint">SteamVR auf Brillen, Quest und Cardboard sowie Handtracking per Kamera · %1$s Download</string>
<string name="vr_module_installed">Installiert · %1$s</string>
<string name="vr_module_downloading">VR-Modul wird heruntergeladen</string>
<string name="vr_module_failed">Das VR-Modul konnte nicht heruntergeladen werden. Prüfe die Verbindung und versuche es erneut.</string>
<string name="vr_module_removing">VR-Modul wird entfernt</string>
<string name="vr_module_busy">Beende die Sitzung, bevor du das VR-Modul entfernst.</string>
<string name="vr_module_remove_failed">Das VR-Modul konnte nicht entfernt werden</string>
<string name="vr_module_uninstall_title">VR-Modul deinstallieren?</string>
<string name="vr_module_uninstall_text">SteamVR und Handtracking per Kamera funktionieren erst wieder, wenn du es erneut herunterlädst. SteamVR selbst, Spiele und Einstellungen bleiben erhalten.</string>
<string name="hand_camera_check_title">Kameraplatzierung</string>
<string name="hand_camera_how_rear">Stell das Gerät etwa 1,5 bis 2 Meter entfernt in Brusthöhe auf, mit der Rückkamera zu dir gerichtet. Tritt dann mit ausgestreckten Händen ins Bild.</string>
<string name="hand_camera_how_front">Stell das Gerät etwa 1,5 bis 2 Meter entfernt in Brusthöhe auf, mit dem Bildschirm zu dir gerichtet. Tritt dann mit ausgestreckten Händen ins Bild.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Τα παιχνίδια που εγκαθιστάτε στο Steam εμφανίζονται εδώ μετά τη συνεδρία.</string>
<string name="games_play_steam">Αναπαραγωγή Steam</string>
<string name="games_play_steamvr">Αναπαραγωγή SteamVR</string>
<string name="games_install_play_steamvr">Λήψη και αναπαραγωγή SteamVR</string>
<string name="games_launch_settings">Ρυθμίσεις εκκίνησης</string>
<string name="games_launch">Εκκίνηση</string>
<string name="games_files">Αρχεία παιχνιδιού</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">λήψη του Proton Experimental (ARM64) · %1$d από %2$d MB</string>
<string name="session_proton_checking">έλεγχος του Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">αποσυμπίεση του Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">λήψη της μονάδας VR</string>
<string name="session_vr_downloading_mb">λήψη της μονάδας VR · %1$d από %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Δεν ήταν δυνατή η πρόσβαση στον κατάλογο runtime. Ελέγξτε τη σύνδεση και πατήστε ξανά Αναπαραγωγή.</string>
<string name="session_runtime_install_failed">Το Linux runtime δεν εγκαταστάθηκε. Ελέγξτε το runtime στη Ρύθμιση και πατήστε ξανά Αναπαραγωγή.</string>
<string name="session_desktop_install_failed">Η επιφάνεια εργασίας δεν εγκαταστάθηκε (%1$s). Ελέγξτε τη σύνδεση και πατήστε ξανά Επιφάνεια εργασίας.</string>
<string name="session_vr_install_failed">Η μονάδα VR δεν εγκαταστάθηκε. Ελέγξτε τη σύνδεση και πατήστε ξανά Αναπαραγωγή SteamVR.</string>
<string name="session_ended_named">%1$s διακόπηκε αναπάντεχα. Κοινοποιήστε τα αρχεία καταγραφής με μια αναφορά σφάλματος, ή δοκιμάστε ξανά.</string>
<string name="session_ended_program">Το πρόγραμμα διακόπηκε αναπάντεχα. Κοινοποιήστε τα αρχεία καταγραφής με μια αναφορά σφάλματος, ή δοκιμάστε ξανά.</string>
<string name="session_ended_desktop">Η επιφάνεια εργασίας διακόπηκε αναπάντεχα. Κοινοποιήστε τα αρχεία καταγραφής με μια αναφορά σφάλματος, ή δοκιμάστε ξανά.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Τοποθέτηση κάμερας</string>
<string name="hand_camera_placement_hint">Βεβαιωθείτε ότι η κάμερα σάς βλέπει πριν παίξετε.</string>
<string name="hand_camera_check">Έλεγχος</string>
<string name="vr_module_title">Μονάδα VR</string>
<string name="vr_module_hint">SteamVR σε γυαλιά, Quest και Cardboard, καθώς και παρακολούθηση χεριών με την κάμερα · λήψη %1$s</string>
<string name="vr_module_installed">Εγκατεστημένη · %1$s</string>
<string name="vr_module_downloading">Λήψη της μονάδας VR</string>
<string name="vr_module_failed">Δεν ήταν δυνατή η λήψη της μονάδας VR. Ελέγξτε τη σύνδεση και δοκιμάστε ξανά.</string>
<string name="vr_module_removing">Κατάργηση της μονάδας VR</string>
<string name="vr_module_busy">Σταματήστε την περίοδο λειτουργίας πριν καταργήσετε τη μονάδα VR.</string>
<string name="vr_module_remove_failed">Δεν ήταν δυνατή η κατάργηση της μονάδας VR</string>
<string name="vr_module_uninstall_title">Κατάργηση εγκατάστασης της μονάδας VR;</string>
<string name="vr_module_uninstall_text">Το SteamVR και η παρακολούθηση χεριών με την κάμερα σταματούν να λειτουργούν μέχρι να τη κατεβάσετε ξανά. Το ίδιο το SteamVR, τα παιχνίδια και οι ρυθμίσεις διατηρούνται.</string>
<string name="hand_camera_check_title">Τοποθέτηση κάμερας</string>
<string name="hand_camera_how_rear">Στήστε τη συσκευή όρθια σε απόσταση 1,5 έως 2 μέτρων, περίπου στο ύψος του στήθους, με την πίσω κάμερα στραμμένη προς εσάς. Έπειτα μπείτε στο οπτικό πεδίο με τα χέρια τεντωμένα.</string>
<string name="hand_camera_how_front">Στήστε τη συσκευή όρθια σε απόσταση 1,5 έως 2 μέτρων, περίπου στο ύψος του στήθους, με την οθόνη στραμμένη προς εσάς. Έπειτα μπείτε στο οπτικό πεδίο με τα χέρια τεντωμένα.</string>
+14
View File
@@ -1015,6 +1015,7 @@
<string name="games_empty">Los juegos que instales en Steam aparecen aquí después de la sesión.</string>
<string name="games_play_steam">Jugar en Steam</string>
<string name="games_play_steamvr">Jugar en SteamVR</string>
<string name="games_install_play_steamvr">Descargar y jugar en SteamVR</string>
<string name="games_launch_settings">Ajustes de inicio</string>
<string name="games_launch">Iniciar</string>
<string name="games_files">Archivos del juego</string>
@@ -1352,9 +1353,12 @@
<string name="session_proton_downloading_mb">descargando Proton Experimental (ARM64) · %1$d de %2$d MB</string>
<string name="session_proton_checking">comprobando Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">descomprimiendo Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">descargando el módulo de RV</string>
<string name="session_vr_downloading_mb">descargando el módulo de RV · %1$d de %2$d MB</string>
<string name="session_runtime_catalog_unreachable">No se pudo acceder al catálogo del runtime. Revisa la conexión y vuelve a pulsar Jugar.</string>
<string name="session_runtime_install_failed">El runtime de Linux no se instaló. Revisa el runtime en Configuración y vuelve a pulsar Jugar.</string>
<string name="session_desktop_install_failed">El escritorio no se instaló (%1$s). Revisa la conexión y pulsa Escritorio de nuevo.</string>
<string name="session_vr_install_failed">El módulo de RV no se instaló. Revisa la conexión y pulsa Jugar en SteamVR de nuevo.</string>
<string name="session_ended_named">%1$s se detuvo inesperadamente. Comparte los registros en un informe de error o inténtalo de nuevo.</string>
<string name="session_ended_program">El programa se detuvo inesperadamente. Comparte los registros en un informe de error o inténtalo de nuevo.</string>
<string name="session_ended_desktop">El escritorio se detuvo inesperadamente. Comparte los registros en un informe de error o inténtalo de nuevo.</string>
@@ -2459,6 +2463,16 @@
<string name="hand_camera_placement">Posición de la cámara</string>
<string name="hand_camera_placement_hint">Comprueba que la cámara pueda verte antes de jugar.</string>
<string name="hand_camera_check">Comprobar</string>
<string name="vr_module_title">Módulo de RV</string>
<string name="vr_module_hint">SteamVR en gafas, Quest y Cardboard, además de seguimiento de manos con la cámara · descarga de %1$s</string>
<string name="vr_module_installed">Instalado · %1$s</string>
<string name="vr_module_downloading">Descargando el módulo de RV</string>
<string name="vr_module_failed">No se ha podido descargar el módulo de RV. Revisa la conexión y vuelve a intentarlo.</string>
<string name="vr_module_removing">Quitando el módulo de RV</string>
<string name="vr_module_busy">Detén la sesión antes de quitar el módulo de RV.</string>
<string name="vr_module_remove_failed">No se ha podido quitar el módulo de RV</string>
<string name="vr_module_uninstall_title">¿Desinstalar el módulo de RV?</string>
<string name="vr_module_uninstall_text">SteamVR y el seguimiento de manos con la cámara dejarán de funcionar hasta que lo vuelvas a descargar. SteamVR, los juegos y los ajustes se conservan.</string>
<string name="hand_camera_check_title">Posición de la cámara</string>
<string name="hand_camera_how_rear">Coloca el dispositivo de pie a 1,5-2 metros de distancia, a la altura del pecho, con la cámara trasera hacia ti. Luego entra en el encuadre con las manos extendidas.</string>
<string name="hand_camera_how_front">Coloca el dispositivo de pie a 1,5-2 metros de distancia, a la altura del pecho, con la pantalla hacia ti. Luego entra en el encuadre con las manos extendidas.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Steamissa asentamasi pelit näkyvät tässä istunnon jälkeen.</string>
<string name="games_play_steam">Pelaa Steamissa</string>
<string name="games_play_steamvr">Pelaa SteamVR:ssä</string>
<string name="games_install_play_steamvr">Lataa ja pelaa SteamVR:ssä</string>
<string name="games_launch_settings">Käynnistysasetukset</string>
<string name="games_launch">Käynnistä</string>
<string name="games_files">Pelitiedostot</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">ladataan Proton Experimentalia (ARM64) · %1$d/%2$d MB</string>
<string name="session_proton_checking">tarkistetaan Proton Experimentalia (ARM64)</string>
<string name="session_proton_unpacking">puretaan Proton Experimentalia (ARM64)</string>
<string name="session_vr_downloading">ladataan VR-moduulia</string>
<string name="session_vr_downloading_mb">ladataan VR-moduulia · %1$d/%2$d MB</string>
<string name="session_runtime_catalog_unreachable">Ajoympäristöluetteloon ei saatu yhteyttä. Tarkista yhteys ja paina Play uudelleen.</string>
<string name="session_runtime_install_failed">Linux-ajoympäristö ei asentunut. Tarkista ajoympäristö Asetuksissa ja paina Play uudelleen.</string>
<string name="session_desktop_install_failed">Työpöytä ei asentunut (%1$s). Tarkista yhteys ja paina Työpöytä uudelleen.</string>
<string name="session_vr_install_failed">VR-moduuli ei asentunut. Tarkista yhteys ja paina Pelaa SteamVR:ssä uudelleen.</string>
<string name="session_ended_named">%1$s pysähtyi odottamatta. Jaa lokit virheraportin mukana, tai yritä uudelleen.</string>
<string name="session_ended_program">Ohjelma pysähtyi odottamatta. Jaa lokit virheraportin mukana, tai yritä uudelleen.</string>
<string name="session_ended_desktop">Työpöytä pysähtyi odottamatta. Jaa lokit virheraportin mukana, tai yritä uudelleen.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Kameran sijoitus</string>
<string name="hand_camera_placement_hint">Tarkista, että kamera näkee sinut ennen pelaamista.</string>
<string name="hand_camera_check">Tarkista</string>
<string name="vr_module_title">VR-moduuli</string>
<string name="vr_module_hint">SteamVR laseilla, Questilla ja Cardboardilla sekä käsien seuranta kameralla · %1$s ladattavaa</string>
<string name="vr_module_installed">Asennettu · %1$s</string>
<string name="vr_module_downloading">Ladataan VR-moduulia</string>
<string name="vr_module_failed">VR-moduulia ei voitu ladata. Tarkista yhteys ja yritä uudelleen.</string>
<string name="vr_module_removing">Poistetaan VR-moduulia</string>
<string name="vr_module_busy">Lopeta istunto ennen VR-moduulin poistamista.</string>
<string name="vr_module_remove_failed">VR-moduulia ei voitu poistaa</string>
<string name="vr_module_uninstall_title">Poistetaanko VR-moduulin asennus?</string>
<string name="vr_module_uninstall_text">SteamVR ja käsien seuranta kameralla lakkaavat toimimasta, kunnes lataat moduulin uudelleen. Itse SteamVR, pelit ja asetukset säilyvät.</string>
<string name="hand_camera_check_title">Kameran sijoitus</string>
<string name="hand_camera_how_rear">Aseta laite pystyyn noin rinnan korkeudelle 1,5–2 metrin päähän niin, että takakamera on sinua kohti. Astu sitten näkyviin kädet ojennettuina.</string>
<string name="hand_camera_how_front">Aseta laite pystyyn noin rinnan korkeudelle 1,5–2 metrin päähän niin, että näyttö on sinua kohti. Astu sitten näkyviin kädet ojennettuina.</string>
+14
View File
@@ -1015,6 +1015,7 @@
<string name="games_empty">Les jeux installés sur Steam apparaîtront ici après la fin de la session.</string>
<string name="games_play_steam">Lancer Steam</string>
<string name="games_play_steamvr">Lancer SteamVR</string>
<string name="games_install_play_steamvr">Télécharger et lancer SteamVR</string>
<string name="games_launch_settings">Paramètres de lancement</string>
<string name="games_launch">Lancer</string>
<string name="games_files">Fichiers du jeu</string>
@@ -1352,9 +1353,12 @@
<string name="session_proton_downloading_mb">téléchargement de Proton Experimental (ARM64) · %1$d sur %2$d Mo</string>
<string name="session_proton_checking">vérification de Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">décompression de Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">téléchargement du module VR</string>
<string name="session_vr_downloading_mb">téléchargement du module VR · %1$d sur %2$d Mo</string>
<string name="session_runtime_catalog_unreachable">Impossible d\'accéder au catalogue des environnements d\'exécution. Vérifiez la connexion et appuyez à nouveau sur Play.</string>
<string name="session_runtime_install_failed">L\'environnement d\'exécution Linux ne s\'est pas installé. Vérifiez-le dans « Paramètres » et appuyez à nouveau sur Play.</string>
<string name="session_desktop_install_failed">Le bureau ne s\'est pas installé (%1$s). Vérifiez la connexion et appuyez à nouveau sur Bureau.</string>
<string name="session_vr_install_failed">Le module VR ne s\'est pas installé. Vérifiez la connexion et appuyez à nouveau sur Lancer SteamVR.</string>
<string name="session_ended_named">%1$s s\'est arrêté de manière inattendue. Partagez les journaux dans un rapport de bug, ou réessayez.</string>
<string name="session_ended_program">Le programme s\'est arrêté de manière inattendue. Partagez les journaux dans un rapport de bug, ou réessayez.</string>
<string name="session_ended_desktop">Le bureau s\'est arrêté de manière inattendue. Partagez les journaux dans un rapport de bug, ou réessayez.</string>
@@ -2470,6 +2474,16 @@
<string name="hand_camera_placement">Positionnement de la caméra</string>
<string name="hand_camera_placement_hint">Vérifiez que la caméra peut vous voir avant de jouer.</string>
<string name="hand_camera_check">Vérifier</string>
<string name="vr_module_title">Module VR</string>
<string name="vr_module_hint">SteamVR sur lunettes, Quest et Cardboard, et suivi des mains par la caméra · %1$s à télécharger</string>
<string name="vr_module_installed">Installé · %1$s</string>
<string name="vr_module_downloading">Téléchargement du module VR</string>
<string name="vr_module_failed">Le module VR n\'a pas pu être téléchargé. Vérifiez la connexion et réessayez.</string>
<string name="vr_module_removing">Suppression du module VR</string>
<string name="vr_module_busy">Arrêtez la session avant de supprimer le module VR.</string>
<string name="vr_module_remove_failed">Le module VR n\'a pas pu être supprimé</string>
<string name="vr_module_uninstall_title">Désinstaller le module VR ?</string>
<string name="vr_module_uninstall_text">SteamVR et le suivi des mains par la caméra ne fonctionneront plus tant que vous ne l\'aurez pas retéléchargé. SteamVR lui-même, les jeux et les paramètres sont conservés.</string>
<string name="hand_camera_check_title">Positionnement de la caméra</string>
<string name="hand_camera_how_rear">Installez l\'appareil debout, entre 1,5 et 2 mètres de vous, à hauteur de poitrine, caméra arrière tournée vers vous. Puis entrez dans le champ, les mains tendues.</string>
<string name="hand_camera_how_front">Installez l\'appareil debout, entre 1,5 et 2 mètres de vous, à hauteur de poitrine, écran tourné vers vous. Puis entrez dans le champ, les mains tendues.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Steam में इंस्टॉल किए गेम सेशन के बाद यहां दिखते हैं।</string>
<string name="games_play_steam">Steam चलाएं</string>
<string name="games_play_steamvr">SteamVR चलाएं</string>
<string name="games_install_play_steamvr">डाउनलोड करें और SteamVR चलाएं</string>
<string name="games_launch_settings">लॉन्च सेटिंग</string>
<string name="games_launch">लॉन्च करें</string>
<string name="games_files">गेम फ़ाइलें</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">Proton Experimental (ARM64) डाउनलोड हो रहा है · %2$d में से %1$d MB</string>
<string name="session_proton_checking">Proton Experimental (ARM64) जांचा जा रहा है</string>
<string name="session_proton_unpacking">Proton Experimental (ARM64) अनपैक हो रहा है</string>
<string name="session_vr_downloading">VR मॉड्यूल डाउनलोड हो रहा है</string>
<string name="session_vr_downloading_mb">VR मॉड्यूल डाउनलोड हो रहा है · %2$d में से %1$d MB</string>
<string name="session_runtime_catalog_unreachable">रनटाइम कैटलॉग तक नहीं पहुंचा जा सका। कनेक्शन जांचें और फिर से Play दबाएं।</string>
<string name="session_runtime_install_failed">Linux रनटाइम इंस्टॉल नहीं हुआ। सेटअप में रनटाइम जांचें और फिर से Play दबाएं।</string>
<string name="session_desktop_install_failed">डेस्कटॉप इंस्टॉल नहीं हुआ (%1$s)। कनेक्शन जांचें और फिर से Desktop दबाएं।</string>
<string name="session_vr_install_failed">VR मॉड्यूल इंस्टॉल नहीं हुआ। कनेक्शन जांचें और फिर से SteamVR चलाएं दबाएं।</string>
<string name="session_ended_named">%1$s अचानक बंद हो गया। बग रिपोर्ट के साथ लॉग शेयर करें, या फिर कोशिश करें।</string>
<string name="session_ended_program">प्रोग्राम अचानक बंद हो गया। बग रिपोर्ट के साथ लॉग शेयर करें, या फिर कोशिश करें।</string>
<string name="session_ended_desktop">डेस्कटॉप अचानक बंद हो गया। बग रिपोर्ट के साथ लॉग शेयर करें, या फिर कोशिश करें।</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">कैमरे की स्थिति</string>
<string name="hand_camera_placement_hint">खेलने से पहले जांच लें कि कैमरा आपको देख पा रहा है।</string>
<string name="hand_camera_check">जांचें</string>
<string name="vr_module_title">VR मॉड्यूल</string>
<string name="vr_module_hint">ग्लास, Quest और Cardboard पर SteamVR, साथ में कैमरा से हैंड ट्रैकिंग · %1$s डाउनलोड</string>
<string name="vr_module_installed">इंस्टॉल है · %1$s</string>
<string name="vr_module_downloading">VR मॉड्यूल डाउनलोड हो रहा है</string>
<string name="vr_module_failed">VR मॉड्यूल डाउनलोड नहीं हो सका। कनेक्शन जांचें और फिर से कोशिश करें।</string>
<string name="vr_module_removing">VR मॉड्यूल हटाया जा रहा है</string>
<string name="vr_module_busy">VR मॉड्यूल हटाने से पहले सत्र बंद करें।</string>
<string name="vr_module_remove_failed">VR मॉड्यूल हटाया नहीं जा सका</string>
<string name="vr_module_uninstall_title">VR मॉड्यूल अनइंस्टॉल करें?</string>
<string name="vr_module_uninstall_text">जब तक आप इसे फिर से डाउनलोड नहीं करते, SteamVR और कैमरा से हैंड ट्रैकिंग काम नहीं करेंगे। SteamVR, गेम और सेटिंग्स बनी रहती हैं।</string>
<string name="hand_camera_check_title">कैमरे की स्थिति</string>
<string name="hand_camera_how_rear">डिवाइस को करीब सीने की ऊंचाई पर, 1.5 से 2 मीटर दूर खड़ा करें, जिसमें रियर कैमरा आपकी ओर हो। फिर हाथ फैलाकर नज़र के दायरे में आएं।</string>
<string name="hand_camera_how_front">डिवाइस को करीब सीने की ऊंचाई पर, 1.5 से 2 मीटर दूर खड़ा करें, जिसमें स्क्रीन आपकी ओर हो। फिर हाथ फैलाकर नज़र के दायरे में आएं।</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">A Steamben telepített játékok a munkamenet után itt jelennek meg.</string>
<string name="games_play_steam">Steam elindítása</string>
<string name="games_play_steamvr">SteamVR elindítása</string>
<string name="games_install_play_steamvr">Letöltés és SteamVR indítása</string>
<string name="games_launch_settings">Indítási beállítások</string>
<string name="games_launch">Indítás</string>
<string name="games_files">Játékfájlok</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">a Proton Experimental (ARM64) letöltése · %1$d/%2$d MB</string>
<string name="session_proton_checking">a Proton Experimental (ARM64) ellenőrzése</string>
<string name="session_proton_unpacking">a Proton Experimental (ARM64) kicsomagolása</string>
<string name="session_vr_downloading">a VR-modul letöltése</string>
<string name="session_vr_downloading_mb">a VR-modul letöltése · %1$d/%2$d MB</string>
<string name="session_runtime_catalog_unreachable">Nem sikerült elérni a futtatókörnyezet-katalógust. Ellenőrizze a kapcsolatot, és nyomja meg újra a Játék gombot.</string>
<string name="session_runtime_install_failed">A Linux futtatókörnyezet telepítése sikertelen. Ellenőrizze a futtatókörnyezetet a Beállításban, és nyomja meg újra a Játék gombot.</string>
<string name="session_desktop_install_failed">Az asztal telepítése sikertelen (%1$s). Ellenőrizze a kapcsolatot, és nyomja meg újra az Asztal gombot.</string>
<string name="session_vr_install_failed">A VR-modul telepítése sikertelen. Ellenőrizze a kapcsolatot, és nyomja meg újra a SteamVR elindítása gombot.</string>
<string name="session_ended_named">%1$s váratlanul leállt. Ossza meg a naplókat egy hibajelentésben, vagy próbálja újra.</string>
<string name="session_ended_program">A program váratlanul leállt. Ossza meg a naplókat egy hibajelentésben, vagy próbálja újra.</string>
<string name="session_ended_desktop">Az asztal váratlanul leállt. Ossza meg a naplókat egy hibajelentésben, vagy próbálja újra.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Kamera elhelyezése</string>
<string name="hand_camera_placement_hint">Játék előtt ellenőrizze, hogy a kamera látja-e Önt.</string>
<string name="hand_camera_check">Ellenőrzés</string>
<string name="vr_module_title">VR-modul</string>
<string name="vr_module_hint">SteamVR szemüvegen, Questen és Cardboardon, valamint kamerás kézkövetés · %1$s letöltés</string>
<string name="vr_module_installed">Telepítve · %1$s</string>
<string name="vr_module_downloading">A VR-modul letöltése</string>
<string name="vr_module_failed">A VR-modult nem sikerült letölteni. Ellenőrizze a kapcsolatot, és próbálja újra.</string>
<string name="vr_module_removing">A VR-modul eltávolítása</string>
<string name="vr_module_busy">A VR-modul eltávolítása előtt állítsa le a munkamenetet.</string>
<string name="vr_module_remove_failed">A VR-modult nem sikerült eltávolítani</string>
<string name="vr_module_uninstall_title">Eltávolítja a VR-modult?</string>
<string name="vr_module_uninstall_text">A SteamVR és a kamerás kézkövetés nem működik, amíg újra le nem tölti. Maga a SteamVR, a játékok és a beállítások megmaradnak.</string>
<string name="hand_camera_check_title">Kamera elhelyezése</string>
<string name="hand_camera_how_rear">Állítsa az eszközt függőlegesen 1,5–2 méter távolságra, nagyjából mellkasmagasságban úgy, hogy a hátlapi kamera Ön felé nézzen. Ezután lépjen a látótérbe kinyújtott kezekkel.</string>
<string name="hand_camera_how_front">Állítsa az eszközt függőlegesen 1,5–2 méter távolságra, nagyjából mellkasmagasságban úgy, hogy a képernyő Ön felé nézzen. Ezután lépjen a látótérbe kinyújtott kezekkel.</string>
+14
View File
@@ -1006,6 +1006,7 @@
<string name="games_empty">Gim yang Anda instal di Steam akan muncul di sini setelah sesi.</string>
<string name="games_play_steam">Mainkan Steam</string>
<string name="games_play_steamvr">Mainkan SteamVR</string>
<string name="games_install_play_steamvr">Unduh &amp; mainkan SteamVR</string>
<string name="games_launch_settings">Setelan peluncuran</string>
<string name="games_launch">Luncurkan</string>
<string name="games_files">File gim</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">mengunduh Proton Experimental (ARM64) · %1$d dari %2$d MB</string>
<string name="session_proton_checking">memeriksa Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">mengekstrak Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">mengunduh modul VR</string>
<string name="session_vr_downloading_mb">mengunduh modul VR · %1$d dari %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Tidak dapat menghubungi katalog runtime. Periksa koneksi dan tekan Mainkan lagi.</string>
<string name="session_runtime_install_failed">Runtime Linux tidak terinstal. Periksa runtime di Penyiapan dan tekan Mainkan lagi.</string>
<string name="session_desktop_install_failed">Desktop tidak terinstal (%1$s). Periksa koneksi dan tekan Desktop lagi.</string>
<string name="session_vr_install_failed">Modul VR tidak terinstal. Periksa koneksi dan tekan Mainkan SteamVR lagi.</string>
<string name="session_ended_named">%1$s berhenti secara tak terduga. Bagikan log bersama laporan bug, atau coba lagi.</string>
<string name="session_ended_program">Program berhenti secara tak terduga. Bagikan log bersama laporan bug, atau coba lagi.</string>
<string name="session_ended_desktop">Desktop berhenti secara tak terduga. Bagikan log bersama laporan bug, atau coba lagi.</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">Posisi kamera</string>
<string name="hand_camera_placement_hint">Pastikan kamera bisa melihat Anda sebelum bermain.</string>
<string name="hand_camera_check">Periksa</string>
<string name="vr_module_title">Modul VR</string>
<string name="vr_module_hint">SteamVR di kacamata, Quest, dan Cardboard, plus pelacakan tangan dengan kamera · unduhan %1$s</string>
<string name="vr_module_installed">Terinstal · %1$s</string>
<string name="vr_module_downloading">Mengunduh modul VR</string>
<string name="vr_module_failed">Modul VR tidak dapat diunduh. Periksa koneksi dan coba lagi.</string>
<string name="vr_module_removing">Menghapus modul VR</string>
<string name="vr_module_busy">Hentikan sesi sebelum menghapus modul VR.</string>
<string name="vr_module_remove_failed">Modul VR tidak dapat dihapus</string>
<string name="vr_module_uninstall_title">Hapus instalasi modul VR?</string>
<string name="vr_module_uninstall_text">SteamVR dan pelacakan tangan dengan kamera berhenti berfungsi sampai Anda mengunduhnya lagi. SteamVR itu sendiri, game, dan setelan tetap disimpan.</string>
<string name="hand_camera_check_title">Posisi kamera</string>
<string name="hand_camera_how_rear">Dirikan perangkat sejauh 1,5 hingga 2 meter kira-kira setinggi dada, dengan kamera belakang menghadap Anda. Lalu masuk ke bidang pandang dengan tangan terentang.</string>
<string name="hand_camera_how_front">Dirikan perangkat sejauh 1,5 hingga 2 meter kira-kira setinggi dada, dengan layar menghadap Anda. Lalu masuk ke bidang pandang dengan tangan terentang.</string>
+14
View File
@@ -1007,6 +1007,7 @@
<string name="games_empty">I giochi che installi in Steam compaiono qui dopo la sessione.</string>
<string name="games_play_steam">Gioca su Steam</string>
<string name="games_play_steamvr">Gioca su SteamVR</string>
<string name="games_install_play_steamvr">Scarica e gioca su SteamVR</string>
<string name="games_launch_settings">Impostazioni di avvio</string>
<string name="games_launch">Avvia</string>
<string name="games_files">File di gioco</string>
@@ -1344,9 +1345,12 @@
<string name="session_proton_downloading_mb">download di Proton Experimental (ARM64) · %1$d di %2$d MB</string>
<string name="session_proton_checking">verifica di Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">estrazione di Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">download del modulo VR</string>
<string name="session_vr_downloading_mb">download del modulo VR · %1$d di %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Impossibile raggiungere il catalogo dei runtime. Controlla la connessione e premi di nuovo Gioca.</string>
<string name="session_runtime_install_failed">Il runtime Linux non è stato installato. Controlla il runtime in Configurazione e premi di nuovo Gioca.</string>
<string name="session_desktop_install_failed">Il desktop non è stato installato (%1$s). Controlla la connessione e premi di nuovo Desktop.</string>
<string name="session_vr_install_failed">Il modulo VR non è stato installato. Controlla la connessione e premi di nuovo Gioca su SteamVR.</string>
<string name="session_ended_named">%1$s si è interrotto in modo imprevisto. Condividi i log in una segnalazione di bug o riprova.</string>
<string name="session_ended_program">Il programma si è interrotto in modo imprevisto. Condividi i log in una segnalazione di bug o riprova.</string>
<string name="session_ended_desktop">Il desktop si è interrotto in modo imprevisto. Condividi i log in una segnalazione di bug o riprova.</string>
@@ -2462,6 +2466,16 @@
<string name="hand_camera_placement">Posizione della fotocamera</string>
<string name="hand_camera_placement_hint">Controlla che la fotocamera possa vederti prima di giocare.</string>
<string name="hand_camera_check">Controlla</string>
<string name="vr_module_title">Modulo VR</string>
<string name="vr_module_hint">SteamVR su occhiali, Quest e Cardboard, più il tracciamento delle mani con la fotocamera · download di %1$s</string>
<string name="vr_module_installed">Installato · %1$s</string>
<string name="vr_module_downloading">Download del modulo VR</string>
<string name="vr_module_failed">Impossibile scaricare il modulo VR. Controlla la connessione e riprova.</string>
<string name="vr_module_removing">Rimozione del modulo VR</string>
<string name="vr_module_busy">Interrompi la sessione prima di rimuovere il modulo VR.</string>
<string name="vr_module_remove_failed">Impossibile rimuovere il modulo VR</string>
<string name="vr_module_uninstall_title">Disinstallare il modulo VR?</string>
<string name="vr_module_uninstall_text">SteamVR e il tracciamento delle mani con la fotocamera smettono di funzionare finché non lo scarichi di nuovo. SteamVR stesso, i giochi e le impostazioni vengono mantenuti.</string>
<string name="hand_camera_check_title">Posizione della fotocamera</string>
<string name="hand_camera_how_rear">Metti il dispositivo in piedi a una distanza di 1,5-2 metri, all\'altezza del petto, con la fotocamera posteriore rivolta verso di te. Poi entra nell\'inquadratura con le mani tese.</string>
<string name="hand_camera_how_front">Metti il dispositivo in piedi a una distanza di 1,5-2 metri, all\'altezza del petto, con lo schermo rivolto verso di te. Poi entra nell\'inquadratura con le mani tese.</string>
+14
View File
@@ -1006,6 +1006,7 @@
<string name="games_empty">Steamでインストールされたゲームは、セッション終了後にここに表示されます。</string>
<string name="games_play_steam">Steamを実行</string>
<string name="games_play_steamvr">SteamVRを実行</string>
<string name="games_install_play_steamvr">ダウンロードしてSteamVRを実行</string>
<string name="games_launch_settings">起動設定</string>
<string name="games_launch">起動</string>
<string name="games_files">ゲームファイル</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">Proton Experimental(ARM64)をダウンロード中 · %1$d / %2$d MB</string>
<string name="session_proton_checking">Proton Experimental(ARM64)を確認中</string>
<string name="session_proton_unpacking">Proton Experimental(ARM64)を展開中</string>
<string name="session_vr_downloading">VRモジュールをダウンロード中</string>
<string name="session_vr_downloading_mb">VRモジュールをダウンロード中 · %1$d / %2$d MB</string>
<string name="session_runtime_catalog_unreachable">実行環境のカタログに接続できませんでした。接続を確認して、もう一度Playをタップしてください。</string>
<string name="session_runtime_install_failed">Linux実行環境をインストールできませんでした。「設定」で実行環境を確認して、もう一度Playをタップしてください。</string>
<string name="session_desktop_install_failed">デスクトップをインストールできませんでした(%1$s)。接続を確認して、もう一度「デスクトップ」をタップしてください。</string>
<string name="session_vr_install_failed">VRモジュールをインストールできませんでした。接続を確認して、もう一度「SteamVRを実行」をタップしてください。</string>
<string name="session_ended_named">%1$sが予期せず停止しました。バグレポートにログを添付して共有するか、もう一度お試しください。</string>
<string name="session_ended_program">プログラムが予期せず停止しました。バグレポートにログを添付して共有するか、もう一度お試しください。</string>
<string name="session_ended_desktop">デスクトップが予期せず停止しました。バグレポートにログを添付して共有するか、もう一度お試しください。</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">カメラの位置</string>
<string name="hand_camera_placement_hint">プレイ前に、カメラにあなたが映っているか確認してください。</string>
<string name="hand_camera_check">確認</string>
<string name="vr_module_title">VRモジュール</string>
<string name="vr_module_hint">グラス、Quest、CardboardでのSteamVRと、カメラによるハンドトラッキング · %1$sのダウンロード</string>
<string name="vr_module_installed">インストール済み · %1$s</string>
<string name="vr_module_downloading">VRモジュールをダウンロード中</string>
<string name="vr_module_failed">VRモジュールをダウンロードできませんでした。接続を確認して、もう一度お試しください。</string>
<string name="vr_module_removing">VRモジュールを削除中</string>
<string name="vr_module_busy">VRモジュールを削除する前にセッションを停止してください。</string>
<string name="vr_module_remove_failed">VRモジュールを削除できませんでした</string>
<string name="vr_module_uninstall_title">VRモジュールをアンインストールしますか?</string>
<string name="vr_module_uninstall_text">もう一度ダウンロードするまで、SteamVRとカメラによるハンドトラッキングは使えなくなります。SteamVR本体、ゲーム、設定はそのまま残ります。</string>
<string name="hand_camera_check_title">カメラの位置</string>
<string name="hand_camera_how_rear">デバイスを胸の高さくらいで1.5〜2m離れたところに立て、背面カメラがあなたの方を向くようにしてください。そのあと、手を広げて画面内に入ってください。</string>
<string name="hand_camera_how_front">デバイスを胸の高さくらいで1.5〜2m離れたところに立て、画面があなたの方を向くようにしてください。そのあと、手を広げて画面内に入ってください。</string>
+14
View File
@@ -1006,6 +1006,7 @@
<string name="games_empty">Steam에서 설치한 게임은 세션 종료 후 여기에 표시됩니다.</string>
<string name="games_play_steam">Steam 실행</string>
<string name="games_play_steamvr">SteamVR 실행</string>
<string name="games_install_play_steamvr">다운로드 후 SteamVR 실행</string>
<string name="games_launch_settings">실행 설정</string>
<string name="games_launch">실행</string>
<string name="games_files">게임 파일</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">Proton Experimental(ARM64) 다운로드 중 · %1$d/%2$d MB</string>
<string name="session_proton_checking">Proton Experimental(ARM64) 확인 중</string>
<string name="session_proton_unpacking">Proton Experimental(ARM64) 압축 해제 중</string>
<string name="session_vr_downloading">VR 모듈 다운로드 중</string>
<string name="session_vr_downloading_mb">VR 모듈 다운로드 중 · %1$d/%2$d MB</string>
<string name="session_runtime_catalog_unreachable">런타임 카탈로그에 연결할 수 없습니다. 연결을 확인한 후 \"Steam 실행\"을 다시 누르세요.</string>
<string name="session_runtime_install_failed">Linux 런타임이 설치되지 않았습니다. \"설정\"에서 런타임을 확인한 후 \"Steam 실행\"을 다시 누르세요.</string>
<string name="session_desktop_install_failed">데스크톱이 설치되지 않았습니다(%1$s). 연결을 확인한 후 \"데스크톱\"을 다시 누르세요.</string>
<string name="session_vr_install_failed">VR 모듈이 설치되지 않았습니다. 연결을 확인한 후 \"SteamVR 실행\"을 다시 누르세요.</string>
<string name="session_ended_named">%1$s이(가) 예기치 않게 중지되었습니다. 버그 리포트와 함께 로그를 공유하거나 다시 시도하세요.</string>
<string name="session_ended_program">프로그램이 예기치 않게 중지되었습니다. 버그 리포트와 함께 로그를 공유하거나 다시 시도하세요.</string>
<string name="session_ended_desktop">데스크톱이 예기치 않게 중지되었습니다. 버그 리포트와 함께 로그를 공유하거나 다시 시도하세요.</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">카메라 위치</string>
<string name="hand_camera_placement_hint">플레이하기 전에 카메라에 당신이 보이는지 확인하세요.</string>
<string name="hand_camera_check">확인</string>
<string name="vr_module_title">VR 모듈</string>
<string name="vr_module_hint">글래스, Quest, Cardboard에서 SteamVR 실행 및 카메라 손 추적 · %1$s 다운로드</string>
<string name="vr_module_installed">설치됨 · %1$s</string>
<string name="vr_module_downloading">VR 모듈 다운로드 중</string>
<string name="vr_module_failed">VR 모듈을 다운로드할 수 없습니다. 연결을 확인한 후 다시 시도하세요.</string>
<string name="vr_module_removing">VR 모듈 제거 중</string>
<string name="vr_module_busy">VR 모듈을 제거하기 전에 세션을 중지하세요.</string>
<string name="vr_module_remove_failed">VR 모듈을 제거할 수 없습니다</string>
<string name="vr_module_uninstall_title">VR 모듈을 제거하시겠습니까?</string>
<string name="vr_module_uninstall_text">다시 다운로드할 때까지 SteamVR과 카메라 손 추적이 작동하지 않습니다. SteamVR 자체와 게임, 설정은 유지됩니다.</string>
<string name="hand_camera_check_title">카메라 위치</string>
<string name="hand_camera_how_rear">기기를 가슴 높이쯤에서 1.5~2m 떨어진 곳에 세우고, 후면 카메라가 당신을 향하게 하세요. 그런 다음 손을 벌리고 화면 안으로 들어오세요.</string>
<string name="hand_camera_how_front">기기를 가슴 높이쯤에서 1.5~2m 떨어진 곳에 세우고, 화면이 당신을 향하게 하세요. 그런 다음 손을 벌리고 화면 안으로 들어오세요.</string>
+14
View File
@@ -1006,6 +1006,7 @@
<string name="games_empty">Permainan yang anda pasang dalam Steam muncul di sini selepas sesi.</string>
<string name="games_play_steam">Main Steam</string>
<string name="games_play_steamvr">Main SteamVR</string>
<string name="games_install_play_steamvr">Muat turun &amp; main SteamVR</string>
<string name="games_launch_settings">Tetapan pelancaran</string>
<string name="games_launch">Lancarkan</string>
<string name="games_files">Fail permainan</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">memuat turun Proton Experimental (ARM64) · %1$d daripada %2$d MB</string>
<string name="session_proton_checking">menyemak Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">menyahpak Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">memuat turun modul VR</string>
<string name="session_vr_downloading_mb">memuat turun modul VR · %1$d daripada %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Tidak dapat menghubungi katalog masa jalan. Semak sambungan dan tekan Main semula.</string>
<string name="session_runtime_install_failed">Masa jalan Linux tidak berjaya dipasang. Semak masa jalan dalam Persediaan dan tekan Main semula.</string>
<string name="session_desktop_install_failed">Desktop tidak berjaya dipasang (%1$s). Semak sambungan dan tekan Desktop semula.</string>
<string name="session_vr_install_failed">Modul VR tidak berjaya dipasang. Semak sambungan dan tekan Main SteamVR semula.</string>
<string name="session_ended_named">%1$s terhenti secara tidak dijangka. Kongsi log dengan laporan pepijat, atau cuba lagi.</string>
<string name="session_ended_program">Program terhenti secara tidak dijangka. Kongsi log dengan laporan pepijat, atau cuba lagi.</string>
<string name="session_ended_desktop">Desktop terhenti secara tidak dijangka. Kongsi log dengan laporan pepijat, atau cuba lagi.</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">Kedudukan kamera</string>
<string name="hand_camera_placement_hint">Pastikan kamera boleh melihat anda sebelum bermain.</string>
<string name="hand_camera_check">Semak</string>
<string name="vr_module_title">Modul VR</string>
<string name="vr_module_hint">SteamVR pada cermin mata, Quest dan Cardboard, serta penjejakan tangan dengan kamera · muat turun %1$s</string>
<string name="vr_module_installed">Dipasang · %1$s</string>
<string name="vr_module_downloading">Memuat turun modul VR</string>
<string name="vr_module_failed">Modul VR tidak dapat dimuat turun. Semak sambungan dan cuba lagi.</string>
<string name="vr_module_removing">Mengalih keluar modul VR</string>
<string name="vr_module_busy">Hentikan sesi sebelum mengalih keluar modul VR.</string>
<string name="vr_module_remove_failed">Modul VR tidak dapat dialih keluar</string>
<string name="vr_module_uninstall_title">Nyahpasang modul VR?</string>
<string name="vr_module_uninstall_text">SteamVR dan penjejakan tangan dengan kamera berhenti berfungsi sehingga anda memuat turunnya semula. SteamVR sendiri, permainan dan tetapan dikekalkan.</string>
<string name="hand_camera_check_title">Kedudukan kamera</string>
<string name="hand_camera_how_rear">Dirikan peranti sejauh 1.5 hingga 2 meter kira-kira pada paras dada, dengan kamera belakang menghadap anda. Kemudian masuk ke pandangan dengan tangan terhulur.</string>
<string name="hand_camera_how_front">Dirikan peranti sejauh 1.5 hingga 2 meter kira-kira pada paras dada, dengan skrin menghadap anda. Kemudian masuk ke pandangan dengan tangan terhulur.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Spill du installerer i Steam, vises her etter sesjonen.</string>
<string name="games_play_steam">Spill Steam</string>
<string name="games_play_steamvr">Spill SteamVR</string>
<string name="games_install_play_steamvr">Last ned og spill SteamVR</string>
<string name="games_launch_settings">Startinnstillinger</string>
<string name="games_launch">Start</string>
<string name="games_files">Spillfiler</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">laster ned Proton Experimental (ARM64) · %1$d av %2$d MB</string>
<string name="session_proton_checking">kontrollerer Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">pakker ut Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">laster ned VR-modulen</string>
<string name="session_vr_downloading_mb">laster ned VR-modulen · %1$d av %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Kunne ikke nå kjøretidskatalogen. Kontroller tilkoblingen og trykk Spill igjen.</string>
<string name="session_runtime_install_failed">Linux-kjøretiden ble ikke installert. Kontroller kjøretiden i Oppsett og trykk Spill igjen.</string>
<string name="session_desktop_install_failed">Skrivebordet ble ikke installert (%1$s). Kontroller tilkoblingen og trykk Skrivebord igjen.</string>
<string name="session_vr_install_failed">VR-modulen ble ikke installert. Kontroller tilkoblingen og trykk Spill SteamVR igjen.</string>
<string name="session_ended_named">%1$s stoppet uventet. Del loggene med en feilrapport, eller prøv igjen.</string>
<string name="session_ended_program">Programmet stoppet uventet. Del loggene med en feilrapport, eller prøv igjen.</string>
<string name="session_ended_desktop">Skrivebordet stoppet uventet. Del loggene med en feilrapport, eller prøv igjen.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Kameraplassering</string>
<string name="hand_camera_placement_hint">Sjekk at kameraet kan se deg før du spiller.</string>
<string name="hand_camera_check">Sjekk</string>
<string name="vr_module_title">VR-modul</string>
<string name="vr_module_hint">SteamVR på briller, Quest og Cardboard, pluss håndsporing med kameraet · %1$s nedlasting</string>
<string name="vr_module_installed">Installert · %1$s</string>
<string name="vr_module_downloading">Laster ned VR-modulen</string>
<string name="vr_module_failed">VR-modulen kunne ikke lastes ned. Kontroller tilkoblingen og prøv igjen.</string>
<string name="vr_module_removing">Fjerner VR-modulen</string>
<string name="vr_module_busy">Stopp økten før du fjerner VR-modulen.</string>
<string name="vr_module_remove_failed">VR-modulen kunne ikke fjernes</string>
<string name="vr_module_uninstall_title">Avinstallere VR-modulen?</string>
<string name="vr_module_uninstall_text">SteamVR og håndsporing med kameraet slutter å virke til du laster den ned igjen. Selve SteamVR, spill og innstillinger beholdes.</string>
<string name="hand_camera_check_title">Kameraplassering</string>
<string name="hand_camera_how_rear">Still enheten opp 1,5 til 2 meter unna i omtrent brysthøyde, med det bakre kameraet vendt mot deg. Tre så inn i bildet med hendene ute.</string>
<string name="hand_camera_how_front">Still enheten opp 1,5 til 2 meter unna i omtrent brysthøyde, med skjermen vendt mot deg. Tre så inn i bildet med hendene ute.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Games die je in Steam installeert, verschijnen hier na de sessie.</string>
<string name="games_play_steam">Steam spelen</string>
<string name="games_play_steamvr">SteamVR spelen</string>
<string name="games_install_play_steamvr">Downloaden en SteamVR spelen</string>
<string name="games_launch_settings">Opstartinstellingen</string>
<string name="games_launch">Starten</string>
<string name="games_files">Gamebestanden</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">Proton Experimental (ARM64) downloaden · %1$d van %2$d MB</string>
<string name="session_proton_checking">Proton Experimental (ARM64) controleren</string>
<string name="session_proton_unpacking">Proton Experimental (ARM64) uitpakken</string>
<string name="session_vr_downloading">VR-module downloaden</string>
<string name="session_vr_downloading_mb">VR-module downloaden · %1$d van %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Kan de runtimecatalogus niet bereiken. Controleer de verbinding en druk opnieuw op Spelen.</string>
<string name="session_runtime_install_failed">De Linux-runtime is niet geïnstalleerd. Controleer de runtime bij Installatie en druk opnieuw op Spelen.</string>
<string name="session_desktop_install_failed">De desktop is niet geïnstalleerd (%1$s). Controleer de verbinding en druk opnieuw op Desktop.</string>
<string name="session_vr_install_failed">De VR-module is niet geïnstalleerd. Controleer de verbinding en druk opnieuw op SteamVR spelen.</string>
<string name="session_ended_named">%1$s is onverwacht gestopt. Deel de logs in een bugrapport of probeer het opnieuw.</string>
<string name="session_ended_program">Het programma is onverwacht gestopt. Deel de logs in een bugrapport of probeer het opnieuw.</string>
<string name="session_ended_desktop">De desktop is onverwacht gestopt. Deel de logs in een bugrapport of probeer het opnieuw.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Cameraplaatsing</string>
<string name="hand_camera_placement_hint">Controleer of de camera je kan zien voordat je gaat spelen.</string>
<string name="hand_camera_check">Controleren</string>
<string name="vr_module_title">VR-module</string>
<string name="vr_module_hint">SteamVR op brillen, Quest en Cardboard, plus handtracking met de camera · %1$s download</string>
<string name="vr_module_installed">Geïnstalleerd · %1$s</string>
<string name="vr_module_downloading">VR-module downloaden</string>
<string name="vr_module_failed">De VR-module kon niet worden gedownload. Controleer de verbinding en probeer het opnieuw.</string>
<string name="vr_module_removing">VR-module verwijderen</string>
<string name="vr_module_busy">Stop de sessie voordat je de VR-module verwijdert.</string>
<string name="vr_module_remove_failed">De VR-module kon niet worden verwijderd</string>
<string name="vr_module_uninstall_title">De VR-module verwijderen?</string>
<string name="vr_module_uninstall_text">SteamVR en handtracking met de camera werken niet meer totdat je de module opnieuw downloadt. SteamVR zelf, games en instellingen blijven behouden.</string>
<string name="hand_camera_check_title">Cameraplaatsing</string>
<string name="hand_camera_how_rear">Zet het apparaat rechtop op 1,5 tot 2 meter afstand, op borsthoogte, met de achtercamera naar je toe. Stap dan in beeld met je handen vooruit.</string>
<string name="hand_camera_how_front">Zet het apparaat rechtop op 1,5 tot 2 meter afstand, op borsthoogte, met het scherm naar je toe. Stap dan in beeld met je handen vooruit.</string>
+14
View File
@@ -1024,6 +1024,7 @@
<string name="games_empty">Gry, które instalujesz w Steam, pojawią się tutaj po sesji.</string>
<string name="games_play_steam">Zagraj w Steam</string>
<string name="games_play_steamvr">Zagraj w SteamVR</string>
<string name="games_install_play_steamvr">Pobierz i zagraj w SteamVR</string>
<string name="games_launch_settings">Ustawienia uruchamiania</string>
<string name="games_launch">Uruchom</string>
<string name="games_files">Pliki gry</string>
@@ -1368,9 +1369,12 @@
<string name="session_proton_downloading_mb">pobieranie Proton Experimental (ARM64) · %1$d z %2$d MB</string>
<string name="session_proton_checking">sprawdzanie Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">rozpakowywanie Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">pobieranie modułu VR</string>
<string name="session_vr_downloading_mb">pobieranie modułu VR · %1$d z %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Nie udało się połączyć z katalogiem środowisk. Sprawdź połączenie i ponownie naciśnij Graj.</string>
<string name="session_runtime_install_failed">Środowisko Linux nie zostało zainstalowane. Sprawdź środowisko w sekcji Konfiguracja i ponownie naciśnij Graj.</string>
<string name="session_desktop_install_failed">Pulpit nie został zainstalowany (%1$s). Sprawdź połączenie i ponownie naciśnij Pulpit.</string>
<string name="session_vr_install_failed">Moduł VR nie został zainstalowany. Sprawdź połączenie i ponownie naciśnij Zagraj w SteamVR.</string>
<string name="session_ended_named">%1$s – nieoczekiwane zatrzymanie. Udostępnij logi w zgłoszeniu błędu lub spróbuj ponownie.</string>
<string name="session_ended_program">Program nieoczekiwanie się zatrzymał. Udostępnij logi w zgłoszeniu błędu lub spróbuj ponownie.</string>
<string name="session_ended_desktop">Pulpit nieoczekiwanie się zatrzymał. Udostępnij logi w zgłoszeniu błędu lub spróbuj ponownie.</string>
@@ -2501,6 +2505,16 @@
<string name="hand_camera_placement">Położenie kamery</string>
<string name="hand_camera_placement_hint">Sprawdź, czy kamera Cię widzi, zanim zaczniesz grać.</string>
<string name="hand_camera_check">Sprawdź</string>
<string name="vr_module_title">Moduł VR</string>
<string name="vr_module_hint">SteamVR w okularach, Quest i Cardboard oraz śledzenie dłoni kamerą · pobranie %1$s</string>
<string name="vr_module_installed">Zainstalowano · %1$s</string>
<string name="vr_module_downloading">Pobieranie modułu VR</string>
<string name="vr_module_failed">Nie udało się pobrać modułu VR. Sprawdź połączenie i spróbuj ponownie.</string>
<string name="vr_module_removing">Usuwanie modułu VR</string>
<string name="vr_module_busy">Zatrzymaj sesję przed usunięciem modułu VR.</string>
<string name="vr_module_remove_failed">Nie udało się usunąć modułu VR</string>
<string name="vr_module_uninstall_title">Odinstalować moduł VR?</string>
<string name="vr_module_uninstall_text">SteamVR i śledzenie dłoni kamerą przestaną działać, dopóki nie pobierzesz go ponownie. Sam SteamVR, gry i ustawienia zostaną zachowane.</string>
<string name="hand_camera_check_title">Położenie kamery</string>
<string name="hand_camera_how_rear">Ustaw urządzenie pionowo w odległości od 1,5 do 2 metrów, mniej więcej na wysokości klatki piersiowej, tylną kamerą skierowaną w Twoją stronę. Następnie wejdź w kadr z wyciągniętymi rękami.</string>
<string name="hand_camera_how_front">Ustaw urządzenie pionowo w odległości od 1,5 do 2 metrów, mniej więcej na wysokości klatki piersiowej, ekranem skierowanym w Twoją stronę. Następnie wejdź w kadr z wyciągniętymi rękami.</string>
@@ -1007,6 +1007,7 @@
<string name="games_empty">Os jogos que instalar no Steam aparecem aqui após a sessão.</string>
<string name="games_play_steam">Jogar no Steam</string>
<string name="games_play_steamvr">Jogar no SteamVR</string>
<string name="games_install_play_steamvr">Transferir e jogar no SteamVR</string>
<string name="games_launch_settings">Definições de arranque</string>
<string name="games_launch">Iniciar</string>
<string name="games_files">Ficheiros do jogo</string>
@@ -1344,9 +1345,12 @@
<string name="session_proton_downloading_mb">a transferir o Proton Experimental (ARM64) · %1$d de %2$d MB</string>
<string name="session_proton_checking">a verificar o Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">a descompactar o Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">a transferir o módulo de RV</string>
<string name="session_vr_downloading_mb">a transferir o módulo de RV · %1$d de %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Não foi possível aceder ao catálogo de runtimes. Verifique a ligação e prima Jogar novamente.</string>
<string name="session_runtime_install_failed">O runtime Linux não foi instalado. Verifique o runtime em Configuração e prima Jogar novamente.</string>
<string name="session_desktop_install_failed">O ambiente de trabalho não foi instalado (%1$s). Verifique a ligação e prima Ambiente de trabalho novamente.</string>
<string name="session_vr_install_failed">O módulo de RV não foi instalado. Verifique a ligação e prima Jogar no SteamVR novamente.</string>
<string name="session_ended_named">%1$s parou inesperadamente. Partilhe os registos num relatório de erro ou tente novamente.</string>
<string name="session_ended_program">O programa parou inesperadamente. Partilhe os registos num relatório de erro ou tente novamente.</string>
<string name="session_ended_desktop">O ambiente de trabalho parou inesperadamente. Partilhe os registos num relatório de erro ou tente novamente.</string>
@@ -2462,6 +2466,16 @@
<string name="hand_camera_placement">Posição da câmara</string>
<string name="hand_camera_placement_hint">Verifique se a câmara te consegue ver antes de jogar.</string>
<string name="hand_camera_check">Verificar</string>
<string name="vr_module_title">Módulo de RV</string>
<string name="vr_module_hint">SteamVR em óculos, Quest e Cardboard, e seguimento das mãos com a câmara · transferência de %1$s</string>
<string name="vr_module_installed">Instalado · %1$s</string>
<string name="vr_module_downloading">A transferir o módulo de RV</string>
<string name="vr_module_failed">Não foi possível transferir o módulo de RV. Verifique a ligação e tente novamente.</string>
<string name="vr_module_removing">A remover o módulo de RV</string>
<string name="vr_module_busy">Pare a sessão antes de remover o módulo de RV.</string>
<string name="vr_module_remove_failed">Não foi possível remover o módulo de RV</string>
<string name="vr_module_uninstall_title">Desinstalar o módulo de RV?</string>
<string name="vr_module_uninstall_text">O SteamVR e o seguimento das mãos com a câmara deixam de funcionar até o transferir novamente. O próprio SteamVR, os jogos e as definições são mantidos.</string>
<string name="hand_camera_check_title">Posição da câmara</string>
<string name="hand_camera_how_rear">Coloque o dispositivo em pé a 1,5-2 metros de distância, à altura do peito, com a câmara traseira voltada para ti. Depois entre no campo de visão com as mãos estendidas.</string>
<string name="hand_camera_how_front">Coloque o dispositivo em pé a 1,5-2 metros de distância, à altura do peito, com o ecrã voltado para ti. Depois entre no campo de visão com as mãos estendidas.</string>
+14
View File
@@ -1007,6 +1007,7 @@
<string name="games_empty">Os jogos que você instala na Steam aparecem aqui após a sessão.</string>
<string name="games_play_steam">Jogar na Steam</string>
<string name="games_play_steamvr">Jogar no SteamVR</string>
<string name="games_install_play_steamvr">Baixar e jogar no SteamVR</string>
<string name="games_launch_settings">Configurações de inicialização</string>
<string name="games_launch">Iniciar</string>
<string name="games_files">Arquivos do jogo</string>
@@ -1344,9 +1345,12 @@
<string name="session_proton_downloading_mb">baixando o Proton Experimental (ARM64) · %1$d de %2$d MB</string>
<string name="session_proton_checking">verificando o Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">descompactando o Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">baixando o módulo de RV</string>
<string name="session_vr_downloading_mb">baixando o módulo de RV · %1$d de %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Não foi possível acessar o catálogo de runtimes. Verifique a conexão e toque em Jogar novamente.</string>
<string name="session_runtime_install_failed">O runtime Linux não foi instalado. Verifique o runtime em Configuração e toque em Jogar novamente.</string>
<string name="session_desktop_install_failed">A área de trabalho não foi instalada (%1$s). Verifique a conexão e toque em Área de trabalho novamente.</string>
<string name="session_vr_install_failed">O módulo de RV não foi instalado. Verifique a conexão e toque em Jogar no SteamVR novamente.</string>
<string name="session_ended_named">%1$s parou inesperadamente. Compartilhe os logs em um relatório de bug ou tente de novo.</string>
<string name="session_ended_program">O programa parou inesperadamente. Compartilhe os logs em um relatório de bug ou tente de novo.</string>
<string name="session_ended_desktop">A área de trabalho parou inesperadamente. Compartilhe os logs em um relatório de bug ou tente de novo.</string>
@@ -2462,6 +2466,16 @@
<string name="hand_camera_placement">Posição da câmera</string>
<string name="hand_camera_placement_hint">Verifique se a câmera consegue ver você antes de jogar.</string>
<string name="hand_camera_check">Verificar</string>
<string name="vr_module_title">Módulo de RV</string>
<string name="vr_module_hint">SteamVR em óculos, Quest e Cardboard, além de rastreamento das mãos pela câmera · download de %1$s</string>
<string name="vr_module_installed">Instalado · %1$s</string>
<string name="vr_module_downloading">Baixando o módulo de RV</string>
<string name="vr_module_failed">Não foi possível baixar o módulo de RV. Verifique a conexão e tente novamente.</string>
<string name="vr_module_removing">Removendo o módulo de RV</string>
<string name="vr_module_busy">Pare a sessão antes de remover o módulo de RV.</string>
<string name="vr_module_remove_failed">Não foi possível remover o módulo de RV</string>
<string name="vr_module_uninstall_title">Desinstalar o módulo de RV?</string>
<string name="vr_module_uninstall_text">O SteamVR e o rastreamento das mãos pela câmera param de funcionar até você baixá-lo de novo. O próprio SteamVR, os jogos e as configurações são mantidos.</string>
<string name="hand_camera_check_title">Posição da câmera</string>
<string name="hand_camera_how_rear">Deixe o dispositivo em pé a 1,5-2 metros de distância, na altura do peito, com a câmera traseira voltada para você. Depois entre no campo de visão com as mãos estendidas.</string>
<string name="hand_camera_how_front">Deixe o dispositivo em pé a 1,5-2 metros de distância, na altura do peito, com a tela voltada para você. Depois entre no campo de visão com as mãos estendidas.</string>
+14
View File
@@ -1018,6 +1018,7 @@
<string name="games_empty">Jocurile pe care le instalezi în Steam apar aici după sesiune.</string>
<string name="games_play_steam">Joacă Steam</string>
<string name="games_play_steamvr">Joacă SteamVR</string>
<string name="games_install_play_steamvr">Descarcă și joacă SteamVR</string>
<string name="games_launch_settings">Setări de lansare</string>
<string name="games_launch">Lansează</string>
<string name="games_files">Fișierele jocului</string>
@@ -1355,9 +1356,12 @@
<string name="session_proton_downloading_mb">se descarcă Proton Experimental (ARM64) · %1$d din %2$d MB</string>
<string name="session_proton_checking">se verifică Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">se despachetează Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">se descarcă modulul VR</string>
<string name="session_vr_downloading_mb">se descarcă modulul VR · %1$d din %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Catalogul mediului de execuție nu a putut fi accesat. Verifică conexiunea și apasă din nou Play.</string>
<string name="session_runtime_install_failed">Mediul de execuție Linux nu s-a instalat. Verifică mediul de execuție în Configurare și apasă din nou Play.</string>
<string name="session_desktop_install_failed">Desktopul nu s-a instalat (%1$s). Verifică conexiunea și apasă din nou Desktop.</string>
<string name="session_vr_install_failed">Modulul VR nu s-a instalat. Verifică conexiunea și apasă din nou Joacă SteamVR.</string>
<string name="session_ended_named">%1$s s-a oprit neașteptat. Partajează jurnalele cu un raport de eroare, sau încearcă din nou.</string>
<string name="session_ended_program">Programul s-a oprit neașteptat. Partajează jurnalele cu un raport de eroare, sau încearcă din nou.</string>
<string name="session_ended_desktop">Desktopul s-a oprit neașteptat. Partajează jurnalele cu un raport de eroare, sau încearcă din nou.</string>
@@ -2476,6 +2480,16 @@
<string name="hand_camera_placement">Poziționarea camerei</string>
<string name="hand_camera_placement_hint">Verifică dacă te vede camera înainte de a juca.</string>
<string name="hand_camera_check">Verifică</string>
<string name="vr_module_title">Modul VR</string>
<string name="vr_module_hint">SteamVR pe ochelari, Quest și Cardboard, plus urmărirea mâinilor cu camera · descărcare de %1$s</string>
<string name="vr_module_installed">Instalat · %1$s</string>
<string name="vr_module_downloading">Se descarcă modulul VR</string>
<string name="vr_module_failed">Modulul VR nu a putut fi descărcat. Verifică conexiunea și încearcă din nou.</string>
<string name="vr_module_removing">Se elimină modulul VR</string>
<string name="vr_module_busy">Oprește sesiunea înainte de a elimina modulul VR.</string>
<string name="vr_module_remove_failed">Modulul VR nu a putut fi eliminat</string>
<string name="vr_module_uninstall_title">Dezinstalezi modulul VR?</string>
<string name="vr_module_uninstall_text">SteamVR și urmărirea mâinilor cu camera nu mai funcționează până când îl descarci din nou. SteamVR, jocurile și setările se păstrează.</string>
<string name="hand_camera_check_title">Poziționarea camerei</string>
<string name="hand_camera_how_rear">Așază dispozitivul vertical, la 1,5–2 metri distanță, cam la înălțimea pieptului, cu camera din spate îndreptată spre tine. Apoi intră în cadru cu mâinile întinse.</string>
<string name="hand_camera_how_front">Așază dispozitivul vertical, la 1,5–2 metri distanță, cam la înălțimea pieptului, cu ecranul îndreptat spre tine. Apoi intră în cadru cu mâinile întinse.</string>
+14
View File
@@ -1021,6 +1021,7 @@
<string name="games_empty">Игры, установленные в Steam, появятся здесь после завершения сессии.</string>
<string name="games_play_steam">Запустить Steam</string>
<string name="games_play_steamvr">Запустить SteamVR</string>
<string name="games_install_play_steamvr">Скачать и запустить SteamVR</string>
<string name="games_launch_settings">Настройки запуска</string>
<string name="games_launch">Запустить</string>
<string name="games_files">Файлы игры</string>
@@ -1365,9 +1366,12 @@
<string name="session_proton_downloading_mb">загрузка Proton Experimental (ARM64) · %1$d из %2$d МБ</string>
<string name="session_proton_checking">проверка Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">распаковка Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">загрузка VR-модуля</string>
<string name="session_vr_downloading_mb">загрузка VR-модуля · %1$d из %2$d МБ</string>
<string name="session_runtime_catalog_unreachable">Не удалось получить каталог сред выполнения. Проверьте подключение и снова нажмите Play.</string>
<string name="session_runtime_install_failed">Среда выполнения Linux не установилась. Проверьте ее на странице «Настройка» и снова нажмите Play.</string>
<string name="session_desktop_install_failed">Рабочий стол не установился (%1$s). Проверьте подключение и снова нажмите «Рабочий стол».</string>
<string name="session_vr_install_failed">VR-модуль не установился. Проверьте подключение и снова нажмите «Запустить SteamVR».</string>
<string name="session_ended_named">Работа %1$s неожиданно прервалась. Приложите журналы к отчету об ошибке или попробуйте снова.</string>
<string name="session_ended_program">Программа неожиданно завершила работу. Приложите журналы к отчету об ошибке или попробуйте снова.</string>
<string name="session_ended_desktop">Рабочий стол неожиданно завершил работу. Приложите журналы к отчету об ошибке или попробуйте снова.</string>
@@ -2495,6 +2499,16 @@
<string name="hand_camera_placement">Расположение камеры</string>
<string name="hand_camera_placement_hint">Проверьте, что камера видит вас, прежде чем начать игру.</string>
<string name="hand_camera_check">Проверить</string>
<string name="vr_module_title">VR-модуль</string>
<string name="vr_module_hint">SteamVR на очках, Quest и Cardboard, а также отслеживание рук камерой · загрузка %1$s</string>
<string name="vr_module_installed">Установлен · %1$s</string>
<string name="vr_module_downloading">Загрузка VR-модуля</string>
<string name="vr_module_failed">Не удалось скачать VR-модуль. Проверьте подключение и повторите попытку.</string>
<string name="vr_module_removing">Удаление VR-модуля</string>
<string name="vr_module_busy">Остановите сеанс перед удалением VR-модуля.</string>
<string name="vr_module_remove_failed">Не удалось удалить VR-модуль</string>
<string name="vr_module_uninstall_title">Удалить VR-модуль?</string>
<string name="vr_module_uninstall_text">SteamVR и отслеживание рук камерой перестанут работать, пока вы не скачаете его снова. Сам SteamVR, игры и настройки сохранятся.</string>
<string name="hand_camera_check_title">Расположение камеры</string>
<string name="hand_camera_how_rear">Поставьте устройство вертикально на расстоянии от 1,5 до 2 метров, примерно на уровне груди, направив заднюю камеру на себя. Затем встаньте в кадр, вытянув руки.</string>
<string name="hand_camera_how_front">Поставьте устройство вертикально на расстоянии от 1,5 до 2 метров, примерно на уровне груди, направив экран на себя. Затем встаньте в кадр, вытянув руки.</string>
+14
View File
@@ -1012,6 +1012,7 @@
<string name="games_empty">Spel du installerar i Steam visas här efter sessionen.</string>
<string name="games_play_steam">Spela Steam</string>
<string name="games_play_steamvr">Spela SteamVR</string>
<string name="games_install_play_steamvr">Ladda ned och spela SteamVR</string>
<string name="games_launch_settings">Startinställningar</string>
<string name="games_launch">Starta</string>
<string name="games_files">Spelfiler</string>
@@ -1342,9 +1343,12 @@
<string name="session_proton_downloading_mb">laddar ned Proton Experimental (ARM64) · %1$d av %2$d MB</string>
<string name="session_proton_checking">kontrollerar Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">packar upp Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">laddar ned VR-modulen</string>
<string name="session_vr_downloading_mb">laddar ned VR-modulen · %1$d av %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Kunde inte nå körmiljökatalogen. Kontrollera anslutningen och tryck på Spela igen.</string>
<string name="session_runtime_install_failed">Linux-körmiljön installerades inte. Kontrollera körmiljön i Konfiguration och tryck på Spela igen.</string>
<string name="session_desktop_install_failed">Skrivbordet installerades inte (%1$s). Kontrollera anslutningen och tryck på Skrivbord igen.</string>
<string name="session_vr_install_failed">VR-modulen installerades inte. Kontrollera anslutningen och tryck på Spela SteamVR igen.</string>
<string name="session_ended_named">%1$s stoppades oväntat. Dela loggarna i en felrapport, eller försök igen.</string>
<string name="session_ended_program">Programmet stoppades oväntat. Dela loggarna i en felrapport, eller försök igen.</string>
<string name="session_ended_desktop">Skrivbordet stoppades oväntat. Dela loggarna i en felrapport, eller försök igen.</string>
@@ -2451,6 +2455,16 @@
<string name="hand_camera_placement">Kameraplacering</string>
<string name="hand_camera_placement_hint">Kontrollera att kameran kan se dig innan du spelar.</string>
<string name="hand_camera_check">Kontrollera</string>
<string name="vr_module_title">VR-modul</string>
<string name="vr_module_hint">SteamVR på glasögon, Quest och Cardboard, plus handspårning med kameran · %1$s nedladdning</string>
<string name="vr_module_installed">Installerad · %1$s</string>
<string name="vr_module_downloading">Laddar ned VR-modulen</string>
<string name="vr_module_failed">VR-modulen kunde inte laddas ned. Kontrollera anslutningen och försök igen.</string>
<string name="vr_module_removing">Tar bort VR-modulen</string>
<string name="vr_module_busy">Stoppa sessionen innan du tar bort VR-modulen.</string>
<string name="vr_module_remove_failed">VR-modulen kunde inte tas bort</string>
<string name="vr_module_uninstall_title">Avinstallera VR-modulen?</string>
<string name="vr_module_uninstall_text">SteamVR och handspårning med kameran slutar fungera tills du laddar ned den igen. Själva SteamVR, spel och inställningar behålls.</string>
<string name="hand_camera_check_title">Kameraplacering</string>
<string name="hand_camera_how_rear">Ställ enheten upprätt 1,5 till 2 meter bort, på ungefär bröstnivå, med den bakre kameran vänd mot dig. Kliv sedan in i bild med händerna ute.</string>
<string name="hand_camera_how_front">Ställ enheten upprätt 1,5 till 2 meter bort, på ungefär bröstnivå, med skärmen vänd mot dig. Kliv sedan in i bild med händerna ute.</string>
+14
View File
@@ -1006,6 +1006,7 @@
<string name="games_empty">เกมที่คุณติดตั้งใน Steam จะปรากฏที่นี่หลังจากจบเซสชัน</string>
<string name="games_play_steam">เล่น Steam</string>
<string name="games_play_steamvr">เล่น SteamVR</string>
<string name="games_install_play_steamvr">ดาวน์โหลดและเล่น SteamVR</string>
<string name="games_launch_settings">การตั้งค่าการเปิดเกม</string>
<string name="games_launch">เปิดเกม</string>
<string name="games_files">ไฟล์เกม</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">กำลังดาวน์โหลด Proton Experimental (ARM64) · %1$d จาก %2$d MB</string>
<string name="session_proton_checking">กำลังตรวจสอบ Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">กำลังแตกไฟล์ Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">กำลังดาวน์โหลดโมดูล VR</string>
<string name="session_vr_downloading_mb">กำลังดาวน์โหลดโมดูล VR · %1$d จาก %2$d MB</string>
<string name="session_runtime_catalog_unreachable">ไม่สามารถเข้าถึงแคตตาล็อกรันไทม์ได้ ตรวจสอบการเชื่อมต่อแล้วกด Play อีกครั้ง</string>
<string name="session_runtime_install_failed">รันไทม์ Linux ติดตั้งไม่สำเร็จ ตรวจสอบรันไทม์ในการตั้งค่าแล้วกด Play อีกครั้ง</string>
<string name="session_desktop_install_failed">เดสก์ท็อปติดตั้งไม่สำเร็จ (%1$s) ตรวจสอบการเชื่อมต่อแล้วกดเดสก์ท็อปอีกครั้ง</string>
<string name="session_vr_install_failed">ติดตั้งโมดูล VR ไม่สำเร็จ ตรวจสอบการเชื่อมต่อแล้วกดเล่น SteamVR อีกครั้ง</string>
<string name="session_ended_named">%1$s หยุดทำงานกะทันหัน แชร์ล็อกพร้อมรายงานข้อบกพร่อง หรือลองใหม่</string>
<string name="session_ended_program">โปรแกรมหยุดทำงานกะทันหัน แชร์ล็อกพร้อมรายงานข้อบกพร่อง หรือลองใหม่</string>
<string name="session_ended_desktop">เดสก์ท็อปหยุดทำงานกะทันหัน แชร์ล็อกพร้อมรายงานข้อบกพร่อง หรือลองใหม่</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">ตำแหน่งกล้อง</string>
<string name="hand_camera_placement_hint">ตรวจสอบว่ากล้องมองเห็นคุณก่อนเริ่มเล่น</string>
<string name="hand_camera_check">ตรวจสอบ</string>
<string name="vr_module_title">โมดูล VR</string>
<string name="vr_module_hint">SteamVR บนแว่น Quest และ Cardboard พร้อมการติดตามมือด้วยกล้อง · ดาวน์โหลด %1$s</string>
<string name="vr_module_installed">ติดตั้งแล้ว · %1$s</string>
<string name="vr_module_downloading">กำลังดาวน์โหลดโมดูล VR</string>
<string name="vr_module_failed">ดาวน์โหลดโมดูล VR ไม่ได้ ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง</string>
<string name="vr_module_removing">กำลังลบโมดูล VR</string>
<string name="vr_module_busy">หยุดเซสชันก่อนลบโมดูล VR</string>
<string name="vr_module_remove_failed">ลบโมดูล VR ไม่ได้</string>
<string name="vr_module_uninstall_title">ถอนการติดตั้งโมดูล VR?</string>
<string name="vr_module_uninstall_text">SteamVR และการติดตามมือด้วยกล้องจะใช้งานไม่ได้จนกว่าคุณจะดาวน์โหลดอีกครั้ง ตัว SteamVR เกม และการตั้งค่ายังคงอยู่</string>
<string name="hand_camera_check_title">ตำแหน่งกล้อง</string>
<string name="hand_camera_how_rear">ตั้งอุปกรณ์ให้ห่างออกไป 1.5 ถึง 2 เมตร ที่ระดับความสูงประมาณหน้าอก โดยให้กล้องหลังหันมาทางคุณ จากนั้นเดินเข้ามาในมุมมองพร้อมยื่นมือทั้งสองข้างออกมา</string>
<string name="hand_camera_how_front">ตั้งอุปกรณ์ให้ห่างออกไป 1.5 ถึง 2 เมตร ที่ระดับความสูงประมาณหน้าอก โดยให้หน้าจอหันมาทางคุณ จากนั้นเดินเข้ามาในมุมมองพร้อมยื่นมือทั้งสองข้างออกมา</string>
+14
View File
@@ -1001,6 +1001,7 @@
<string name="games_empty">Steam\'de yüklediğiniz oyunlar oturumdan sonra burada görünür.</string>
<string name="games_play_steam">Steam\'de oyna</string>
<string name="games_play_steamvr">SteamVR\'da oyna</string>
<string name="games_install_play_steamvr">İndir ve SteamVR\'da oyna</string>
<string name="games_launch_settings">Başlatma ayarları</string>
<string name="games_launch">Başlat</string>
<string name="games_files">Oyun dosyaları</string>
@@ -1331,9 +1332,12 @@
<string name="session_proton_downloading_mb">Proton Experimental (ARM64) indiriliyor · %1$d / %2$d MB</string>
<string name="session_proton_checking">Proton Experimental (ARM64) kontrol ediliyor</string>
<string name="session_proton_unpacking">Proton Experimental (ARM64) ayıklanıyor</string>
<string name="session_vr_downloading">VR modülü indiriliyor</string>
<string name="session_vr_downloading_mb">VR modülü indiriliyor · %1$d / %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Çalışma ortamı kataloğuna ulaşılamadı. Bağlantıyı kontrol edip yeniden Oyna\'ya basın.</string>
<string name="session_runtime_install_failed">Linux çalışma ortamı yüklenmedi. Kurulum bölümünde çalışma ortamını kontrol edip yeniden Oyna\'ya basın.</string>
<string name="session_desktop_install_failed">Masaüstü yüklenmedi (%1$s). Bağlantıyı kontrol edip yeniden Masaüstü\'ne basın.</string>
<string name="session_vr_install_failed">VR modülü yüklenmedi. Bağlantıyı kontrol edip yeniden SteamVR\'da oyna\'ya basın.</string>
<string name="session_ended_named">%1$s beklenmedik şekilde durdu. Günlükleri bir hata raporuyla paylaşın veya yeniden deneyin.</string>
<string name="session_ended_program">Program beklenmedik şekilde durdu. Günlükleri bir hata raporuyla paylaşın veya yeniden deneyin.</string>
<string name="session_ended_desktop">Masaüstü beklenmedik şekilde durdu. Günlükleri bir hata raporuyla paylaşın veya yeniden deneyin.</string>
@@ -2437,6 +2441,16 @@
<string name="hand_camera_placement">Kamera konumu</string>
<string name="hand_camera_placement_hint">Oynamadan önce kameranın sizi görebildiğini kontrol edin.</string>
<string name="hand_camera_check">Kontrol et</string>
<string name="vr_module_title">VR modülü</string>
<string name="vr_module_hint">Gözlüklerde, Quest\'te ve Cardboard\'da SteamVR ile kamerayla el takibi · %1$s indirme</string>
<string name="vr_module_installed">Yüklü · %1$s</string>
<string name="vr_module_downloading">VR modülü indiriliyor</string>
<string name="vr_module_failed">VR modülü indirilemedi. Bağlantıyı kontrol edip yeniden deneyin.</string>
<string name="vr_module_removing">VR modülü kaldırılıyor</string>
<string name="vr_module_busy">VR modülünü kaldırmadan önce oturumu durdurun.</string>
<string name="vr_module_remove_failed">VR modülü kaldırılamadı</string>
<string name="vr_module_uninstall_title">VR modülü kaldırılsın mı?</string>
<string name="vr_module_uninstall_text">Yeniden indirene kadar SteamVR ve kamerayla el takibi çalışmaz. SteamVR, oyunlar ve ayarlar korunur.</string>
<string name="hand_camera_check_title">Kamera konumu</string>
<string name="hand_camera_how_rear">Cihazı yaklaşık göğüs hizasında, 1,5 ila 2 metre uzağa, arka kamera size dönük olacak şekilde dik durdurun. Ardından ellerinizi açarak görüntüye girin.</string>
<string name="hand_camera_how_front">Cihazı yaklaşık göğüs hizasında, 1,5 ila 2 metre uzağa, ekran size dönük olacak şekilde dik durdurun. Ardından ellerinizi açarak görüntüye girin.</string>
+14
View File
@@ -1024,6 +1024,7 @@
<string name="games_empty">Ігри, які ви встановите в Steam, з’являться тут після сеансу.</string>
<string name="games_play_steam">Грати в Steam</string>
<string name="games_play_steamvr">Грати в SteamVR</string>
<string name="games_install_play_steamvr">Завантажити й грати в SteamVR</string>
<string name="games_launch_settings">Налаштування запуску</string>
<string name="games_launch">Запустити</string>
<string name="games_files">Файли гри</string>
@@ -1368,9 +1369,12 @@
<string name="session_proton_downloading_mb">завантаження Proton Experimental (ARM64) · %1$d з %2$d MB</string>
<string name="session_proton_checking">перевірка Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">розпакування Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">завантаження VR-модуля</string>
<string name="session_vr_downloading_mb">завантаження VR-модуля · %1$d з %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Не вдалося отримати каталог середовищ. Перевірте з’єднання й натисніть «Грати» ще раз.</string>
<string name="session_runtime_install_failed">Середовище Linux не встановилося. Перевірте його в розділі «Налаштування» й натисніть «Грати» ще раз.</string>
<string name="session_desktop_install_failed">Робочий стіл не встановився (%1$s). Перевірте з’єднання й натисніть «Робочий стіл» ще раз.</string>
<string name="session_vr_install_failed">VR-модуль не встановився. Перевірте з’єднання й натисніть «Грати в SteamVR» ще раз.</string>
<string name="session_ended_named">Роботу %1$s несподівано завершено. Додайте журнали до звіту про помилку або спробуйте ще раз.</string>
<string name="session_ended_program">Програма несподівано зупинилася. Додайте журнали до звіту про помилку або спробуйте ще раз.</string>
<string name="session_ended_desktop">Робочий стіл несподівано зупинився. Додайте журнали до звіту про помилку або спробуйте ще раз.</string>
@@ -2501,6 +2505,16 @@
<string name="hand_camera_placement">Розташування камери</string>
<string name="hand_camera_placement_hint">Перевірте, що камера бачить вас, перш ніж почати гру.</string>
<string name="hand_camera_check">Перевірити</string>
<string name="vr_module_title">VR-модуль</string>
<string name="vr_module_hint">SteamVR на окулярах, Quest і Cardboard, а також відстеження рук камерою · завантаження %1$s</string>
<string name="vr_module_installed">Встановлено · %1$s</string>
<string name="vr_module_downloading">Завантаження VR-модуля</string>
<string name="vr_module_failed">Не вдалося завантажити VR-модуль. Перевірте з’єднання й спробуйте ще раз.</string>
<string name="vr_module_removing">Видалення VR-модуля</string>
<string name="vr_module_busy">Зупиніть сеанс, перш ніж видаляти VR-модуль.</string>
<string name="vr_module_remove_failed">Не вдалося видалити VR-модуль</string>
<string name="vr_module_uninstall_title">Видалити VR-модуль?</string>
<string name="vr_module_uninstall_text">SteamVR і відстеження рук камерою не працюватимуть, доки ви не завантажите його знову. Сам SteamVR, ігри та налаштування збережуться.</string>
<string name="hand_camera_check_title">Розташування камери</string>
<string name="hand_camera_how_rear">Поставте пристрій вертикально на відстані від 1,5 до 2 метрів, приблизно на рівні грудей, спрямувавши задню камеру на себе. Потім станьте в кадр, витягнувши руки.</string>
<string name="hand_camera_how_front">Поставте пристрій вертикально на відстані від 1,5 до 2 метрів, приблизно на рівні грудей, спрямувавши екран на себе. Потім станьте в кадр, витягнувши руки.</string>
+14
View File
@@ -1006,6 +1006,7 @@
<string name="games_empty">Game bạn cài trong Steam sẽ xuất hiện ở đây sau phiên.</string>
<string name="games_play_steam">Chơi trên Steam</string>
<string name="games_play_steamvr">Chơi trên SteamVR</string>
<string name="games_install_play_steamvr">Tải xuống &amp; chơi trên SteamVR</string>
<string name="games_launch_settings">Thiết lập khởi chạy</string>
<string name="games_launch">Khởi chạy</string>
<string name="games_files">Tệp game</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">đang tải Proton Experimental (ARM64) · %1$d trong %2$d MB</string>
<string name="session_proton_checking">đang kiểm tra Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">đang giải nén Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">đang tải mô-đun VR</string>
<string name="session_vr_downloading_mb">đang tải mô-đun VR · %1$d trong %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Không thể kết nối danh mục runtime. Kiểm tra kết nối và nhấn Play lại.</string>
<string name="session_runtime_install_failed">Runtime Linux chưa cài được. Kiểm tra runtime trong Thiết lập và nhấn Play lại.</string>
<string name="session_desktop_install_failed">Desktop chưa cài được (%1$s). Kiểm tra kết nối và nhấn Desktop lại.</string>
<string name="session_vr_install_failed">Mô-đun VR chưa cài được. Kiểm tra kết nối và nhấn Chơi trên SteamVR lại.</string>
<string name="session_ended_named">%1$s đã dừng ngoài ý muốn. Hãy chia sẻ log cùng báo cáo lỗi, hoặc thử lại.</string>
<string name="session_ended_program">Chương trình đã dừng ngoài ý muốn. Hãy chia sẻ log cùng báo cáo lỗi, hoặc thử lại.</string>
<string name="session_ended_desktop">Desktop đã dừng ngoài ý muốn. Hãy chia sẻ log cùng báo cáo lỗi, hoặc thử lại.</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">Vị trí camera</string>
<string name="hand_camera_placement_hint">Hãy kiểm tra xem camera có thấy bạn không trước khi chơi.</string>
<string name="hand_camera_check">Kiểm tra</string>
<string name="vr_module_title">Mô-đun VR</string>
<string name="vr_module_hint">SteamVR trên kính, Quest và Cardboard, cùng theo dõi tay bằng camera · tải xuống %1$s</string>
<string name="vr_module_installed">Đã cài · %1$s</string>
<string name="vr_module_downloading">Đang tải mô-đun VR</string>
<string name="vr_module_failed">Không tải được mô-đun VR. Kiểm tra kết nối và thử lại.</string>
<string name="vr_module_removing">Đang gỡ mô-đun VR</string>
<string name="vr_module_busy">Hãy dừng phiên trước khi gỡ mô-đun VR.</string>
<string name="vr_module_remove_failed">Không gỡ được mô-đun VR</string>
<string name="vr_module_uninstall_title">Gỡ cài đặt mô-đun VR?</string>
<string name="vr_module_uninstall_text">SteamVR và theo dõi tay bằng camera sẽ ngừng hoạt động cho đến khi bạn tải lại. Bản thân SteamVR, trò chơi và cài đặt vẫn được giữ.</string>
<string name="hand_camera_check_title">Vị trí camera</string>
<string name="hand_camera_how_rear">Dựng thiết bị cách xa khoảng 1,5 đến 2 mét, ở độ cao ngang ngực, với camera sau hướng về phía bạn. Sau đó bước vào khung hình và đưa cả hai tay ra.</string>
<string name="hand_camera_how_front">Dựng thiết bị cách xa khoảng 1,5 đến 2 mét, ở độ cao ngang ngực, với màn hình hướng về phía bạn. Sau đó bước vào khung hình và đưa cả hai tay ra.</string>
@@ -1088,6 +1088,7 @@
<string name="games_empty">你在 Steam 安装的游戏会在会话结束后显示在这里。</string>
<string name="games_play_steam">游玩 Steam</string>
<string name="games_play_steamvr">游玩 SteamVR</string>
<string name="games_install_play_steamvr">下载并游玩 SteamVR</string>
<string name="games_launch_settings">启动设置</string>
<string name="games_launch">启动</string>
<string name="games_files">游戏文件</string>
@@ -1405,9 +1406,12 @@
<string name="session_proton_downloading_mb">正在下载 Proton Experimental(ARM64)· %1$d / %2$d MB</string>
<string name="session_proton_checking">正在检查 Proton Experimental(ARM64)</string>
<string name="session_proton_unpacking">正在解包 Proton Experimental(ARM64)</string>
<string name="session_vr_downloading">正在下载 VR 模块</string>
<string name="session_vr_downloading_mb">正在下载 VR 模块 · %1$d / %2$d MB</string>
<string name="session_runtime_catalog_unreachable">无法连接运行时目录。请检查网络连接,然后再次点“游玩”。</string>
<string name="session_runtime_install_failed">Linux 运行时未能安装。请在“配置”中检查运行时,然后再次点“游玩”。</string>
<string name="session_desktop_install_failed">桌面未能安装(%1$s)。请检查网络连接,然后再次点“桌面”。</string>
<string name="session_vr_install_failed">VR 模块未能安装。请检查网络连接,然后再次点“游玩 SteamVR”。</string>
<string name="session_ended_named">%1$s 意外停止。请将日志随错误报告一起分享,或重试。</string>
<string name="session_ended_program">程序意外停止。请将日志随错误报告一起分享,或重试。</string>
<string name="session_ended_desktop">桌面意外停止。请将日志随错误报告一起分享,或重试。</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">相机位置</string>
<string name="hand_camera_placement_hint">开始游戏前,请确认相机能看到你。</string>
<string name="hand_camera_check">检查</string>
<string name="vr_module_title">VR 模块</string>
<string name="vr_module_hint">在眼镜、Quest 和 Cardboard 上使用 SteamVR,以及摄像头手部追踪 · 需下载 %1$s</string>
<string name="vr_module_installed">已安装 · %1$s</string>
<string name="vr_module_downloading">正在下载 VR 模块</string>
<string name="vr_module_failed">无法下载 VR 模块。请检查网络连接,然后重试。</string>
<string name="vr_module_removing">正在移除 VR 模块</string>
<string name="vr_module_busy">请先停止会话,再移除 VR 模块。</string>
<string name="vr_module_remove_failed">无法移除 VR 模块</string>
<string name="vr_module_uninstall_title">卸载 VR 模块?</string>
<string name="vr_module_uninstall_text">在重新下载之前,SteamVR 和摄像头手部追踪将无法使用。SteamVR 本身、游戏和设置都会保留。</string>
<string name="hand_camera_check_title">相机位置</string>
<string name="hand_camera_how_rear">将设备立在距离 1.5 到 2 米、约胸口高度的地方,让后置相机对着你。然后张开双手走进画面。</string>
<string name="hand_camera_how_front">将设备立在距离 1.5 到 2 米、约胸口高度的地方,让屏幕对着你。然后张开双手走进画面。</string>
@@ -1006,6 +1006,7 @@
<string name="games_empty">你在 Steam 安裝的遊戲會在會話結束後顯示在這裡。</string>
<string name="games_play_steam">開啟 Steam</string>
<string name="games_play_steamvr">開啟 SteamVR</string>
<string name="games_install_play_steamvr">下載並開啟 SteamVR</string>
<string name="games_launch_settings">啟動設定</string>
<string name="games_launch">啟動</string>
<string name="games_files">遊戲檔案</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">正在下載 Proton Experimental (ARM64) · %1$d/%2$d MB</string>
<string name="session_proton_checking">正在檢查 Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">正在解壓 Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">正在下載 VR 模組</string>
<string name="session_vr_downloading_mb">正在下載 VR 模組 · %1$d/%2$d MB</string>
<string name="session_runtime_catalog_unreachable">無法連接運行環境目錄。請檢查網絡連線,然後再按「開啟 Steam」。</string>
<string name="session_runtime_install_failed">Linux 運行環境未能安裝。請在「設定」中檢查運行環境,然後再按「開啟 Steam」。</string>
<string name="session_desktop_install_failed">桌面未能安裝(%1$s)。請檢查網絡連線,然後再按「桌面」。</string>
<string name="session_vr_install_failed">VR 模組未能安裝。請檢查網絡連線,然後再按「開啟 SteamVR」。</string>
<string name="session_ended_named">%1$s 意外停止。請在錯誤報告中附上記錄,或再試一次。</string>
<string name="session_ended_program">程式意外停止。請在錯誤報告中附上記錄,或再試一次。</string>
<string name="session_ended_desktop">桌面意外停止。請在錯誤報告中附上記錄,或再試一次。</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">相機位置</string>
<string name="hand_camera_placement_hint">開始玩之前,請確認相機能看到你。</string>
<string name="hand_camera_check">檢查</string>
<string name="vr_module_title">VR 模組</string>
<string name="vr_module_hint">在眼鏡、Quest 及 Cardboard 上使用 SteamVR,以及鏡頭手部追蹤 · 需下載 %1$s</string>
<string name="vr_module_installed">已安裝 · %1$s</string>
<string name="vr_module_downloading">正在下載 VR 模組</string>
<string name="vr_module_failed">無法下載 VR 模組。請檢查網絡連線,然後再試一次。</string>
<string name="vr_module_removing">正在移除 VR 模組</string>
<string name="vr_module_busy">請先停止工作階段,再移除 VR 模組。</string>
<string name="vr_module_remove_failed">無法移除 VR 模組</string>
<string name="vr_module_uninstall_title">解除安裝 VR 模組?</string>
<string name="vr_module_uninstall_text">重新下載之前,SteamVR 及鏡頭手部追蹤將無法使用。SteamVR 本身、遊戲及設定都會保留。</string>
<string name="hand_camera_check_title">相機位置</string>
<string name="hand_camera_how_rear">將裝置立在距離 1.5 到 2 米、約胸口高度的地方,讓後置相機對著你。然後張開雙手走進畫面。</string>
<string name="hand_camera_how_front">將裝置立在距離 1.5 到 2 米、約胸口高度的地方,讓螢幕對著你。然後張開雙手走進畫面。</string>
@@ -1006,6 +1006,7 @@
<string name="games_empty">在 Steam 中安裝的遊戲會在工作階段結束後顯示在這裡。</string>
<string name="games_play_steam">執行 Steam</string>
<string name="games_play_steamvr">執行 SteamVR</string>
<string name="games_install_play_steamvr">下載並執行 SteamVR</string>
<string name="games_launch_settings">啟動設定</string>
<string name="games_launch">啟動</string>
<string name="games_files">遊戲檔案</string>
@@ -1329,9 +1330,12 @@
<string name="session_proton_downloading_mb">正在下載 Proton Experimental(ARM64)· %1$d/%2$d MB</string>
<string name="session_proton_checking">正在檢查 Proton Experimental(ARM64)</string>
<string name="session_proton_unpacking">正在解壓縮 Proton Experimental(ARM64)</string>
<string name="session_vr_downloading">正在下載 VR 模組</string>
<string name="session_vr_downloading_mb">正在下載 VR 模組 · %1$d/%2$d MB</string>
<string name="session_runtime_catalog_unreachable">無法連線到執行環境目錄。請檢查網路連線,然後再按一次「執行」。</string>
<string name="session_runtime_install_failed">Linux 執行環境未能安裝。請在「設定」中檢查執行環境,然後再按一次「執行」。</string>
<string name="session_desktop_install_failed">桌面未能安裝(%1$s)。請檢查網路連線,然後再按一次「桌面」。</string>
<string name="session_vr_install_failed">VR 模組未能安裝。請檢查網路連線,然後再按一次「執行 SteamVR」。</string>
<string name="session_ended_named">%1$s 意外停止。請在錯誤報告中附上日誌,或再試一次。</string>
<string name="session_ended_program">程式意外停止。請在錯誤報告中附上日誌,或再試一次。</string>
<string name="session_ended_desktop">桌面意外停止。請在錯誤報告中附上日誌,或再試一次。</string>
@@ -2426,6 +2430,16 @@
<string name="hand_camera_placement">相機位置</string>
<string name="hand_camera_placement_hint">開始遊玩前,請確認相機能看到你。</string>
<string name="hand_camera_check">檢查</string>
<string name="vr_module_title">VR 模組</string>
<string name="vr_module_hint">在眼鏡、Quest 和 Cardboard 上使用 SteamVR,以及相機手部追蹤 · 需下載 %1$s</string>
<string name="vr_module_installed">已安裝 · %1$s</string>
<string name="vr_module_downloading">正在下載 VR 模組</string>
<string name="vr_module_failed">無法下載 VR 模組。請檢查網路連線,然後再試一次。</string>
<string name="vr_module_removing">正在移除 VR 模組</string>
<string name="vr_module_busy">請先停止工作階段,再移除 VR 模組。</string>
<string name="vr_module_remove_failed">無法移除 VR 模組</string>
<string name="vr_module_uninstall_title">要解除安裝 VR 模組嗎?</string>
<string name="vr_module_uninstall_text">重新下載之前,SteamVR 和相機手部追蹤將無法使用。SteamVR 本身、遊戲和設定都會保留。</string>
<string name="hand_camera_check_title">相機位置</string>
<string name="hand_camera_how_rear">將裝置立在距離 1.5 到 2 公尺、約胸口高度的地方,讓後置相機對著你。然後張開雙手走進畫面。</string>
<string name="hand_camera_how_front">將裝置立在距離 1.5 到 2 公尺、約胸口高度的地方,讓螢幕對著你。然後張開雙手走進畫面。</string>
+14 -6
View File
@@ -1043,6 +1043,7 @@
<string name="games_empty">Games you install in Steam show up here after the session.</string>
<string name="games_play_steam">Play Steam</string>
<string name="games_play_steamvr">Play SteamVR</string>
<string name="games_install_play_steamvr">Download &amp; play SteamVR</string>
<string name="games_launch_settings">Launch settings</string>
<string name="games_launch">Launch</string>
<string name="games_files">Game files</string>
@@ -1376,9 +1377,12 @@
<string name="session_proton_downloading_mb">downloading Proton Experimental (ARM64) · %1$d of %2$d MB</string>
<string name="session_proton_checking">checking Proton Experimental (ARM64)</string>
<string name="session_proton_unpacking">unpacking Proton Experimental (ARM64)</string>
<string name="session_vr_downloading">downloading the VR module</string>
<string name="session_vr_downloading_mb">downloading the VR module · %1$d of %2$d MB</string>
<string name="session_runtime_catalog_unreachable">Could not reach the runtime catalog. Check the connection and press Play again.</string>
<string name="session_runtime_install_failed">The Linux runtime did not install. Check the runtime in Setup and press Play again.</string>
<string name="session_desktop_install_failed">The desktop did not install (%1$s). Check the connection and press Desktop again.</string>
<string name="session_vr_install_failed">The VR module did not install. Check the connection and press Play SteamVR again.</string>
<string name="session_package_resume_failed">An install that was interrupted could not be finished (%1$s). Check the connection and space, then try again.</string>
<plurals name="session_end_runtime_damaged">
<item quantity="one">The Linux runtime is damaged: %1$d library link points to a missing file (%2$s), usually after an install was interrupted. Repair keeps your games and settings.</item>
@@ -2541,12 +2545,16 @@
<string name="hand_camera_placement">Camera placement</string>
<string name="hand_camera_placement_hint">Check that the camera can see you before you play.</string>
<string name="hand_camera_check">Check</string>
<string name="tracking_pack_title">Hand tracking download</string>
<string name="tracking_pack_hint">Hand tracking needs a one-time %1$s download.</string>
<string name="tracking_pack_download">Download</string>
<string name="tracking_pack_retry">Retry</string>
<string name="tracking_pack_downloading">Downloading hand tracking… %1$d%%</string>
<string name="tracking_pack_failed">Hand tracking couldn\'t be downloaded. Check your connection and try again.</string>
<string name="vr_module_title">VR module</string>
<string name="vr_module_hint">SteamVR on glasses, Quest and Cardboard, plus camera hand tracking · %1$s download</string>
<string name="vr_module_installed">Installed · %1$s</string>
<string name="vr_module_downloading">Downloading the VR module</string>
<string name="vr_module_failed">The VR module couldn\'t be downloaded. Check the connection and try again.</string>
<string name="vr_module_removing">Removing the VR module</string>
<string name="vr_module_busy">Stop the session before removing the VR module.</string>
<string name="vr_module_remove_failed">The VR module could not be removed</string>
<string name="vr_module_uninstall_title">Uninstall the VR module?</string>
<string name="vr_module_uninstall_text">SteamVR and camera hand tracking stop working until you download it again. SteamVR itself, games and settings are kept.</string>
<string name="hand_camera_check_title">Camera placement</string>
<string name="hand_camera_how_rear">Stand the device up 1.5 to 2 metres away at about chest height, with the back camera facing you. Then step into view with your hands out.</string>
<string name="hand_camera_how_front">Stand the device up 1.5 to 2 metres away at about chest height, with the screen facing you. Then step into view with your hands out.</string>
@@ -0,0 +1,48 @@
package com.droiddeck.launcher.core
import android.content.Context
import java.io.File
import org.junit.After
import org.junit.Assert.*
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
@RunWith(RobolectricTestRunner::class)
class AddonPackTest {
private val context: Context = RuntimeEnvironment.getApplication()
private val current = "b".repeat(64)
private val pack = AddonPack("test", current, 1, emptyList())
@After fun clean() {
File(context.filesDir, "addons").deleteRecursively()
}
private fun version(sha256: String) = File(context.filesDir, "addons/test/$sha256").apply {
mkdirs()
File(this, AddonPack.COMPLETE).writeText(sha256)
}
@Test fun anotherBuildsVersionIsOutdatedUntilThisBuildsIsInstalled() {
assertFalse(pack.outdated(context))
File(context.filesDir, "addons/test/${"c".repeat(64)}").mkdirs()
assertFalse(pack.outdated(context))
version("a".repeat(64))
assertTrue(pack.outdated(context))
assertFalse(pack.installed(context))
version(current)
assertTrue(pack.installed(context))
assertFalse(pack.outdated(context))
}
@Test fun removeDeletesEveryVersion() {
version("a".repeat(64))
version(current)
assertEquals(AddonPack.State.Ready, pack.refresh(context))
assertTrue(pack.remove(context))
assertFalse(File(context.filesDir, "addons/test").exists())
assertEquals(AddonPack.State.Missing, pack.state.value)
assertFalse(pack.installed(context))
}
}
@@ -1,18 +1,17 @@
package com.droiddeck.launcher.glasses
import java.io.File
import org.json.JSONObject
import org.junit.Assert.*
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [28])
class StereoCalibrationProfileTest {
private fun base() = RuntimeEnvironment.getApplication().assets.open(StereoCalibrationProfile.BASE_ASSET)
.bufferedReader().use { it.readText() }
private fun base() = File("../tools/packs/vr/luma-ultra-640x480.json").readText()
private fun device(verified: Boolean = true) = JSONObject(base()).put("identity", "my-glasses")
.put("verified", verified).toString()
private fun select(saved: String? = null, identity: String? = "my-glasses", width: Int = 640, height: Int = 480) =
@@ -45,7 +45,7 @@ class HandTrackingTest {
assertEquals(TrackingCameras.REAR, s.side)
}
@Test fun trackingNeedsThePermissionACameraAndTheTrackingPack() {
@Test fun trackingNeedsThePermissionACameraAndTheVrPack() {
val context = RuntimeEnvironment.getApplication()
assertFalse(both.copy(enabled = true, downloaded = true).ready)
assertFalse(both.copy(enabled = true, permitted = true).ready)
@@ -0,0 +1,74 @@
package com.droiddeck.launcher.runtime
import android.content.Context
import com.droiddeck.launcher.R
import com.droiddeck.launcher.core.FileUtils
import com.droiddeck.launcher.session.SessionPhase
import com.droiddeck.launcher.session.SessionState
import java.io.File
import org.junit.After
import org.junit.Assert.*
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
@RunWith(RobolectricTestRunner::class)
class VrPackTest {
private val context: Context = RuntimeEnvironment.getApplication()
private val root get() = LinuxRuntime.rootDir(context)
private val layer = "usr/local/lib/droiddeck-vr/layer/libVkLayer_droiddeck_vr.so"
private val manifest = "usr/share/vulkan/implicit_layer.d/droiddeck_vr.json"
@Before fun idle() {
SessionState.running = false
SessionState.phase = SessionPhase.IDLE
}
@After fun clean() {
FileUtils.delete(root)
}
private fun guest(relative: String) = File(root, relative).apply { parentFile!!.mkdirs(); writeText("old") }
private fun until(done: (VrPack.Removal) -> Boolean): VrPack.Removal {
val deadline = System.currentTimeMillis() + 10_000
while (System.currentTimeMillis() < deadline) {
val now = VrPack.removal.value
if (!now.busy && done(now)) return now
Thread.sleep(20)
}
throw AssertionError("uninstall did not finish")
}
@Test fun stagingWithoutThePackRemovesWhatAnOlderAppLeft() {
guest(layer)
guest(manifest)
val other = guest("usr/share/vulkan/implicit_layer.d/other.json")
VrPack.stageGuest(context, root)
assertFalse(File(root, "usr/local/lib/droiddeck-vr").exists())
assertFalse(File(root, manifest).exists())
assertTrue(other.isFile)
}
@Test(timeout = 20_000) fun uninstallWaitsForTheSessionThenRemovesTheGuestFiles() {
guest(layer)
guest(manifest)
SessionState.running = true
VrPack.uninstall(context)
assertEquals(context.getString(R.string.vr_module_busy), until { it.error != null }.error)
assertTrue(File(root, layer).isFile)
SessionState.running = false
VrPack.uninstall(context)
until { it.error == null && !File(root, manifest).exists() }
assertFalse(File(root, "usr/local/lib/droiddeck-vr").exists())
assertFalse(File(root, manifest).exists())
assertFalse(VrPack.installed(context))
assertFalse(LinuxRuntimeInstaller.isBusy())
}
@Test fun librariesDoNotLoadWithoutThePack() {
assertFalse(VrPack.loadNative(context))
}
}
+4 -3
View File
@@ -515,9 +515,10 @@ results, app recovery behavior, and the unverified powered-adapter design.
## Building and testing
- `tools/vr/build.sh [OUT]` builds the driver and the layer in the local cross image, or
`--native OUT` with aarch64 compilers on PATH (CI). `tools/build_local.sh` and CI put them in the
APK under `assets/linuxfs/usr/local/lib/droiddeck-vr`; `SessionFiles` stages them, and
`droiddeck-steamvr`, into the rootfs.
`--native OUT` with aarch64 compilers on PATH (CI). `tools/build_local.sh` and CI build them into
`assets/linuxfs/usr/local/lib/droiddeck-vr`, which the APK leaves out: `tools/packs/build.sh` puts
them in the VR pack with the hand-tracking models and libraries. The app downloads it from Setup or
on the first Play SteamVR, `SessionFiles` stages it into the rootfs, and Setup uninstalls it.
- Shader: `cardboard_frag.h` is generated from `cardboard.frag`
(`glslangValidator -V --vn cardboard_frag_code -o cardboard_frag.h cardboard.frag`).
`tools/tests/test_cardboard.py` checks it is current, and checks the push-constant packing on the
@@ -106,7 +106,7 @@ The optional Lite bundle can be rebuilt with `mediapipe==0.10.21` using:
python tools/build_hand_lite.py --palm palm_detection_lite.tflite --lite hand_landmark_lite.tflite
```
Source URLs and hashes are in `tools/packs/tracking/hand_landmarker_lite.provenance.json`.
Source URLs and hashes are in `tools/packs/vr/hand_landmarker_lite.provenance.json`.
These changes still need live moving-hand, closed-fist, gesture-continuity, and latency validation.
Earlier Lite/normalized-input validation passed 52 focused JVM tests, and bundle rebuild and label-archive reproducibility
checks passed. Desktop MediaPipe 0.10.21 inference succeeded on color hand fixtures. All six
+2 -2
View File
@@ -7,13 +7,13 @@ This is an experimental implementation of native Luma Ultra head tracking, posit
## Build and setup
Luma Ultra now includes a shared starting calibration exported from the user's verified Fold7 profile on 2026-10-16. The bundled `calibration/luma-ultra-640x480.json` contains the original lens, stereo, and camera-to-head geometry without the source glasses' serial identifier. It applies only to the SDK-confirmed Luma Ultra primary `left0/right0` pair at 640 by 480. Matching saved device calibration takes precedence, including an unfinished personal fit that still requires distance validation. Missing, corrupt, or foreign profiles fall back to the model base; unknown serials can also use the base.
Luma Ultra now includes a shared starting calibration exported from the user's verified Fold7 profile on 2026-10-16. The VR pack's `luma-ultra-640x480.json` (`tools/packs/vr`) contains the original lens, stereo, and camera-to-head geometry without the source glasses' serial identifier. It applies only to the SDK-confirmed Luma Ultra primary `left0/right0` pair at 640 by 480. Matching saved device calibration takes precedence, including an unfinished personal fit that still requires distance validation. Missing, corrupt, or foreign profiles fall back to the model base; unknown serials can also use the base.
The base enables experimental hand tracking without requiring every user to repeat board collection. It is not marked individually verified on other units. Tracking and setup show **Shared Luma Ultra calibration** while it is in use; diagnostics distinguish `calibrationSource` (`luma-ultra-base`, `device`, or `none`) from `calibrationVerified`. The existing `calibrated` availability field is true for either the base or a verified personal profile. The following board steps are optional refinement for a new device using the base; a newly calculated personal profile still needs the unchanged distance check before use. A successful distance check saves the profile for the connected identified glasses. Source validation does not establish manufacturing consistency or aiming accuracy across other units.
Use the existing optional `droiddeck.vitureSdk` local property with the external VITURE Android SDK 2.4.0. No vendor headers or libraries are checked into the repository. `-PvitureSdkDir=` explicitly builds without the SDK. The ordinary runtime freshness checks remain enabled. Rebuild the ARM64 VR components with `tools/vr/build_windows.py`; its manifest includes `spatialpose_shm.h`.
The hand pipeline pins MediaPipe Tasks Vision 1.0.0, OpenCV 4.13.0, and the model and SHA-256 recorded in `tools/packs/tracking/hand_landmarker.provenance.json`. The model, OpenCV and MediaPipe native libraries are downloaded on first use as the tracking pack (`tools/packs`); the pack build and the inference worker verify the model checksum. CPU inference, the full model, concurrent camera inference, scheduled hand discovery, and automatic input-rate adjustment are the defaults, including after app restarts, reconnects, and provider restarts. **Show diagnostics → GPU hand inference** temporarily enables GPU until the next tracking restart; GPU remains experimental because SteamVR restarts and Vulkan device loss were observed during testing. Diagnostics report the selection as `handGpuEnabled` and the initialized detectors as `handInferenceBackend`; `not initialized` means detector startup has not completed. Sustained performance acceptance remains unresolved.
The hand pipeline pins MediaPipe Tasks Vision 1.0.0, OpenCV 4.13.0, and the model and SHA-256 recorded in `tools/packs/vr/hand_landmarker.provenance.json`. The model, OpenCV and MediaPipe native libraries are downloaded on first use as part of the VR pack (`tools/packs`); the pack build and the inference worker verify the model checksum. CPU inference, the full model, concurrent camera inference, scheduled hand discovery, and automatic input-rate adjustment are the defaults, including after app restarts, reconnects, and provider restarts. **Show diagnostics → GPU hand inference** temporarily enables GPU until the next tracking restart; GPU remains experimental because SteamVR restarts and Vulkan device loss were observed during testing. Diagnostics report the selection as `handGpuEnabled` and the initialized detectors as `handInferenceBackend`; `not initialized` means detector startup has not completed. Sustained performance acceptance remains unresolved.
Hand input starts by copying 500 permille of stereo callbacks, approximately 12.5 pairs per second at the SDK's documented 25 Hz camera rate. On CPU, automatic adjustment can raise this to 600 or 800 permille (about 15 or 20 Hz) only after eight consecutive valid observations have sufficient processing and freshness headroom. Promotion requires average processing at most 55 ms and observation age at most 110 ms for 15 Hz, then at most 40 ms and 90 ms for 20 Hz. A moving average allows occasional scheduled discovery frames while preserving a sustained processing budget. An average above the selected period reduces the rate; any single processing cost of 80 ms or observation age of 140 ms immediately returns it to 500 permille. Tracking failure and detector resets also return it to 500. This policy requests more input only when processing can accommodate it; it does not guarantee that many completed or valid hand updates.
+202
View File
@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.
+7 -6
View File
@@ -2,10 +2,11 @@
## Included
None of these files ship in the APK. The app downloads them on first use as one tracking pack
(`tracking.tar.zst`), built in CI by `tools/packs/build.sh` from the pinned sources
None of these files ship in the APK. The app downloads them on first use as part of the VR pack
(`vr.tar.zst`), built in CI by `tools/packs/build.sh` from the pinned sources
below, together with `libopencv_java4.so` and `libmediapipe_tasks_jni.so` taken unchanged from
the OpenCV and MediaPipe Maven AARs.
the OpenCV and MediaPipe Maven AARs (OpenCV 4.13.0 is Apache License 2.0, `LICENSE_OPENCV` here).
The pack carries these licenses and MediaPipe's NOTICE in `licenses/`, and Setup can uninstall it.
[MediaPipe](https://github.com/google-ai-edge/mediapipe) Tasks Vision 1.0.0
(`com.google.mediapipe:tasks-vision`, shared with the Luma stereo tracking pipeline;
@@ -13,7 +14,7 @@ copyright Google LLC and the MediaPipe authors, Apache License 2.0, `LICENSE_MED
the player's body in each camera frame. It comes from Maven Central with its dependencies
(Guava, Flogger, protobuf-javalite and Google's `datatransport`), all Apache-2.0.
`pose_landmarker_lite.task` in the tracking pack (below) is MediaPipe's Pose Landmarker (Lite)
`pose_landmarker_lite.task` in the VR pack (below) is MediaPipe's Pose Landmarker (Lite)
model, BlazePose GHUM 3D, unchanged from
`https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task`
(SHA-256 `59929e1d1ee95287735ddd833b19cf4ac46d29bc7afddbbf6753c459690d574a`). Its
@@ -21,7 +22,7 @@ model, BlazePose GHUM 3D, unchanged from
licenses it under the Apache License 2.0 and lists its limits: one person, up to about 4 metres
from the camera, the head in view, and depth that is approximate rather than metric.
`hand_landmarker.task` in the tracking pack is MediaPipe's Hand Landmarker (full) model
`hand_landmarker.task` in the VR pack is MediaPipe's Hand Landmarker (full) model
bundle, a palm detector and a hand landmark model, unchanged from
`https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/1/hand_landmarker.task`
(SHA-256 `fbc2a30080c3c557093b5ddfc334698132eb341044ccee322ccf8bcf3607cde1`). Its
@@ -35,7 +36,7 @@ the official `palm_detection_lite.tflite` and `hand_landmark_lite.tflite` assets
`https://storage.googleapis.com/mediapipe-assets/`. It uses the matching tensor metadata and
associated labels from the Full task bundle. These models share the MediaPipe hand tracking
model card and Apache License 2.0. Source checksums and the generated bundle checksum are in
`tools/packs/tracking/hand_landmarker_lite.provenance.json`; `tools/build_hand_lite.py`
`tools/packs/vr/hand_landmarker_lite.provenance.json`; `tools/build_hand_lite.py`
reproduces the bundle with MediaPipe 0.10.21 metadata tooling.
[CameraX](https://developer.android.com/jetpack/androidx/releases/camera) 1.4.2
+32 -13
View File
@@ -2,7 +2,8 @@
# Builds the add-on packs the app downloads on first use instead of shipping in the APK:
# proot.tar.zst the patched proot and its loader (built by tools/proot)
# directaudio.tar.zst the Wine DirectAudio drivers (fetched by tools/directaudio/fetch.sh)
# tracking.tar.zst hand-tracking models and the OpenCV/MediaPipe native libraries
# vr.tar.zst the SteamVR driver and Vulkan layer (built by tools/vr), hand-tracking models,
# the OpenCV/MediaPipe native libraries, the Luma Ultra base calibration and their licenses
# xbox.tar.zst the Xbox backend (built by tools/xbox) for /usr/local/lib/droiddeck-xbox
# comet.tar.zst the GOG Galaxy companion (built by tools/comet) for /usr/local/lib/droiddeck-comet
# Only CI publishes these (.github/workflows/publish-packs.yml); the APK built from the same
@@ -16,8 +17,8 @@ out=${1:?usage: build.sh <out-dir>}
mkdir -p "$out"
out=$(cd "$out" && pwd)
linuxfs="$repo/app/src/main/assets/linuxfs/usr/local/lib"
# shellcheck source=tracking/release.env
source "$here/tracking/release.env"
# shellcheck source=vr/release.env
source "$here/vr/release.env"
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
@@ -65,28 +66,46 @@ EOF
echo "$name $(sha256 "$out/$name.tar.zst") $(wc -c < "$out/$name.tar.zst" | tr -d ' ')"
}
mkdir "$work/tracking"
mkdir "$work/vr"
fetch "https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/1/hand_landmarker.task" \
fbc2a30080c3c557093b5ddfc334698132eb341044ccee322ccf8bcf3607cde1 "$work/tracking/hand_landmarker.task"
fbc2a30080c3c557093b5ddfc334698132eb341044ccee322ccf8bcf3607cde1 "$work/vr/hand_landmarker.task"
fetch "https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task" \
59929e1d1ee95287735ddd833b19cf4ac46d29bc7afddbbf6753c459690d574a "$work/tracking/pose_landmarker_lite.task"
cp "$here/tracking/hand_landmarker_lite.task" "$work/tracking/"
[ "$(sha256 "$work/tracking/hand_landmarker_lite.task")" = 173c0f47ecee7e935bd4a1e93aa580756b4180c1307c07d709313e82c28672c8 ] || {
59929e1d1ee95287735ddd833b19cf4ac46d29bc7afddbbf6753c459690d574a "$work/vr/pose_landmarker_lite.task"
cp "$here/vr/hand_landmarker_lite.task" "$here/vr/luma-ultra-640x480.json" "$work/vr/"
[ "$(sha256 "$work/vr/hand_landmarker_lite.task")" = 173c0f47ecee7e935bd4a1e93aa580756b4180c1307c07d709313e82c28672c8 ] || {
echo "checksum mismatch for hand_landmarker_lite.task" >&2; exit 1; }
fetch "https://repo1.maven.org/maven2/org/opencv/opencv/${OPENCV_VERSION}/opencv-${OPENCV_VERSION}.aar" \
"$OPENCV_AAR_SHA256" "$work/opencv.aar"
fetch "https://dl.google.com/dl/android/maven2/com/google/mediapipe/tasks-core/${MEDIAPIPE_VERSION}/tasks-core-${MEDIAPIPE_VERSION}.aar" \
"$MEDIAPIPE_AAR_SHA256" "$work/tasks-core.aar"
unzip -q -j "$work/opencv.aar" jni/arm64-v8a/libopencv_java4.so -d "$work/tracking"
unzip -q -j "$work/tasks-core.aar" jni/arm64-v8a/libmediapipe_tasks_jni.so -d "$work/tracking"
chmod 0644 "$work/tracking"/*
unzip -q -j "$work/opencv.aar" jni/arm64-v8a/libopencv_java4.so -d "$work/vr"
unzip -q -j "$work/tasks-core.aar" jni/arm64-v8a/libmediapipe_tasks_jni.so -d "$work/vr"
chmod 0644 "$work/vr"/*
cp -R "$linuxfs/droiddeck-vr/droiddeck" "$linuxfs/droiddeck-vr/layer" "$work/vr/"
mkdir -p "$work/vr/licenses/droiddeck" "$work/vr/licenses/mediapipe" "$work/vr/licenses/opencv" "$work/vr/licenses/openvr" \
"$work/vr/licenses/gvr" "$work/vr/licenses/monado" "$work/vr/licenses/sdpolygon" "$work/vr/licenses/wayland"
cp "$repo/LICENSE" "$work/vr/licenses/droiddeck/LICENSE"
cp "$repo/docs/third-party/handtracking/LICENSE_MEDIAPIPE" "$work/vr/licenses/mediapipe/LICENSE"
unzip -q -p "$work/tasks-core.aar" META-INF/NOTICE > "$work/vr/licenses/mediapipe/NOTICE"
cp "$repo/docs/third-party/handtracking/LICENSE_OPENCV" "$work/vr/licenses/opencv/LICENSE"
cp "$repo/tools/vr/src/OPENVR_LICENSE" "$work/vr/licenses/openvr/LICENSE"
cp "$repo/docs/third-party/joycon/LICENSE_GVR" "$work/vr/licenses/gvr/LICENSE"
cp "$repo/docs/third-party/joycon/LICENSE_MONADO" "$work/vr/licenses/monado/LICENSE"
cp "$repo/docs/third-party/handtracking/LICENSE_SDPOLYGON" "$work/vr/licenses/sdpolygon/LICENSE"
{
sed -n '/@section page_copyright_wayland/,/\*\//p' "$repo/tools/vr/third_party/wayland/wayland-client-protocol.h" | sed -e '1,2d' -e '$d'
echo ' *'
sed -n '2,/\*\//p' "$repo/app/src/main/cpp/waylandcomp/generated/xdg-shell-protocol.c" | sed '$d'
} | sed -e 's/^ \* \{0,1\}//' > "$work/vr/licenses/wayland/COPYING"
mkdir "$work/proot"
install -m755 "$repo/app/src/main/jniLibs/arm64-v8a/libproot.so" "$repo/app/src/main/jniLibs/arm64-v8a/libproot-loader.so" "$work/proot/"
pack proot "$work/proot" libproot.so libproot-loader.so
pack directaudio "$repo/app/src/main/assets/directaudio" \
linux-wine11/version.txt linux-wine11-systhread/version.txt
pack tracking "$work/tracking" hand_landmarker.task hand_landmarker_lite.task pose_landmarker_lite.task \
libopencv_java4.so libmediapipe_tasks_jni.so
pack vr "$work/vr" hand_landmarker.task hand_landmarker_lite.task pose_landmarker_lite.task \
libopencv_java4.so libmediapipe_tasks_jni.so luma-ultra-640x480.json \
droiddeck/bin/linuxarm64/driver_droiddeck.so layer/libVkLayer_droiddeck_vr.so layer/VK_LAYER_DROIDDECK_vr_implicit.json \
licenses/droiddeck/LICENSE licenses/mediapipe/NOTICE licenses/wayland/COPYING
pack xbox "$linuxfs/droiddeck-xbox" version xodus-cli xodus-service
pack comet "$linuxfs/droiddeck-comet" version comet
File renamed without changes.
+5 -5
View File
@@ -15,11 +15,11 @@ MANIFEST = Path('app/build/runtime-inputs.json')
PACKS = Path('app/build/packs')
# Runtime trees shipped as add-on packs (tools/packs/build.sh) rather than inside the APK.
PACKED = {'assets/linuxfs/usr/local/lib/droiddeck-xbox/': 'xbox', 'assets/linuxfs/usr/local/lib/droiddeck-comet/': 'comet',
'assets/directaudio/': 'directaudio'}
'assets/linuxfs/usr/local/lib/droiddeck-vr/': 'vr', 'assets/directaudio/': 'directaudio'}
PACKED_FILES = {'lib/arm64-v8a/libproot.so': ('proot', 'libproot.so'),
'lib/arm64-v8a/libproot-loader.so': ('proot', 'libproot-loader.so')}
PACKED_LIBRARIES = ['lib/arm64-v8a/libopencv_java4.so', 'lib/arm64-v8a/libmediapipe_tasks_jni.so']
PACK_NAMES = ['proot', 'directaudio', 'tracking', 'xbox', 'comet']
PACK_NAMES = ['proot', 'directaudio', 'vr', 'xbox', 'comet']
SOURCE_PATHS = ['app/build.gradle', 'app/src/main/cpp/fakeinput_steam.cpp', 'app/src/main/assets/pulseaudio.tzst',
'tools/linuxfs', 'tools/proot', 'tools/aaudio-sink', 'tools/directaudio',
'tools/gamescope/release.env', 'tools/droiddeck-esync/release.env',
@@ -190,9 +190,9 @@ def check_apk(apk, root=ROOT):
names = set(package.namelist())
for library in PACKED_LIBRARIES:
if library in names:
raise ValueError('APK still carries ' + library + ', which the tracking pack provides')
if library.rsplit('/', 1)[1] not in packs['tracking']:
raise ValueError('Tracking pack missing ' + library)
raise ValueError('APK still carries ' + library + ', which the VR pack provides')
if library.rsplit('/', 1)[1] not in packs['vr']:
raise ValueError('VR pack missing ' + library)
for name, output in data['outputs'].items():
if name in PACKED_FILES:
pack, rel = PACKED_FILES[name]
+14 -7
View File
@@ -43,14 +43,15 @@ class RuntimeInputsTest(unittest.TestCase):
path.write_bytes(subprocess.run(['zstd', '-q', '-c'], input=stream.getvalue(), capture_output=True, check=True).stdout)
def packs(self):
self.pack('tracking', {library.rsplit('/', 1)[1]: b'library' for library in runtime.PACKED_LIBRARIES})
proot = {}
contents = {name: {} for name in runtime.PACK_NAMES}
contents['vr'].update({library.rsplit('/', 1)[1]: b'library' for library in runtime.PACKED_LIBRARIES})
for name, (pack, rel) in runtime.PACKED_FILES.items():
proot[rel] = (self.root / runtime.outputs(self.root)[name]).read_bytes()
self.pack('proot', proot)
contents[pack][rel] = (self.root / runtime.outputs(self.root)[name]).read_bytes()
for prefix, name in runtime.PACKED.items():
base = self.root / 'app/src/main' / prefix
self.pack(name, {path.relative_to(base).as_posix(): path.read_bytes() for path in base.rglob('*') if path.is_file()})
contents[name].update({path.relative_to(base).as_posix(): path.read_bytes() for path in base.rglob('*') if path.is_file()})
for name, files in contents.items():
self.pack(name, files)
@staticmethod
def in_apk(name):
@@ -146,9 +147,15 @@ class RuntimeInputsTest(unittest.TestCase):
with self.assertRaisesRegex(ValueError, 'xbox pack provides'):
runtime.check_apk(apk, self.root)
def test_an_apk_still_carrying_tracking_libraries_is_rejected(self):
def test_an_apk_still_carrying_vr_libraries_is_rejected(self):
apk = self.current_apk(self.root / 'bundled.apk', {runtime.PACKED_LIBRARIES[0]: b'library'})
with self.assertRaisesRegex(ValueError, 'tracking pack provides'):
with self.assertRaisesRegex(ValueError, 'VR pack provides'):
runtime.check_apk(apk, self.root)
def test_an_apk_still_carrying_the_steamvr_driver_is_rejected(self):
driver = 'assets/linuxfs/usr/local/lib/droiddeck-vr/droiddeck/bin/linuxarm64/driver_droiddeck.so'
apk = self.current_apk(self.root / 'bundled.apk', {driver: b'driver'})
with self.assertRaisesRegex(ValueError, 'vr pack provides'):
runtime.check_apk(apk, self.root)
def test_a_stale_pack_is_rejected(self):