Remove unused "system files" path from Citra upstream (previously commented out)

This code from Citra upstream was previously commented out/unused in the
release. Since Citra upstream no longer exists, it is safe to delete
this segment.
This commit is contained in:
amwatson 2024-03-05 16:45:24 -06:00
parent 207aca3b14
commit fb3f68a25a
20 changed files with 24 additions and 1051 deletions

View file

@ -220,14 +220,6 @@ object NativeLibrary {
val title: String val title: String
val message: String val message: String
when (error) { when (error) {
CoreError.ErrorSystemFiles -> {
title = emulationActivity.getString(R.string.system_archive_not_found)
message = emulationActivity.getString(
R.string.system_archive_not_found_message,
details.ifEmpty { emulationActivity.getString(R.string.system_archive_general) }
)
}
CoreError.ErrorSavestate -> { CoreError.ErrorSavestate -> {
title = emulationActivity.getString(R.string.save_load_error) title = emulationActivity.getString(R.string.save_load_error)
message = details message = details
@ -410,7 +402,6 @@ object NativeLibrary {
const val ErrorLoader = 4 const val ErrorLoader = 4
const val ErrorLoader_ErrorEncrypted = 5 const val ErrorLoader_ErrorEncrypted = 5
const val ErrorLoader_ErrorInvalidFormat = 6 const val ErrorLoader_ErrorInvalidFormat = 6
const val ErrorSystemFiles = 7
const val ShutdownRequested = 11 const val ShutdownRequested = 11
const val ErrorUnknown = 12 const val ErrorUnknown = 12
@ -629,7 +620,6 @@ object NativeLibrary {
} }
enum class CoreError { enum class CoreError {
ErrorSystemFiles,
ErrorSavestate, ErrorSavestate,
ErrorUnknown ErrorUnknown
} }

View file

@ -1,152 +0,0 @@
// Copyright 2023 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
package org.citra.citra_emu.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import org.citra.citra_emu.NativeLibrary.InstallStatus
import org.citra.citra_emu.R
import org.citra.citra_emu.databinding.DialogProgressBarBinding
import org.citra.citra_emu.viewmodel.GamesViewModel
import org.citra.citra_emu.viewmodel.SystemFilesViewModel
class DownloadSystemFilesDialogFragment : DialogFragment() {
private var _binding: DialogProgressBarBinding? = null
private val binding get() = _binding!!
private val downloadViewModel: SystemFilesViewModel by activityViewModels()
private val gamesViewModel: GamesViewModel by activityViewModels()
private lateinit var titles: LongArray
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
_binding = DialogProgressBarBinding.inflate(layoutInflater)
titles = requireArguments().getLongArray(TITLES)!!
binding.progressText.visibility = View.GONE
binding.progressBar.min = 0
binding.progressBar.max = titles.size
if (downloadViewModel.isDownloading.value != true) {
binding.progressBar.progress = 0
}
isCancelable = false
return MaterialAlertDialogBuilder(requireContext())
.setView(binding.root)
.setTitle(R.string.downloading_files)
.setMessage(R.string.downloading_files_description)
.setNegativeButton(android.R.string.cancel, null)
.create()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.apply {
launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
downloadViewModel.progress.collectLatest { binding.progressBar.progress = it }
}
}
launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
downloadViewModel.result.collect {
when (it) {
InstallStatus.Success -> {
downloadViewModel.clear()
dismiss()
MessageDialogFragment.newInstance(R.string.download_success, 0)
.show(requireActivity().supportFragmentManager, MessageDialogFragment.TAG)
gamesViewModel.setShouldSwapData(true)
}
InstallStatus.ErrorFailedToOpenFile,
InstallStatus.ErrorEncrypted,
InstallStatus.ErrorFileNotFound,
InstallStatus.ErrorInvalid,
InstallStatus.ErrorAborted -> {
downloadViewModel.clear()
dismiss()
MessageDialogFragment.newInstance(
R.string.download_failed,
R.string.download_failed_description
).show(requireActivity().supportFragmentManager, MessageDialogFragment.TAG)
gamesViewModel.setShouldSwapData(true)
}
InstallStatus.Cancelled -> {
downloadViewModel.clear()
dismiss()
MessageDialogFragment.newInstance(
R.string.download_cancelled,
R.string.download_cancelled_description
).show(requireActivity().supportFragmentManager, MessageDialogFragment.TAG)
}
// Do nothing on null
else -> {}
}
}
}
}
}
// Consider using WorkManager here. While the home menu can only really amount to
// about 150MBs, this could be a problem on inconsistent networks
downloadViewModel.download(titles)
}
override fun onResume() {
super.onResume()
val alertDialog = dialog as AlertDialog
val negativeButton = alertDialog.getButton(Dialog.BUTTON_NEGATIVE)
negativeButton.setOnClickListener {
downloadViewModel.cancel()
dialog?.setTitle(R.string.cancelling)
binding.progressBar.isIndeterminate = true
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
companion object {
const val TAG = "DownloadSystemFilesDialogFragment"
const val TITLES = "Titles"
fun newInstance(titles: LongArray): DownloadSystemFilesDialogFragment {
val dialog = DownloadSystemFilesDialogFragment()
val args = Bundle()
args.putLongArray(TITLES, titles)
dialog.arguments = args
return dialog
}
}
}

View file

@ -76,16 +76,6 @@ class HomeSettingsFragment : Fragment() {
R.drawable.ic_settings, R.drawable.ic_settings,
{ SettingsActivity.launch(requireContext(), SettingsFile.FILE_NAME_CONFIG, "") } { SettingsActivity.launch(requireContext(), SettingsFile.FILE_NAME_CONFIG, "") }
), ),
/*HomeSetting(
R.string.system_files,
R.string.system_files_description,
R.drawable.ic_system_update,
{
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
parentFragmentManager.primaryNavigationFragment?.findNavController()
?.navigate(R.id.action_homeSettingsFragment_to_systemFilesFragment)
}
),*/
HomeSetting( HomeSetting(
R.string.install_game_content, R.string.install_game_content,
R.string.install_game_content_description, R.string.install_game_content_description,

View file

@ -1,311 +0,0 @@
// Copyright 2023 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
package org.citra.citra_emu.fragments
import android.content.res.Resources
import android.os.Bundle
import android.text.Html
import android.text.method.LinkMovementMethod
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.findNavController
import androidx.preference.PreferenceManager
import com.google.android.material.textfield.MaterialAutoCompleteTextView
import com.google.android.material.transition.MaterialSharedAxis
import kotlinx.coroutines.launch
import org.citra.citra_emu.CitraApplication
import org.citra.citra_emu.HomeNavigationDirections
import org.citra.citra_emu.NativeLibrary
import org.citra.citra_emu.R
import org.citra.citra_emu.activities.EmulationActivity
import org.citra.citra_emu.databinding.FragmentSystemFilesBinding
import org.citra.citra_emu.features.settings.model.Settings
import org.citra.citra_emu.model.Game
import org.citra.citra_emu.utils.SystemSaveGame
import org.citra.citra_emu.viewmodel.GamesViewModel
import org.citra.citra_emu.viewmodel.HomeViewModel
import org.citra.citra_emu.viewmodel.SystemFilesViewModel
import org.citra.citra_emu.vr.VrActivity
class SystemFilesFragment : Fragment() {
private var _binding: FragmentSystemFilesBinding? = null
private val binding get() = _binding!!
private val homeViewModel: HomeViewModel by activityViewModels()
private val systemFilesViewModel: SystemFilesViewModel by activityViewModels()
private val gamesViewModel: GamesViewModel by activityViewModels()
private lateinit var regionValues: IntArray
private val systemTypeDropdown = DropdownItem(R.array.systemFileTypeValues)
private val systemRegionDropdown = DropdownItem(R.array.systemFileRegionValues)
private val SYS_TYPE = "SysType"
private val REGION = "Region"
private val REGION_START = "RegionStart"
private val homeMenuMap: MutableMap<String, String> = mutableMapOf()
private val WARNING_SHOWN = "SystemFilesWarningShown"
private class DropdownItem(val valuesId: Int) : AdapterView.OnItemClickListener {
var position = 0
fun getValue(resources: Resources): Int {
return resources.getIntArray(valuesId)[position]
}
override fun onItemClick(p0: AdapterView<*>?, view: View?, position: Int, id: Long) {
this.position = position
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
SystemSaveGame.load()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentSystemFilesBinding.inflate(layoutInflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
homeViewModel.setNavigationVisibility(visible = false, animated = true)
homeViewModel.setStatusBarShadeVisibility(visible = false)
val preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext)
if (!preferences.getBoolean(WARNING_SHOWN, false)) {
MessageDialogFragment.newInstance(
R.string.home_menu_warning,
R.string.home_menu_warning_description
).show(childFragmentManager, MessageDialogFragment.TAG)
preferences.edit()
.putBoolean(WARNING_SHOWN, true)
.apply()
}
binding.toolbarSystemFiles.setNavigationOnClickListener {
binding.root.findNavController().popBackStack()
}
// TODO: Remove workaround for text filtering issue in material components when fixed
// https://github.com/material-components/material-components-android/issues/1464
binding.dropdownSystemType.isSaveEnabled = false
binding.dropdownSystemRegion.isSaveEnabled = false
binding.dropdownSystemRegionStart.isSaveEnabled = false
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.CREATED) {
systemFilesViewModel.shouldRefresh.collect {
if (it) {
reloadUi()
systemFilesViewModel.setShouldRefresh(false)
}
}
}
}
reloadUi()
if (savedInstanceState != null) {
setDropdownSelection(
binding.dropdownSystemType,
systemTypeDropdown,
savedInstanceState.getInt(SYS_TYPE)
)
setDropdownSelection(
binding.dropdownSystemRegion,
systemRegionDropdown,
savedInstanceState.getInt(REGION)
)
binding.dropdownSystemRegionStart
.setText(savedInstanceState.getString(REGION_START), false)
}
setInsets()
}
override fun onSaveInstanceState(outState: Bundle) {
outState.putInt(SYS_TYPE, systemTypeDropdown.position)
outState.putInt(REGION, systemRegionDropdown.position)
outState.putString(REGION_START, binding.dropdownSystemRegionStart.text.toString())
}
override fun onPause() {
super.onPause()
SystemSaveGame.save()
}
private fun reloadUi() {
val preferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext)
binding.switchRunSystemSetup.isChecked = SystemSaveGame.getIsSystemSetupNeeded()
binding.switchRunSystemSetup.setOnCheckedChangeListener { _, isChecked ->
SystemSaveGame.setSystemSetupNeeded(isChecked)
}
val showHomeApps = preferences.getBoolean(Settings.PREF_SHOW_HOME_APPS, false)
binding.switchShowApps.isChecked = showHomeApps
binding.switchShowApps.setOnCheckedChangeListener { _, isChecked ->
preferences.edit()
.putBoolean(Settings.PREF_SHOW_HOME_APPS, isChecked)
.apply()
gamesViewModel.setShouldSwapData(true)
}
if (!NativeLibrary.areKeysAvailable()) {
binding.apply {
systemType.isEnabled = false
systemRegion.isEnabled = false
buttonDownloadHomeMenu.isEnabled = false
textKeysMissing.visibility = View.VISIBLE
textKeysMissingHelp.visibility = View.VISIBLE
textKeysMissingHelp.text =
Html.fromHtml(getString(R.string.how_to_get_keys), Html.FROM_HTML_MODE_LEGACY)
textKeysMissingHelp.movementMethod = LinkMovementMethod.getInstance()
}
} else {
populateDownloadOptions()
}
binding.buttonDownloadHomeMenu.setOnClickListener {
val titleIds = NativeLibrary.getSystemTitleIds(
systemTypeDropdown.getValue(resources),
systemRegionDropdown.getValue(resources)
)
DownloadSystemFilesDialogFragment.newInstance(titleIds).show(
childFragmentManager,
DownloadSystemFilesDialogFragment.TAG
)
}
populateHomeMenuOptions()
binding.buttonStartHomeMenu.setOnClickListener {
val menuPath = homeMenuMap[binding.dropdownSystemRegionStart.text.toString()]!!
val menu = Game(
title = getString(R.string.home_menu),
path = menuPath,
filename = ""
)
// val action = HomeNavigationDirections.actionGlobalEmulationActivity(menu)
// binding.root.findNavController().navigate(action)
VrActivity.launch(CitraApplication.appContext, menu.path, menu.title)
}
}
private fun populateDropdown(
dropdown: MaterialAutoCompleteTextView,
valuesId: Int,
dropdownItem: DropdownItem
) {
val valuesAdapter = ArrayAdapter.createFromResource(
requireContext(),
valuesId,
R.layout.support_simple_spinner_dropdown_item
)
dropdown.setAdapter(valuesAdapter)
dropdown.onItemClickListener = dropdownItem
}
private fun setDropdownSelection(
dropdown: MaterialAutoCompleteTextView,
dropdownItem: DropdownItem,
selection: Int
) {
if (dropdown.adapter != null) {
dropdown.setText(dropdown.adapter.getItem(selection).toString(), false)
}
dropdownItem.position = selection
}
private fun populateDownloadOptions() {
populateDropdown(binding.dropdownSystemType, R.array.systemFileTypes, systemTypeDropdown)
populateDropdown(
binding.dropdownSystemRegion,
R.array.systemFileRegions,
systemRegionDropdown
)
setDropdownSelection(
binding.dropdownSystemType,
systemTypeDropdown,
systemTypeDropdown.position
)
setDropdownSelection(
binding.dropdownSystemRegion,
systemRegionDropdown,
systemRegionDropdown.position
)
}
private fun populateHomeMenuOptions() {
regionValues = resources.getIntArray(R.array.systemFileRegionValues)
val regionEntries = resources.getStringArray(R.array.systemFileRegions)
regionValues.forEachIndexed { i: Int, region: Int ->
val regionString = regionEntries[i]
val regionPath = NativeLibrary.getHomeMenuPath(region)
homeMenuMap[regionString] = regionPath
}
val availableMenus = homeMenuMap.filter { it.value != "" }
if (availableMenus.isNotEmpty()) {
binding.systemRegionStart.isEnabled = true
binding.buttonStartHomeMenu.isEnabled = true
binding.dropdownSystemRegionStart.setAdapter(
ArrayAdapter(
requireContext(),
R.layout.support_simple_spinner_dropdown_item,
availableMenus.keys.toList()
)
)
binding.dropdownSystemRegionStart.setText(availableMenus.keys.first(), false)
}
}
private fun setInsets() =
ViewCompat.setOnApplyWindowInsetsListener(
binding.root
) { _: View, windowInsets: WindowInsetsCompat ->
val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout())
val leftInsets = barInsets.left + cutoutInsets.left
val rightInsets = barInsets.right + cutoutInsets.right
val mlpAppBar = binding.toolbarSystemFiles.layoutParams as ViewGroup.MarginLayoutParams
mlpAppBar.leftMargin = leftInsets
mlpAppBar.rightMargin = rightInsets
binding.toolbarSystemFiles.layoutParams = mlpAppBar
val mlpScrollSystemFiles =
binding.scrollSystemFiles.layoutParams as ViewGroup.MarginLayoutParams
mlpScrollSystemFiles.leftMargin = leftInsets
mlpScrollSystemFiles.rightMargin = rightInsets
binding.scrollSystemFiles.layoutParams = mlpScrollSystemFiles
binding.scrollSystemFiles.updatePadding(bottom = barInsets.bottom)
windowInsets
}
}

View file

@ -1,139 +0,0 @@
// Copyright 2023 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
package org.citra.citra_emu.viewmodel
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancelChildren
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.yield
import org.citra.citra_emu.NativeLibrary
import org.citra.citra_emu.NativeLibrary.InstallStatus
import org.citra.citra_emu.utils.Log
import java.util.concurrent.atomic.AtomicInteger
import kotlin.coroutines.CoroutineContext
import kotlin.math.min
class SystemFilesViewModel : ViewModel() {
private var job: Job
private val coroutineContext: CoroutineContext
get() = Dispatchers.IO + job
val isDownloading get() = _isDownloading.asStateFlow()
private val _isDownloading = MutableStateFlow(false)
val progress get() = _progress.asStateFlow()
private val _progress = MutableStateFlow(0)
val result get() = _result.asStateFlow()
private val _result = MutableStateFlow<InstallStatus?>(null)
val shouldRefresh get() = _shouldRefresh.asStateFlow()
private val _shouldRefresh = MutableStateFlow(false)
private var cancelled = false
private val RETRY_AMOUNT = 3
init {
job = Job()
clear()
}
fun setShouldRefresh(refresh: Boolean) {
_shouldRefresh.value = refresh
}
fun setProgress(progress: Int) {
_progress.value = progress
}
fun download(titles: LongArray) {
if (isDownloading.value) {
return
}
clear()
_isDownloading.value = true
Log.debug("System menu download started.")
val minExecutors = min(Runtime.getRuntime().availableProcessors(), titles.size)
val segment = (titles.size / minExecutors)
val atomicProgress = AtomicInteger(0)
for (i in 0 until minExecutors) {
val titlesSegment = if (i < minExecutors - 1) {
titles.copyOfRange(i * segment, (i + 1) * segment)
} else {
titles.copyOfRange(i * segment, titles.size)
}
CoroutineScope(coroutineContext).launch {
titlesSegment.forEach { title: Long ->
// Notify UI of cancellation before ending coroutine
if (cancelled) {
_result.value = InstallStatus.ErrorAborted
cancelled = false
}
// Takes a moment to see if the coroutine was cancelled
yield()
// Retry downloading a title repeatedly
for (j in 0 until RETRY_AMOUNT) {
val result = tryDownloadTitle(title)
if (result == InstallStatus.Success) {
break
} else if (j == RETRY_AMOUNT - 1) {
_result.value = result
return@launch
}
Log.warning("Download for title{$title} failed, retrying in 3s...")
delay(3000L)
}
Log.debug("Successfully installed title - $title")
setProgress(atomicProgress.incrementAndGet())
Log.debug("System File Progress - ${atomicProgress.get()} / ${titles.size}")
if (atomicProgress.get() == titles.size) {
_result.value = InstallStatus.Success
setShouldRefresh(true)
}
}
}
}
}
private fun tryDownloadTitle(title: Long): InstallStatus {
val result = NativeLibrary.downloadTitleFromNus(title)
if (result != InstallStatus.Success) {
Log.error("Failed to install title $title with error - $result")
}
return result
}
fun clear() {
Log.debug("Clearing")
job.cancelChildren()
job = Job()
_progress.value = 0
_result.value = null
_isDownloading.value = false
cancelled = false
}
fun cancel() {
Log.debug("Canceling system file download.")
cancelled = true
job.cancelChildren()
job = Job()
_progress.value = 0
_result.value = InstallStatus.Cancelled
}
}

View file

@ -1,219 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinator_about"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_about"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar_system_files"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_back"
app:title="@string/system_files" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/scroll_system_files"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadeScrollbars="false"
android:scrollbars="vertical"
android:clipToPadding="false"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:orientation="vertical"
android:paddingBottom="16dp"
android:layout_weight="1">
<com.google.android.material.textview.MaterialTextView
style="@style/TextAppearance.Material3.TitleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/download_system_files"
android:textAlignment="viewStart" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/system_type"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/system_type"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/dropdown_system_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/system_region"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/emulated_region"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/dropdown_system_region"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/button_download_home_menu"
style="@style/Widget.Material3.Button.UnelevatedButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/download" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_keys_missing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/keys_missing"
android:textAlignment="viewStart"
android:visibility="gone" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_keys_missing_help"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
android:visibility="gone"
tools:text="How to get keys?" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:orientation="vertical"
android:paddingBottom="16dp"
android:layout_weight="1">
<com.google.android.material.textview.MaterialTextView
style="@style/TextAppearance.Material3.TitleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/boot_home_menu"
android:textAlignment="viewStart" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/system_region_start"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/emulated_region"
android:enabled="false"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/dropdown_system_region_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/button_start_home_menu"
style="@style/Widget.Material3.Button.UnelevatedButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:enabled="false"
android:text="@string/start" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_run_system_setup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/run_system_setup"
android:textAlignment="viewStart"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/switch_run_system_setup"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/switch_run_system_setup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text_show_apps"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/show_home_apps"
android:textAlignment="viewStart"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/switch_show_apps"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/switch_show_apps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -16,9 +16,6 @@
<action <action
android:id="@+id/action_homeSettingsFragment_to_aboutFragment" android:id="@+id/action_homeSettingsFragment_to_aboutFragment"
app:destination="@id/aboutFragment" /> app:destination="@id/aboutFragment" />
<action
android:id="@+id/action_homeSettingsFragment_to_systemFilesFragment"
app:destination="@id/systemFilesFragment" />
<action <action
android:id="@+id/action_homeSettingsFragment_to_driverManagerFragment" android:id="@+id/action_homeSettingsFragment_to_driverManagerFragment"
app:destination="@id/driverManagerFragment" /> app:destination="@id/driverManagerFragment" />
@ -70,11 +67,6 @@
app:destination="@id/emulationActivity" app:destination="@id/emulationActivity"
app:launchSingleTop="true" /> app:launchSingleTop="true" />
<fragment
android:id="@+id/systemFilesFragment"
android:name="org.citra.citra_emu.fragments.SystemFilesFragment"
android:label="SystemFilesFragment" />
<fragment <fragment
android:id="@+id/cheatsFragment" android:id="@+id/cheatsFragment"
android:name="org.citra.citra_emu.features.cheats.ui.CheatsFragment" android:name="org.citra.citra_emu.features.cheats.ui.CheatsFragment"

View file

@ -83,24 +83,6 @@
<string name="input_message_analog_only">Diese Eingabe muss an einen Gamepad-Analogstick oder das Steuerkreuz gebunden sein!</string> <string name="input_message_analog_only">Diese Eingabe muss an einen Gamepad-Analogstick oder das Steuerkreuz gebunden sein!</string>
<string name="input_message_button_only">Diese Eingabe muss an einen Gamepad-Knopf gebunden sein!</string> <string name="input_message_button_only">Diese Eingabe muss an einen Gamepad-Knopf gebunden sein!</string>
<!-- System files strings -->
<string name="system_files">Systemdateien</string>
<string name="download_system_files">Systemdateien herunterladen</string>
<string name="system_type">Systemtyp</string>
<string name="download">Download</string>
<string name="start">Start</string>
<string name="system_type_minimal">Minimal</string>
<string name="system_type_new_3ds">New 3DS</string>
<string name="downloading_files">Dateien werden heruntergeladen...</string>
<string name="downloading_files_description">Bitte nicht die App schließen.</string>
<string name="download_failed">Download fehlgeschlagen</string>
<string name="download_success">Download abgeschlossen!</string>
<string name="download_cancelled">Download abgebrochen</string>
<string name="cancelling">Abbrechen...</string>
<string name="home_menu">HOME-Menü</string>
<string name="home_menu_warning">Systemdatei-Warnung</string>
<string name="home_menu_warning_description">Aufgrund der langsamen Zugriffsgeschwindigkeit von Android auf CitraVRs Dateien, kann das Herunterladen mehrerer Versionen von Systemdateien das Laden von Spielen, Speicherständen und der Spieleliste erheblich verlangsamen. Laden Sie nur die Dateien herunter, die Sie benötigen, um Probleme mit den Ladezeiten zu vermeiden.</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Knöpfe</string> <string name="generic_buttons">Knöpfe</string>
<string name="button">Knopf</string> <string name="button">Knopf</string>
@ -545,4 +527,6 @@ Nachdem die Shader geladen wurden, werden sie auf dem Gerät gespeichert und ver
<string name="vr_immersive_pos_factor_description">Stellt ein, wie stark die Bewegung nach links/rechts/oben/unten die Kameraperspektive im Spiel beeinflusst (0 = deaktiviert).</string> <string name="vr_immersive_pos_factor_description">Stellt ein, wie stark die Bewegung nach links/rechts/oben/unten die Kameraperspektive im Spiel beeinflusst (0 = deaktiviert).</string>
<string name="vr_immersive_pos_game_scaler_title">Positionale Bewegungsfaktor-Verstärker</string> <string name="vr_immersive_pos_game_scaler_title">Positionale Bewegungsfaktor-Verstärker</string>
<string name="vr_immersive_pos_game_scaler_description">Stellt ein, wie stark sich die Bewegung nach links/rechts/hoch/runter auf die Spielkamera auswirkt. Manche Spiele erfordern größere Werte, daher multipliziert dies den Positionsfaktor für die Bewegung.</string> <string name="vr_immersive_pos_game_scaler_description">Stellt ein, wie stark sich die Bewegung nach links/rechts/hoch/runter auf die Spielkamera auswirkt. Manche Spiele erfordern größere Werte, daher multipliziert dies den Positionsfaktor für die Bewegung.</string>
<string name="cancelling">Abbruch...</string>
<string name="start">Start</string>
</resources> </resources>

View file

@ -116,33 +116,6 @@
<string name="input_message_analog_only">¡Este control debe asignarse a un stick analógico del mando o a un eje del Pad de Control!</string> <string name="input_message_analog_only">¡Este control debe asignarse a un stick analógico del mando o a un eje del Pad de Control!</string>
<string name="input_message_button_only">¡Este control debe asignarse a un botón del mando!</string> <string name="input_message_button_only">¡Este control debe asignarse a un botón del mando!</string>
<!-- System files strings -->
<string name="system_files">Archivos de Sistema</string>
<string name="system_files_description">Descarga archivos de sistema para obtener los archivos de Mii, cargar el menú HOME, y más.</string>
<string name="download_system_files">Descargar Archivos de Sistema</string>
<string name="boot_home_menu">Cargar el Menú HOME</string>
<string name="system_type">Tipo de Sistema</string>
<string name="download">Descargar</string>
<string name="start">Iniciar</string>
<string name="keys_missing">CitraVR no tiene las claves para descargar los archivos de sistema.</string>
<string name="how_to_get_keys"><![CDATA[<a href=\"https://citra-emu.org/wiki/aes-keys/\">¿Cómo obtener las claves?</a>]]></string>
<string name="show_home_apps">Mostrar las apps del menú HOME en la lista de juegos</string>
<string name="run_system_setup">Ejecutar la Configuración de la consola cuando se ejecute el Menú HOME</string>
<string name="system_type_minimal">Mínimo</string>
<string name="system_type_old_3ds">Old 3DS</string>
<string name="system_type_new_3ds">New 3DS</string>
<string name="downloading_files">Descargando Archivos...</string>
<string name="downloading_files_description">Por favor, no cierre la app.</string>
<string name="download_failed">Descarga Fallida</string>
<string name="download_failed_description">Asegúrese de estar conectado/a al Internet e inténtelo de nuevo.</string>
<string name="download_success">¡Descarga Completada!</string>
<string name="download_cancelled">Descarga Cancelada</string>
<string name="download_cancelled_description">Por favor, reinicie la descarga para prevenir problemas con los archivos de sistema incompletos.</string>
<string name="cancelling">Cancelando...</string>
<string name="home_menu">Menú HOME</string>
<string name="home_menu_warning">Advertencia de los Archivos de Sistema</string>
<string name="home_menu_warning_description">Debido a la lentitud del framework de Android de acceso al almacenamiento para acceder a los archivos de CitraVR, descargar múltiples versiones de los archivos de sistema pueden aumentar trágicamente los tiempos de carga para los juegos, los estados, y la lista de juegos. Sólo descarga los archivos que necesites para evitar problemas con las velocidades de carga.</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Botones</string> <string name="generic_buttons">Botones</string>
<string name="button">Botón</string> <string name="button">Botón</string>
@ -687,4 +660,6 @@ Después de que los shaders se carguen, se almacenan en el dispositivo, lo que e
<string name="vr_immersive_pos_factor_description">Ajusta cuánto afecta el movimiento hacia la izquierda/derecha/arriba/abajo a la cámara del juego (0 = desactivado)</string> <string name="vr_immersive_pos_factor_description">Ajusta cuánto afecta el movimiento hacia la izquierda/derecha/arriba/abajo a la cámara del juego (0 = desactivado)</string>
<string name="vr_immersive_pos_game_scaler_title">Multiplicador del Factor de Movimiento Posicional</string> <string name="vr_immersive_pos_game_scaler_title">Multiplicador del Factor de Movimiento Posicional</string>
<string name="vr_immersive_pos_game_scaler_description">Ajusta cuánto afecta el movimiento izquierda/derecha/arriba/abajo a la cámara del juego, algunos juegos requieren valores más grandes, por lo que esto multiplica el Factor de Movimiento Posicional.</string> <string name="vr_immersive_pos_game_scaler_description">Ajusta cuánto afecta el movimiento izquierda/derecha/arriba/abajo a la cámara del juego, algunos juegos requieren valores más grandes, por lo que esto multiplica el Factor de Movimiento Posicional.</string>
<string name="cancelling">Cancelando...</string>
<string name="start">Comienzo</string>
</resources> </resources>

View file

@ -122,4 +122,6 @@ Shadereiden latautumisen jälkeen ne tallennetaan laitteeseen, mikä estää nä
<string name="vr_immersive_pos_factor_description">Säätää, kuinka paljon liike vasemmalle/oikealle/ylös/alas vaikuttaa pelikameraan (0 = pois käytöstä)</string> <string name="vr_immersive_pos_factor_description">Säätää, kuinka paljon liike vasemmalle/oikealle/ylös/alas vaikuttaa pelikameraan (0 = pois käytöstä)</string>
<string name="vr_immersive_pos_game_scaler_title">Paikallisen Liikkeen Tekijän Kerroin</string> <string name="vr_immersive_pos_game_scaler_title">Paikallisen Liikkeen Tekijän Kerroin</string>
<string name="vr_immersive_pos_game_scaler_description">Säätää kuinka paljon liikkuminen vasemmalta/oikealta/ylös/alas vaikuttaa pelikameraan, joidenkin pelien vaatiessa suurempia arvoja, joten tämä kertoo Liike Kertoimen sijaintiin vaikuttavalta tekijältä.</string> <string name="vr_immersive_pos_game_scaler_description">Säätää kuinka paljon liikkuminen vasemmalta/oikealta/ylös/alas vaikuttaa pelikameraan, joidenkin pelien vaatiessa suurempia arvoja, joten tämä kertoo Liike Kertoimen sijaintiin vaikuttavalta tekijältä.</string>
<string name="cancelling">Peruutetaan...</string>
<string name="start">Käynnistä</string>
</resources> </resources>

View file

@ -117,34 +117,6 @@
<string name="input_message_analog_only">Cette commande doit être rattachée à un stick analogique de manette ou à un axe de la croix directionnelle !</string> <string name="input_message_analog_only">Cette commande doit être rattachée à un stick analogique de manette ou à un axe de la croix directionnelle !</string>
<string name="input_message_button_only">Cette commande doit être rattachée à un bouton de manette !</string> <string name="input_message_button_only">Cette commande doit être rattachée à un bouton de manette !</string>
<!-- System files strings -->
<string name="system_files">Fichiers système</string>
<string name="system_files_description">Téléchargez les fichiers système pour obtenir des fichiers Mii, démarrer le menu HOME, et plus encore.</string>
<string name="download_system_files">Télécharger les fichiers système</string>
<string name="boot_home_menu">Démarrer le menu HOME</string>
<string name="system_type">Type de système</string>
<string name="download">Télécharger</string>
<string name="start">Démarrer</string>
<string name="keys_missing">CitraVR ne dispose pas des clés nécessaires pour télécharger les fichiers système.</string>
<string name="how_to_get_keys"><![CDATA[<a href=\"https://citra-emu.org/wiki/aes-keys/\">Comment obtenir des clés ?</a>]]></string>
<string name="show_home_apps">Afficher les applications du menu HOME dans la liste des jeux</string>
<string name="run_system_setup">Exécuter la configuration système lorsque le menu HOME est lancé</string>
<string name="system_type_minimal">Minimal</string>
<string name="system_type_old_3ds">Old 3DS</string>
<string name="system_type_new_3ds">New 3DS</string>
<string name="downloading_files">Téléchargement des fichiers...</string>
<string name="downloading_files_description">Veuillez ne pas fermer l\'application.</string>
<string name="download_failed">Échec du téléchargement
 </string>
<string name="download_failed_description">Veuillez vous assurer que vous êtes connecté à Internet et réessayez.</string>
<string name="download_success">Téléchargement terminé !</string>
<string name="download_cancelled">Téléchargement annulé</string>
<string name="download_cancelled_description">Veuillez redémarrer le téléchargement pour éviter des problèmes avec des fichiers système incomplets.</string>
<string name="cancelling">Annulation...</string>
<string name="home_menu">Menu HOME</string>
<string name="home_menu_warning">Avertissement sur les fichiers système</string>
<string name="home_menu_warning_description">En raison de la lenteur du framework d\'accès au stockage d\'Android pour accéder aux fichiers de CitraVR, le téléchargement de plusieurs versions de fichiers système peut considérablement ralentir le chargement des jeux, des états de sauvegarde et de la liste des jeux. Téléchargez uniquement les fichiers dont vous avez besoin pour éviter tout problème de vitesse de chargement.</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Boutons</string> <string name="generic_buttons">Boutons</string>
<string name="button">Bouton</string> <string name="button">Bouton</string>
@ -687,4 +659,6 @@ Une fois les shaders chargés, ils sont enregistrés sur l\'appareil, ce qui emp
<string name="vr_immersive_pos_factor_description">Ajuste la mesure dans laquelle le mouvement gauche/droite/haut/bas affecte la caméra du jeu (0 = désactivé).</string> <string name="vr_immersive_pos_factor_description">Ajuste la mesure dans laquelle le mouvement gauche/droite/haut/bas affecte la caméra du jeu (0 = désactivé).</string>
<string name="vr_immersive_pos_game_scaler_title">Multiplicateur du Facteur de Mouvement Positionnel</string> <string name="vr_immersive_pos_game_scaler_title">Multiplicateur du Facteur de Mouvement Positionnel</string>
<string name="vr_immersive_pos_game_scaler_description">Ajuste la façon dont le mouvement gauche/droite/haut/bas affecte la caméra du jeu, certains jeux nécessitent des valeurs plus grandes, donc cela multiplie le facteur de mouvement positionnel.</string> <string name="vr_immersive_pos_game_scaler_description">Ajuste la façon dont le mouvement gauche/droite/haut/bas affecte la caméra du jeu, certains jeux nécessitent des valeurs plus grandes, donc cela multiplie le facteur de mouvement positionnel.</string>
<string name="cancelling">Annulation...</string>
<string name="start">Commencer</string>
</resources> </resources>

View file

@ -276,4 +276,6 @@ Después de que se carguen los sombreadores, estos se guardan en el dispositivo,
<string name="vr_immersive_pos_factor_description">Regola quanto il movimento destra/sinistra/su/giù influisce sulla telecamera del gioco (0 = disattivato)</string> <string name="vr_immersive_pos_factor_description">Regola quanto il movimento destra/sinistra/su/giù influisce sulla telecamera del gioco (0 = disattivato)</string>
<string name="vr_immersive_pos_game_scaler_title">Moltiplicatore del Fattore di Movimento Posizionale</string> <string name="vr_immersive_pos_game_scaler_title">Moltiplicatore del Fattore di Movimento Posizionale</string>
<string name="vr_immersive_pos_game_scaler_description">Regola quanto i movimenti sinistra/destra/su/giù influiscono sulla telecamera di gioco; alcuni giochi richiedono valori più elevati, quindi questo moltiplica il fattore di movimento posizionale.</string> <string name="vr_immersive_pos_game_scaler_description">Regola quanto i movimenti sinistra/destra/su/giù influiscono sulla telecamera di gioco; alcuni giochi richiedono valori più elevati, quindi questo moltiplica il fattore di movimento posizionale.</string>
<string name="cancelling">Annullamento in corso...</string>
<string name="start">Inizio</string>
</resources> </resources>

View file

@ -138,4 +138,6 @@
<string name="vr_immersive_pos_factor_description">「ゲームのカメラに左/右/上/下の移動がどれくらい影響を与えるかを調整します0 = 無効)」</string> <string name="vr_immersive_pos_factor_description">「ゲームのカメラに左/右/上/下の移動がどれくらい影響を与えるかを調整します0 = 無効)」</string>
<string name="vr_immersive_pos_game_scaler_title">位置移動ファクターの乗数変更</string> <string name="vr_immersive_pos_game_scaler_title">位置移動ファクターの乗数変更</string>
<string name="vr_immersive_pos_game_scaler_description">ゲームカメラに左右、上下の移動がどれだけ影響するかを調整します。一部のゲームではより大きな値が必要になる場合があるため、これは位置移動係数を乗算します。</string> <string name="vr_immersive_pos_game_scaler_description">ゲームカメラに左右、上下の移動がどれだけ影響するかを調整します。一部のゲームではより大きな値が必要になる場合があるため、これは位置移動係数を乗算します。</string>
<string name="cancelling">キャンセル中...</string>
<string name="start">開始</string>
</resources> </resources>

View file

@ -193,4 +193,6 @@
<string name="vr_immersive_pos_factor_description">게임 카메라에 좌/우/상/하로 움직임이 얼마나 영향을 미치는지 조절합니다 (0 = 비활성화)</string> <string name="vr_immersive_pos_factor_description">게임 카메라에 좌/우/상/하로 움직임이 얼마나 영향을 미치는지 조절합니다 (0 = 비활성화)</string>
<string name="vr_immersive_pos_game_scaler_title">위치 이동 요소 배수</string> <string name="vr_immersive_pos_game_scaler_title">위치 이동 요소 배수</string>
<string name="vr_immersive_pos_game_scaler_description">게임 카메라에 좌/우/위/아래로 이동이 얼마나 영향을 미치는지 조정합니다. 일부 게임에서는 더 큰 값이 필요할 수 있으므로 이 설정은 위치 이동 계수에 곱해집니다.</string> <string name="vr_immersive_pos_game_scaler_description">게임 카메라에 좌/우/위/아래로 이동이 얼마나 영향을 미치는지 조정합니다. 일부 게임에서는 더 큰 값이 필요할 수 있으므로 이 설정은 위치 이동 계수에 곱해집니다.</string>
<string name="cancelling">취소 중...</string>
<string name="start">시작</string>
</resources> </resources>

View file

@ -191,4 +191,6 @@
<string name="vr_immersive_pos_factor_description">Justerer hvor mye bevegelse venstre/høyre/opp/ned påvirker spilkameraet (0 = deaktivert)</string> <string name="vr_immersive_pos_factor_description">Justerer hvor mye bevegelse venstre/høyre/opp/ned påvirker spilkameraet (0 = deaktivert)</string>
<string name="vr_immersive_pos_game_scaler_title">Posisjonell Bevegelsesfaktor Multiplikator</string> <string name="vr_immersive_pos_game_scaler_title">Posisjonell Bevegelsesfaktor Multiplikator</string>
<string name="vr_immersive_pos_game_scaler_description">Justerer hvor mye bevegelse venstre/høyre/opp/ned påvirker spillekameraet, noen spill krever større verdier, så dette multipliserer den posisjonelle bevegelsesfaktoren.</string> <string name="vr_immersive_pos_game_scaler_description">Justerer hvor mye bevegelse venstre/høyre/opp/ned påvirker spillekameraet, noen spill krever større verdier, så dette multipliserer den posisjonelle bevegelsesfaktoren.</string>
<string name="cancelling">Avbryter...</string>
<string name="start">Starte</string>
</resources> </resources>

View file

@ -110,24 +110,6 @@
<string name="input_message_analog_only">Este controle tem de ser mapeado a um eixo analógico do gamepad ou um eixo de D-pad!</string> <string name="input_message_analog_only">Este controle tem de ser mapeado a um eixo analógico do gamepad ou um eixo de D-pad!</string>
<string name="input_message_button_only">Este controle tem de ser mapeado a um botão do gamepad!</string> <string name="input_message_button_only">Este controle tem de ser mapeado a um botão do gamepad!</string>
<!-- System files strings -->
<string name="system_files">Arquivos do Sistema</string>
<string name="boot_home_menu">Iniciar o MENU INICIAL</string>
<string name="system_type">Tipo de sistema</string>
<string name="download">Baixar</string>
<string name="show_home_apps">Mostrar aplicativos do MENU INICIAL na lista de jogos</string>
<string name="system_type_old_3ds">3DS Antigo</string>
<string name="system_type_new_3ds">Novo 3DS</string>
<string name="downloading_files">Baixando arquivos...</string>
<string name="downloading_files_description">Por favor, não feche o aplicativo.</string>
<string name="download_failed">Falha no download</string>
<string name="download_failed_description">Por favor, certifique-se de que está conectado à internet e tente novamente.</string>
<string name="download_success">Download Completo!</string>
<string name="download_cancelled">Download Cancelado</string>
<string name="download_cancelled_description">Por favor, reinicie o download para evitar problemas com arquivos do sistema incompletos.</string>
<string name="cancelling">Cancelando...</string>
<string name="home_menu">MENU INICIAL</string>
<string name="home_menu_warning">Aviso de Arquivos do Sistema</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Botões</string> <string name="generic_buttons">Botões</string>
<!-- Core settings strings --> <!-- Core settings strings -->
@ -347,4 +329,6 @@ Após os shaders serem carregados, eles são armazenados no dispositivo, evitand
<string name="vr_immersive_pos_factor_description">Ajusta o quanto o movimento para esquerda/direita/cima/baixo afeta a câmera do jogo (0 = desativado).</string> <string name="vr_immersive_pos_factor_description">Ajusta o quanto o movimento para esquerda/direita/cima/baixo afeta a câmera do jogo (0 = desativado).</string>
<string name="vr_immersive_pos_game_scaler_title">Fator de Multiplicação do Fator de Movimento Posicional</string> <string name="vr_immersive_pos_game_scaler_title">Fator de Multiplicação do Fator de Movimento Posicional</string>
<string name="vr_immersive_pos_game_scaler_description">Ajusta o quanto o movimento para a esquerda/direita/cima/baixo afeta a câmera do jogo, alguns jogos exigem valores maiores, então isso multiplica o Fator de Movimento Posicional.</string> <string name="vr_immersive_pos_game_scaler_description">Ajusta o quanto o movimento para a esquerda/direita/cima/baixo afeta a câmera do jogo, alguns jogos exigem valores maiores, então isso multiplica o Fator de Movimento Posicional.</string>
<string name="cancelling">Cancelando...</string>
<string name="start">Iniciar</string>
</resources> </resources>

View file

@ -116,33 +116,6 @@
<string name="input_message_analog_only">Данный элемент управления должен быть привязан к аналоговому стику или крестовине геймпада!</string> <string name="input_message_analog_only">Данный элемент управления должен быть привязан к аналоговому стику или крестовине геймпада!</string>
<string name="input_message_button_only">Данный элемент управления должен быть привязан к кнопке геймпада!</string> <string name="input_message_button_only">Данный элемент управления должен быть привязан к кнопке геймпада!</string>
<!-- System files strings -->
<string name="system_files">Системные файлы</string>
<string name="system_files_description">Загрузка системных файлов для получения файлов Mii, запуска меню HOME и другое</string>
<string name="download_system_files">Загрузка системных файлов</string>
<string name="boot_home_menu">Запуск меню HOME</string>
<string name="system_type">Тип системы</string>
<string name="download">Скачать</string>
<string name="start">Запустить</string>
<string name="keys_missing">В CitraVR отсутствуют ключи для загрузки системных файлов.</string>
<string name="how_to_get_keys"><![CDATA[<a href=\"https://citra-emu.org/wiki/aes-keys/\">Как получить ключи?</a>]]></string>
<string name="show_home_apps">Показывать приложения меню HOME в списке игр</string>
<string name="run_system_setup">Запускать настройку системы при загрузке меню HOME</string>
<string name="system_type_minimal">Минимальный</string>
<string name="system_type_old_3ds">Старая модель 3DS</string>
<string name="system_type_new_3ds">Новая модель 3DS</string>
<string name="downloading_files">Загрузка файлов...</string>
<string name="downloading_files_description">Пожалуйста, не закрывайте приложение.</string>
<string name="download_failed">Ошибка загрузки</string>
<string name="download_failed_description">Пожалуйста, проверьте соединение с Интернет и повторите попытку.</string>
<string name="download_success">Загрузка завершена!</string>
<string name="download_cancelled">Загрузка отменена.</string>
<string name="download_cancelled_description">Пожалуйста, повторно запустите загрузку, чтобы избежать ошибок из-за неполных системных файлов.</string>
<string name="cancelling">Отмена...</string>
<string name="home_menu">Меню HOME</string>
<string name="home_menu_warning">Предупреждение о системных файлах</string>
<string name="home_menu_warning_description">Используемый в Android фреймворк SAF замедляет доступ к файлам CitraVR, поэтому скачивание нескольких версий системных файлов может существенно снизить скорость загрузки игр, сохранений и списка игр. Во избежание проблем со скоростью загрузки скачивайте только необходимые файлы.</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Кнопки</string> <string name="generic_buttons">Кнопки</string>
<string name="button">Кнопка</string> <string name="button">Кнопка</string>
@ -687,4 +660,6 @@
<string name="vr_immersive_pos_factor_description">Регулирует, насколько движение влево/вправо/вверх/вниз влияет на игровую камеру (0 = отключено).</string> <string name="vr_immersive_pos_factor_description">Регулирует, насколько движение влево/вправо/вверх/вниз влияет на игровую камеру (0 = отключено).</string>
<string name="vr_immersive_pos_game_scaler_title">Множитель фактора позиционного перемещения</string> <string name="vr_immersive_pos_game_scaler_title">Множитель фактора позиционного перемещения</string>
<string name="vr_immersive_pos_game_scaler_description">Настройка определяет, насколько движение влево/вправо/вверх/вниз влияет на камеру игры; в некоторых играх требуются большие значения, поэтому это умножает фактор перемещения положения.</string> <string name="vr_immersive_pos_game_scaler_description">Настройка определяет, насколько движение влево/вправо/вверх/вниз влияет на камеру игры; в некоторых играх требуются большие значения, поэтому это умножает фактор перемещения положения.</string>
<string name="cancelling">Отмена...</string>
<string name="start">Начать</string>
</resources> </resources>

View file

@ -116,33 +116,6 @@
<string name="input_message_analog_only">此操作只能绑定到游戏手柄的摇杆或十字方向键上!</string> <string name="input_message_analog_only">此操作只能绑定到游戏手柄的摇杆或十字方向键上!</string>
<string name="input_message_button_only">此操作只能绑定到游戏手柄的按键上!</string> <string name="input_message_button_only">此操作只能绑定到游戏手柄的按键上!</string>
<!-- System files strings -->
<string name="system_files">系统文件</string>
<string name="system_files_description">下载系统文件以获取 Mii 文件、启动 HOME 菜单以及更多</string>
<string name="download_system_files">下载系统文件</string>
<string name="boot_home_menu">启动 HOME 菜单</string>
<string name="system_type">系统类型</string>
<string name="download">下载</string>
<string name="start">开始</string>
<string name="keys_missing">CitraVR 缺失下载系统文件所需的密钥。</string>
<string name="how_to_get_keys"><![CDATA[<a href=\"https://citra-emu.org/wiki/aes-keys/\">如何获取密钥?</a>]]></string>
<string name="show_home_apps">在游戏列表中显示 HOME 菜单小程序</string>
<string name="run_system_setup">启动 HOME 菜单时运行系统设置</string>
<string name="system_type_minimal">最小化</string>
<string name="system_type_old_3ds">老版 3DS</string>
<string name="system_type_new_3ds">新版 3DS</string>
<string name="downloading_files">下载中...</string>
<string name="downloading_files_description">请不要关闭 CitraVR。</string>
<string name="download_failed">下载失败</string>
<string name="download_failed_description">请确保您的网络连接正常,然后重试。</string>
<string name="download_success">下载完成!</string>
<string name="download_cancelled">下载已取消</string>
<string name="download_cancelled_description">请重新下载,以防止系统文件不完整。</string>
<string name="cancelling">取消中...</string>
<string name="home_menu">HOME 菜单</string>
<string name="home_menu_warning">系统文件警告</string>
<string name="home_menu_warning_description">由于 Android 存储访问框架访问 CitraVR 文件的速度非常慢,下载多个版本的系统文件会大大降低游戏加载、即时存档和刷新游戏列表的速度。只下载您需要的文件,以免加载速度出现问题。</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">按键</string> <string name="generic_buttons">按键</string>
<string name="button">按键</string> <string name="button">按键</string>
@ -685,4 +658,6 @@
<string name="vr_immersive_pos_factor_description">调整左/右/上/下运动对游戏摄像机的影响程度0 = 禁用)</string> <string name="vr_immersive_pos_factor_description">调整左/右/上/下运动对游戏摄像机的影响程度0 = 禁用)</string>
<string name="vr_immersive_pos_game_scaler_title">位置运动因子倍增器</string> <string name="vr_immersive_pos_game_scaler_title">位置运动因子倍增器</string>
<string name="vr_immersive_pos_game_scaler_description">调整左/右/上/下的运动对游戏摄像机的影响程度,某些游戏需要更大的值,因此这个设置会将位置运动因子乘以一个标量。</string> <string name="vr_immersive_pos_game_scaler_description">调整左/右/上/下的运动对游戏摄像机的影响程度,某些游戏需要更大的值,因此这个设置会将位置运动因子乘以一个标量。</string>
<string name="cancelling">取消中...</string>
<string name="start">开始</string>
</resources> </resources>

View file

@ -200,36 +200,6 @@
<item>2</item> <item>2</item>
</integer-array> </integer-array>
<string-array name="systemFileRegions">
<item>@string/system_region_jpn</item>
<item>@string/system_region_usa</item>
<item>@string/system_region_eur</item>
<item>@string/system_region_aus</item>
<item>@string/system_region_chn</item>
<item>@string/system_region_kor</item>
<item>@string/system_region_twn</item>
</string-array>
<integer-array name="systemFileRegionValues">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</integer-array>
<string-array name="systemFileTypes">
<item>@string/system_type_minimal</item>
<item>@string/system_type_old_3ds</item>
<item>@string/system_type_new_3ds</item>
</string-array>
<integer-array name="systemFileTypeValues">
<item>1</item>
<item>2</item>
<item>4</item>
</integer-array>
<string-array name="soundOutputModes"> <string-array name="soundOutputModes">
<item>@string/mono</item> <item>@string/mono</item>
<item>@string/stereo</item> <item>@string/stereo</item>

View file

@ -130,36 +130,11 @@
<string name="input_message_analog_only">This control must be bound to a gamepad analog stick or D-pad axis!</string> <string name="input_message_analog_only">This control must be bound to a gamepad analog stick or D-pad axis!</string>
<string name="input_message_button_only">This control must be bound to a gamepad button!</string> <string name="input_message_button_only">This control must be bound to a gamepad button!</string>
<!-- System files strings -->
<string name="system_files">System Files</string>
<string name="system_files_description">Download system files to get Mii files, boot the HOME menu, and more</string>
<string name="download_system_files">Download System Files</string>
<string name="boot_home_menu">Boot the HOME Menu</string>
<string name="system_type">System Type</string>
<string name="download">Download</string>
<string name="start">Start</string>
<string name="keys_missing">CitraVR is missing keys to download system files.</string>
<string name="how_to_get_keys"><![CDATA[<a href="https://citra-emu.org/wiki/aes-keys/">How to get keys?</a>]]></string>
<string name="show_home_apps">Show HOME menu apps in games list</string>
<string name="run_system_setup">Run System Setup when the HOME Menu is launched</string>
<string name="system_type_minimal">Minimal</string>
<string name="system_type_old_3ds">Old 3DS</string>
<string name="system_type_new_3ds">New 3DS</string>
<string name="downloading_files">Downloading Files…</string>
<string name="downloading_files_description">Please do not close the app.</string>
<string name="download_failed">Download Failed</string>
<string name="download_failed_description">Please make sure you are connected to the internet and try again.</string>
<string name="download_success">Download Complete!</string>
<string name="download_cancelled">Download Cancelled</string>
<string name="download_cancelled_description">Please restart the download to prevent issues with having incomplete system files.</string>
<string name="cancelling">Cancelling…</string>
<string name="home_menu">HOME Menu</string>
<string name="home_menu_warning">System Files Warning</string>
<string name="home_menu_warning_description">Due to how slow Android\'s storage access framework is for accessing CitraVR\'s files, downloading multiple versions of system files can dramatically slow down loading for games, save states, and the games list. Only download the files that you require to avoid any issues with loading speeds.</string>
<!-- Generic buttons (Shared with lots of stuff) --> <!-- Generic buttons (Shared with lots of stuff) -->
<string name="generic_buttons">Buttons</string> <string name="generic_buttons">Buttons</string>
<string name="button">Button</string> <string name="button">Button</string>
<string name="cancelling">Cancelling...</string>
<string name="start">Start</string>
<!-- Core settings strings --> <!-- Core settings strings -->
<string name="cpu_jit">CPU JIT</string> <string name="cpu_jit">CPU JIT</string>