1
0
Fork 0

Copione merged onto master

master
blallo 2020-06-12 19:43:35 +02:00
commit 111b68bf5b
173 changed files with 4605 additions and 2064 deletions

View File

@ -593,8 +593,6 @@ dependencies {
testImplementation 'org.apache.maven:maven-ant-tasks:2.1.3'
implementation Deps.mozilla_support_rusthttp
testImplementation Deps.mockito_core
androidTestImplementation Deps.mockito_android
testImplementation Deps.mockk
// For the initial release of Glean 19, we require consumer applications to

View File

@ -728,6 +728,34 @@ preferences:
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"
open_links_in_app:
type: string_list
description: >
Whether or not the user has the open links in apps feature enabled.
default: false
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/11118
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/11446
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"
theme:
type: string_list
description: >
The theme the user has enabled. "light," "dark," "system," or "battery"
default: "system" for API 28+, else "light"
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/11118
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/11446
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"
search.default_engine:
code:
@ -1756,15 +1784,17 @@ tracking_protection:
etp_setting_changed:
type: event
description: |
A user changed their tracking protection level setting to either strict or
standard.
A user changed their tracking protection level setting to either strict,
standard, or custom.
extra_keys:
etp_setting:
description: "The new setting for ETP: strict, standard"
description: "The new setting for ETP: strict, standard, custom"
bugs:
- https://github.com/mozilla-mobile/fenix/issues/5312
- https://github.com/mozilla-mobile/fenix/issues/11063
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188
- https://github.com/mozilla-mobile/fenix/pull/11383
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"

View File

@ -68,6 +68,7 @@ class SettingsBasicsTest {
}.openSettings {
verifyBasicsHeading()
verifySearchEngineButton()
verifyDefaultBrowserItem()
// drill down to submenu
}.openSearchSubMenu {
verifyDefaultSearchEngineHeader()
@ -86,10 +87,6 @@ class SettingsBasicsTest {
verifyAutomaticFontSizingMenuItems()
}.goBack {
// drill down to submenu
}.openDefaultBrowserSubMenu {
// verify item: set as default browser (duplicates, verify child of recyclerview)
// Verify label: Open links in private tab
}.goBack {
}
}
@ -213,11 +210,9 @@ class SettingsBasicsTest {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openDefaultBrowserSubMenu {
verifyDefaultBrowserIsDisabled()
verifyDefaultBrowserIsDisaled()
clickDefaultBrowserSwitch()
verifyAndroidDefaultAppsMenuAppears()
}
}
}

View File

@ -169,6 +169,7 @@ class SettingsPrivacyTest {
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
verifyDefaultValueSyncLogins()
verifyDefaultValueAutofillLogins()
}.openSavedLogins {
verifySavedLoginsView()
tapSetupLater()

View File

@ -14,6 +14,7 @@ import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.intent.Intents.intended
import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.intent.matcher.IntentMatchers.toPackage
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.Visibility
@ -34,6 +35,7 @@ import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
import org.mozilla.fenix.helpers.assertIsEnabled
import org.mozilla.fenix.helpers.click
import org.mozilla.fenix.ui.robots.SettingsRobot.Companion.DEFAULT_APPS_SETTINGS_ACTION
/**
* Implementation of Robot Pattern for the settings menu.
@ -48,6 +50,10 @@ class SettingsRobot {
fun verifyThemeSelected() = assertThemeSelected()
fun verifyAccessibilityButton() = assertAccessibilityButton()
fun verifySetAsDefaultBrowserButton() = assertSetAsDefaultBrowserButton()
fun verifyDefaultBrowserItem() = assertDefaultBrowserItem()
fun verifyDefaultBrowserIsDisaled() = assertDefaultBrowserIsDisabled()
fun clickDefaultBrowserSwitch() = toggleDefaultBrowserSwitch()
fun verifyAndroidDefaultAppsMenuAppears() = assertAndroidDefaultAppsMenuAppears()
// PRIVACY SECTION
fun verifyPrivacyHeading() = assertPrivacyHeading()
@ -128,15 +134,6 @@ class SettingsRobot {
return SettingsSubMenuAccessibilityRobot.Transition()
}
fun openDefaultBrowserSubMenu(interact: SettingsSubMenuDefaultBrowserRobot.() -> Unit): SettingsSubMenuDefaultBrowserRobot.Transition {
fun defaultBrowserButton() = onView(withText("Set as default browser"))
defaultBrowserButton().click()
SettingsSubMenuDefaultBrowserRobot().interact()
return SettingsSubMenuDefaultBrowserRobot.Transition()
}
fun openEnhancedTrackingProtectionSubMenu(interact: SettingsSubMenuEnhancedTrackingProtectionRobot.() -> Unit): SettingsSubMenuEnhancedTrackingProtectionRobot.Transition {
fun enhancedTrackingProtectionButton() =
onView(withText("Enhanced Tracking Protection"))
@ -208,6 +205,10 @@ class SettingsRobot {
return SettingsSubMenuDataCollectionRobot.Transition()
}
}
companion object {
const val DEFAULT_APPS_SETTINGS_ACTION = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS"
}
}
private fun assertSettingsView() {
@ -241,6 +242,31 @@ private fun assertSetAsDefaultBrowserButton() =
onView(withText("Set as default browser"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
private fun assertDefaultBrowserIsDisabled() {
onView(withId(R.id.switch_widget))
.check(matches(ViewMatchers.isNotChecked()))
}
private fun toggleDefaultBrowserSwitch() {
onView(
CoreMatchers.allOf(
ViewMatchers.withParent(CoreMatchers.not(withId(R.id.navigationToolbar))),
withText("Set as default browser")
)
)
.perform(ViewActions.click())
}
private fun assertAndroidDefaultAppsMenuAppears() {
intended(IntentMatchers.hasAction(DEFAULT_APPS_SETTINGS_ACTION))
}
private fun assertDefaultBrowserItem() {
mDevice.wait(Until.findObject(By.text("Set as default browser")), waitingTime)
onView(withText("Set as default browser"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}
// PRIVACY SECTION
private fun assertPrivacyHeading() {
onView(withText("Privacy and security"))

View File

@ -1,72 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@file:Suppress("TooManyFunctions")
package org.mozilla.fenix.ui.robots
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.intent.Intents.intended
import androidx.test.espresso.intent.matcher.IntentMatchers.hasAction
import androidx.test.espresso.matcher.ViewMatchers.isNotChecked
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withParent
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.CoreMatchers.not
import org.mozilla.fenix.R
import org.mozilla.fenix.ui.robots.SettingsSubMenuDefaultBrowserRobot.Companion.DEFAULT_APPS_SETTINGS_ACTION
/**
* Implementation of Robot Pattern for the settings DefaultBrowser sub menu.
*/
class SettingsSubMenuDefaultBrowserRobot {
companion object {
const val DEFAULT_APPS_SETTINGS_ACTION = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS"
}
fun verifyDefaultBrowserIsDisabled() = assertDefaultBrowserIsDisabled()
fun clickDefaultBrowserSwitch() = toggleDefaultBrowserSwitch()
fun verifyAndroidDefaultAppsMenuAppears() = assertAndroidDefaultAppsMenuAppears()
class Transition {
val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
fun goBack(interact: SettingsRobot.() -> Unit): SettingsRobot.Transition {
mDevice.waitForIdle()
goBackButton().perform(click())
SettingsRobot().interact()
return SettingsRobot.Transition()
}
}
}
fun assertDefaultBrowserIsDisabled() {
onView(withId(R.id.switch_widget))
.check(matches(isNotChecked()))
}
fun toggleDefaultBrowserSwitch() {
onView(
allOf(
withParent(not(withId(R.id.navigationToolbar))),
withText("Set as default browser")
)
)
.perform(click())
}
private fun assertAndroidDefaultAppsMenuAppears() {
intended(hasAction(DEFAULT_APPS_SETTINGS_ACTION))
}
private fun goBackButton() =
onView(allOf(withContentDescription("Navigate up")))

View File

@ -38,7 +38,9 @@ class SettingsSubMenuLoginsAndPasswordRobot {
mDevice.waitNotNull(Until.findObjects(By.text("On")), TestAssetHelper.waitingTime)
}
fun verifyDefaultValueSyncLogins() = asserDefaultValueSyncLogins()
fun verifyDefaultValueAutofillLogins() = assertDefaultValueAutofillLogins()
fun verifyDefaultValueSyncLogins() = assertDefaultValueSyncLogins()
class Transition {
val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
@ -87,5 +89,8 @@ private fun goBackButton() =
private fun assertDefaultView() = onView(ViewMatchers.withText("Sync logins"))
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
private fun asserDefaultValueSyncLogins() = onView(ViewMatchers.withText("Sign in to Sync"))
private fun assertDefaultValueAutofillLogins() = onView(ViewMatchers.withText("Autofill"))
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
private fun assertDefaultValueSyncLogins() = onView(ViewMatchers.withText("Sign in to Sync"))
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))

View File

@ -10,7 +10,6 @@ import mozilla.components.concept.storage.LoginsStorage
import mozilla.components.lib.crash.handler.CrashHandlerService
import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate
import org.mozilla.fenix.Config
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.utils.Settings
import org.mozilla.geckoview.GeckoRuntime
import org.mozilla.geckoview.GeckoRuntimeSettings
@ -56,11 +55,7 @@ object GeckoProvider {
}
val geckoRuntime = GeckoRuntime.create(context, runtimeSettings)
// As a quick fix for #8967 we are conflating "should autofill" with "should save logins"
val loginStorageDelegate = GeckoLoginStorageDelegate(
storage,
{ context.settings().shouldPromptToSaveLogins }
)
val loginStorageDelegate = GeckoLoginStorageDelegate(storage, { true })
geckoRuntime.loginStorageDelegate = GeckoLoginDelegateWrapper(loginStorageDelegate)
return geckoRuntime

View File

@ -24,7 +24,6 @@ enum class BrowserDirection(@IdRes val fragmentId: Int) {
FromExceptions(R.id.exceptionsFragment),
FromAbout(R.id.aboutFragment),
FromTrackingProtection(R.id.trackingProtectionFragment),
FromDefaultBrowserSettingsFragment(R.id.defaultBrowserSettingsFragment),
FromSavedLoginsFragment(R.id.savedLoginsFragment),
FromAddNewDeviceFragment(R.id.addNewDeviceFragment),
FromAddSearchEngineFragment(R.id.addSearchEngineFragment),

View File

@ -20,11 +20,6 @@ object FeatureFlags {
*/
const val asFeatureSyncDisabled = false
/**
* Enables dynamic bottom toolbar
*/
val dynamicBottomToolbar = Config.channel.isNightlyOrDebug
/**
* Integration of push support provided by `feature-push` component into the Gecko engine.
*

View File

@ -276,7 +276,7 @@ open class FenixApplication : LocaleAwareApplication() {
return GlobalScope.async(Dispatchers.IO) {
// ... but RustHttpConfig.setClient() and RustLog.enable() can be called later.
RustHttpConfig.setClient(lazy { components.core.client })
RustLog.enable()
RustLog.enable(components.analytics.crashReporter)
}
}

View File

@ -32,10 +32,13 @@ import mozilla.components.browser.search.SearchEngine
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.state.state.WebExtensionState
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.browser.tabstray.BrowserTabsTray
import mozilla.components.concept.engine.EngineView
import mozilla.components.concept.tabstray.TabsTray
import mozilla.components.feature.contextmenu.ext.DefaultSelectionActionDelegate
import mozilla.components.feature.contextmenu.DefaultSelectionActionDelegate
import mozilla.components.feature.search.BrowserStoreSearchAdapter
import mozilla.components.feature.search.SearchAdapter
import mozilla.components.service.fxa.sync.SyncReason
import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.ktx.android.arch.lifecycle.addObservers
@ -63,6 +66,7 @@ import org.mozilla.fenix.home.HomeFragmentDirections
import org.mozilla.fenix.home.intent.CrashReporterIntentProcessor
import org.mozilla.fenix.home.intent.DeepLinkIntentProcessor
import org.mozilla.fenix.home.intent.OpenBrowserIntentProcessor
import org.mozilla.fenix.home.intent.OpenSpecificTabIntentProcessor
import org.mozilla.fenix.home.intent.SpeechProcessingIntentProcessor
import org.mozilla.fenix.home.intent.StartSearchIntentProcessor
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentDirections
@ -70,7 +74,6 @@ import org.mozilla.fenix.library.history.HistoryFragmentDirections
import org.mozilla.fenix.perf.Performance
import org.mozilla.fenix.perf.StartupTimeline
import org.mozilla.fenix.search.SearchFragmentDirections
import org.mozilla.fenix.settings.DefaultBrowserSettingsFragmentDirections
import org.mozilla.fenix.settings.SettingsFragmentDirections
import org.mozilla.fenix.settings.TrackingProtectionFragmentDirections
import org.mozilla.fenix.settings.about.AboutFragmentDirections
@ -119,7 +122,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
SpeechProcessingIntentProcessor(this, components.analytics.metrics),
StartSearchIntentProcessor(components.analytics.metrics),
DeepLinkIntentProcessor(this),
OpenBrowserIntentProcessor(this, ::getIntentSessionId)
OpenBrowserIntentProcessor(this, ::getIntentSessionId),
OpenSpecificTabIntentProcessor(this)
)
}
@ -225,8 +229,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
): View? = when (name) {
EngineView::class.java.name -> components.core.engine.createView(context, attrs).apply {
selectionActionDelegate = DefaultSelectionActionDelegate(
store = components.core.store,
context = context,
getSearchAdapter(components.core.store),
resources = context.resources,
appName = getString(R.string.app_name)
) {
share(it)
@ -268,6 +272,9 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
super.onUserLeaveHint()
}
protected open fun getSearchAdapter(store: BrowserStore): SearchAdapter =
BrowserStoreSearchAdapter(store)
protected open fun getBreadcrumbMessage(destination: NavDestination): String {
val fragmentName = resources.getResourceEntryName(destination.id)
return "Changing to fragment $fragmentName, isCustomTab: false"
@ -382,8 +389,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
AboutFragmentDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromTrackingProtection ->
TrackingProtectionFragmentDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromDefaultBrowserSettingsFragment ->
DefaultBrowserSettingsFragmentDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromSavedLoginsFragment ->
SavedLoginsAuthFragmentDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromAddNewDeviceFragment ->

View File

@ -32,7 +32,7 @@ class IntentReceiverActivity : Activity() {
// The intent property is nullable, but the rest of the code below
// assumes it is not. If it's null, then we make a new one and open
// the HomeActivity.
val intent = intent?.let { Intent(intent) } ?: Intent()
val intent = intent?.let { Intent(it) } ?: Intent()
intent.stripUnwantedFlags()
processIntent(intent)
}

View File

@ -8,6 +8,7 @@ import android.os.Build
import android.os.StrictMode
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import kotlin.collections.HashSet
/**
* Manages strict mode settings for the application.
@ -23,7 +24,8 @@ object StrictModeManager {
val threadPolicy = StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
if (setPenaltyDialog) {
if (setPenaltyDialog &&
!strictModeExceptionList.contains(Build.MANUFACTURER)) {
threadPolicy.penaltyDialog()
}
StrictMode.setThreadPolicy(threadPolicy.build())
@ -61,4 +63,19 @@ object StrictModeManager {
}
}, false)
}
/**
* There are certain manufacturers that have custom font classes for the OS systems.
* These classes violates the [StrictMode] policies on startup. As a workaround, we create
* an exception list for these manufacturers so that dialogs do not show up on start up.
* To add a new manufacturer to the list, log "Build.MANUFACTURER" from the device to get the
* exact name of the manufacturer.
*/
private val strictModeExceptionList = HashSet<String>().also {
it.add(MANUFACTURE_HUAWEI)
it.add(MANUFACTURE_ONE_PLUS)
}
private const val MANUFACTURE_HUAWEI: String = "HUAWEI"
private const val MANUFACTURE_ONE_PLUS: String = "OnePlus"
}

View File

@ -18,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_add_ons_management.*
import kotlinx.android.synthetic.main.fragment_add_ons_management.view.*
import kotlinx.android.synthetic.main.overlay_add_on_progress.view.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
@ -35,6 +34,7 @@ import org.mozilla.fenix.ext.getRootView
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.theme.ThemeManager
import java.util.concurrent.CancellationException
/**
* Fragment use for managing add-ons.
@ -46,7 +46,6 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
* Whether or not an add-on installation is in progress.
*/
private var isInstallationInProgress = false
private var scope: CoroutineScope? = null
private var adapter: AddonsManagerAdapter? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -244,7 +243,7 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
isInstallationInProgress = true
requireContext().components.addonManager.installAddon(
val installOperation = requireContext().components.addonManager.installAddon(
addon,
onSuccess = {
runIfFragmentIsAttached {
@ -254,21 +253,33 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
showInstallationDialog(it)
}
},
onError = { _, _ ->
onError = { _, e ->
this@AddonsManagementFragment.view?.let { view ->
val rootView = activity?.getRootView() ?: view
showSnackBar(
rootView,
getString(
R.string.mozac_feature_addons_failed_to_install,
addon.translatedName
// No need to display an error message if installation was cancelled by the user.
if (e !is CancellationException) {
val rootView = activity?.getRootView() ?: view
showSnackBar(
rootView,
getString(
R.string.mozac_feature_addons_failed_to_install,
addon.translatedName
)
)
)
}
addonProgressOverlay?.visibility = View.GONE
isInstallationInProgress = false
}
}
)
addonProgressOverlay.cancel_button.setOnClickListener {
lifecycleScope.launch(Dispatchers.Main) {
// Hide the installation progress overlay once cancellation is successful.
if (installOperation.cancel().await()) {
addonProgressOverlay.visibility = View.GONE
}
}
}
}
private fun announceForAccessibility(announcementText: CharSequence) {

View File

@ -96,6 +96,7 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.SharedViewModel
import org.mozilla.fenix.tabtray.TabTrayDialogFragment
import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration
import java.lang.ref.WeakReference
@ -218,6 +219,32 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
sharedViewModel = sharedViewModel,
onTabCounterClicked = {
TabTrayDialogFragment.show(parentFragmentManager)
},
onCloseTab = {
val snapshot = sessionManager.createSessionSnapshot(it)
val state = snapshot.engineSession?.saveState()
val isSelected =
it.id == context.components.core.store.state.selectedTabId ?: false
val snackbarMessage = if (snapshot.session.private) {
requireContext().getString(R.string.snackbar_private_tab_closed)
} else {
requireContext().getString(R.string.snackbar_tab_closed)
}
viewLifecycleOwner.lifecycleScope.allowUndo(
requireView(),
snackbarMessage,
requireContext().getString(R.string.snackbar_deleted_undo),
{
sessionManager.add(
snapshot.session,
isSelected,
engineSessionState = state
)
},
operation = { }
)
}
)
@ -611,21 +638,15 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
}
private fun initializeEngineView(toolbarHeight: Int) {
if (FeatureFlags.dynamicBottomToolbar) {
engineView.setDynamicToolbarMaxHeight(toolbarHeight)
engineView.setDynamicToolbarMaxHeight(toolbarHeight)
val behavior = if (requireContext().settings().shouldUseBottomToolbar) {
EngineViewBottomBehavior(context, null)
} else {
SwipeRefreshScrollingViewBehavior(requireContext(), null, engineView, browserToolbarView)
}
(swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams).behavior = behavior
val behavior = if (requireContext().settings().shouldUseBottomToolbar) {
EngineViewBottomBehavior(context, null)
} else {
if (!requireContext().settings().shouldUseBottomToolbar) {
engineView.setDynamicToolbarMaxHeight(toolbarHeight)
}
SwipeRefreshScrollingViewBehavior(requireContext(), null, engineView, browserToolbarView)
}
(swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams).behavior = behavior
}
/**
@ -771,35 +792,12 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
protected abstract fun navToTrackingProtectionPanel(session: Session)
/**
* Returns the top and bottom margins.
*/
private fun getEngineMargins(): Pair<Int, Int> =
if (context?.settings()?.shouldUseBottomToolbar == true) {
val toolbarSize = resources.getDimensionPixelSize(R.dimen.browser_toolbar_height)
0 to toolbarSize
} else {
0 to 0
}
/**
* Returns the layout [android.view.Gravity] for the quick settings and ETP dialog.
*/
protected fun getAppropriateLayoutGravity(): Int =
if (context?.settings()?.shouldUseBottomToolbar == true) Gravity.BOTTOM else Gravity.TOP
protected fun updateLayoutMargins(inFullScreen: Boolean) {
view?.swipeRefresh?.apply {
val (topMargin, bottomMargin) = if (inFullScreen) 0 to 0 else getEngineMargins()
(layoutParams as CoordinatorLayout.LayoutParams).setMargins(
0,
topMargin,
0,
bottomMargin
)
}
}
/**
* Updates the site permissions rules based on user settings.
*/
@ -942,25 +940,18 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
activity?.enterToImmersiveMode()
browserToolbarView.view.visibility = View.GONE
if (FeatureFlags.dynamicBottomToolbar) {
engineView.setDynamicToolbarMaxHeight(0)
browserToolbarView.expand()
// Without this, fullscreen has a margin at the top.
engineView.setVerticalClipping(0)
}
engineView.setDynamicToolbarMaxHeight(0)
browserToolbarView.expand()
// Without this, fullscreen has a margin at the top.
engineView.setVerticalClipping(0)
} else {
activity?.exitImmersiveModeIfNeeded()
(activity as? HomeActivity)?.let { activity ->
activity.themeManager.applyStatusBarTheme(activity)
}
browserToolbarView.view.visibility = View.VISIBLE
if (FeatureFlags.dynamicBottomToolbar) {
val toolbarHeight = resources.getDimensionPixelSize(R.dimen.browser_toolbar_height)
engineView.setDynamicToolbarMaxHeight(toolbarHeight)
}
}
if (!FeatureFlags.dynamicBottomToolbar) {
updateLayoutMargins(inFullScreen)
val toolbarHeight = resources.getDimensionPixelSize(R.dimen.browser_toolbar_height)
engineView.setDynamicToolbarMaxHeight(toolbarHeight)
}
}

View File

@ -9,7 +9,8 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.navigation.fragment.findNavController
import com.google.android.material.snackbar.Snackbar
@ -17,6 +18,8 @@ import kotlinx.android.synthetic.main.fragment_browser.*
import kotlinx.android.synthetic.main.fragment_browser.view.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import mozilla.components.browser.session.Session
import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.toolbar.BrowserToolbar
import mozilla.components.feature.app.links.AppLinksUseCases
import mozilla.components.feature.contextmenu.ContextMenuCandidate
import mozilla.components.feature.readerview.ReaderViewFeature
@ -27,7 +30,6 @@ import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.tabs.WindowFeature
import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.addons.runIfFragmentIsAttached
@ -52,6 +54,8 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
private val windowFeature = ViewBoundFeatureWrapper<WindowFeature>()
private val searchFeature = ViewBoundFeatureWrapper<SearchFeature>()
private var readerModeAvailable = false
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -68,17 +72,40 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
val components = context.components
return super.initializeUI(view)?.also {
val readerModeAction =
BrowserToolbar.ToggleButton(
image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_readermode)!!,
imageSelected =
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_readermode_selected)!!,
contentDescription = requireContext().getString(R.string.browser_menu_read),
contentDescriptionSelected = requireContext().getString(R.string.browser_menu_read_close),
visible = {
readerModeAvailable
},
selected = getSessionById()?.let {
activity?.components?.core?.store?.state?.findTab(it.id)?.readerState?.active
} ?: false,
listener = browserInteractor::onReaderModePressed
)
browserToolbarView.view.addPageAction(readerModeAction)
readerViewFeature.set(
feature = ReaderViewFeature(
context,
components.core.engine,
components.core.store,
view.readerViewControlsBar
) { available, _ ->
) { available, active ->
if (available) {
components.analytics.metrics.track(Event.ReaderModeAvailable)
}
readerModeAvailable = available
readerModeAction.setSelected(active)
runIfFragmentIsAttached {
browserToolbarView.view.invalidateActions()
browserToolbarView.toolbarIntegration.invalidateMenu()
}
},
@ -120,8 +147,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
) {
browserToolbarView.view
}
session?.register(toolbarSessionObserver, this, autoPause = true)
updateEngineBottomMargin()
session?.register(toolbarSessionObserver, viewLifecycleOwner, autoPause = true)
if (settings.shouldShowFirstTimePwaFragment) {
session?.register(
@ -147,26 +173,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
}
}
private fun updateEngineBottomMargin() {
if (!FeatureFlags.dynamicBottomToolbar) {
val browserEngine = swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams
browserEngine.bottomMargin = if (requireContext().settings().shouldUseBottomToolbar) {
requireContext().resources.getDimensionPixelSize(R.dimen.browser_toolbar_height)
} else {
0
}
}
val toolbarSessionObserver = TrackingProtectionOverlay(
context = requireContext(),
settings = requireContext().settings()
) {
browserToolbarView.view
}
getSessionById()?.register(toolbarSessionObserver, this, autoPause = true)
}
override fun onResume() {
super.onResume()
getSessionById()?.let {

View File

@ -97,7 +97,7 @@ class Analytics(
}
}
private fun isSentryEnabled() = !BuildConfig.SENTRY_TOKEN.isNullOrEmpty()
fun isSentryEnabled() = !BuildConfig.SENTRY_TOKEN.isNullOrEmpty()
private fun getSentryProjectUrl(): String? {
val baseUrl = "https://sentry.prod.mozaws.net/operations"

View File

@ -47,9 +47,9 @@ class Components(private val context: Context) {
val useCases by lazy {
UseCases(
context,
core.engine,
core.sessionManager,
core.store,
core.engine.settings,
search.searchEngineManager,
core.webAppShortcutManager,
core.thumbnailStorage

View File

@ -76,7 +76,8 @@ class Core(private val context: Context) {
automaticFontSizeAdjustment = context.settings().shouldUseAutoSize,
fontInflationEnabled = context.settings().shouldUseAutoSize,
suspendMediaWhenInactive = false,
forceUserScalableContent = context.settings().forceEnableZoom
forceUserScalableContent = context.settings().forceEnableZoom,
loginAutofillEnabled = context.settings().shouldAutofillLogins
)
GeckoEngine(

View File

@ -17,7 +17,6 @@ import com.google.android.material.snackbar.BaseTransientBottomBar
import com.google.android.material.snackbar.ContentViewCallback
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.fenix_snackbar.view.*
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.increaseTapArea
import org.mozilla.fenix.ext.settings
@ -137,7 +136,7 @@ class FenixSnackbar private constructor(
// can't intelligently position the snackbar on the upper most view.
// Ideally we should not pass ContentFrameLayout in, but it's the only
// way to display snackbars through a fragment transition.
(!FeatureFlags.dynamicBottomToolbar || view is ContentFrameLayout)
view is ContentFrameLayout
) {
toolbarHeight
} else {

View File

@ -10,7 +10,7 @@ import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.browser.thumbnails.ThumbnailsUseCases
import mozilla.components.browser.thumbnails.storage.ThumbnailStorage
import mozilla.components.concept.engine.Settings
import mozilla.components.concept.engine.Engine
import mozilla.components.feature.app.links.AppLinksUseCases
import mozilla.components.feature.contextmenu.ContextMenuUseCases
import mozilla.components.feature.downloads.DownloadsUseCases
@ -29,9 +29,9 @@ import org.mozilla.fenix.utils.Mockable
@Mockable
class UseCases(
private val context: Context,
private val engine: Engine,
private val sessionManager: SessionManager,
private val store: BrowserStore,
private val engineSettings: Settings,
private val searchEngineManager: SearchEngineManager,
private val shortcutManager: WebAppShortcutManager,
private val thumbnailStorage: ThumbnailStorage
@ -64,7 +64,7 @@ class UseCases(
/**
* Use cases that provide settings management.
*/
val settingsUseCases by lazy { SettingsUseCases(engineSettings, sessionManager) }
val settingsUseCases by lazy { SettingsUseCases(engine, sessionManager) }
val appLinksUseCases by lazy { AppLinksUseCases(context.applicationContext) }

View File

@ -590,56 +590,7 @@ class GleanMetricsService(private val context: Context) : MetricsService {
}
internal fun setStartupMetrics() {
// We purposefully make all of our preferences the string_list format to make data analysis
// simpler. While it makes things like booleans a bit more complicated, it means all our
// preferences can be analyzed with the same dashboard and compared.
Preferences.apply {
showSearchSuggestions.set(context.settings().shouldShowSearchSuggestions.toStringList())
remoteDebugging.set(context.settings().isRemoteDebuggingEnabled.toStringList())
telemetry.set(context.settings().isTelemetryEnabled.toStringList())
searchBookmarks.set(context.settings().shouldShowBookmarkSuggestions.toStringList())
showClipboardSuggestions.set(context.settings().shouldShowClipboardSuggestions.toStringList())
showSearchShortcuts.set(context.settings().shouldShowSearchShortcuts.toStringList())
openLinksInAPrivateTab.set(context.settings().openLinksInAPrivateTab.toStringList())
searchSuggestionsPrivate.set(context.settings().shouldShowSearchSuggestionsInPrivate.toStringList())
val isLoggedIn =
context.components.backgroundServices.accountManager.accountProfile() != null
sync.set(isLoggedIn.toStringList())
val syncedItems = SyncEnginesStorage(context).getStatus().entries.filter {
it.value
}.map { it.key.nativeName }
syncItems.set(syncedItems)
val etpSelection =
if (!context.settings().shouldUseTrackingProtection) {
""
} else if (context.settings().useStandardTrackingProtection) {
"standard"
} else if (context.settings().useStrictTrackingProtection) {
"strict"
} else if (context.settings().useCustomTrackingProtection) {
"custom"
} else {
""
}
trackingProtection.set(listOf(etpSelection))
val accessibilitySelection = mutableListOf<String>()
if (context.settings().switchServiceIsEnabled) { accessibilitySelection.add("switch") }
if (context.settings().touchExplorationIsEnabled) {
accessibilitySelection.add("touch exploration")
}
accessibilityServices.set(accessibilitySelection.toList())
}
setPreferenceMetrics()
Metrics.apply {
defaultBrowser.set(BrowsersCache.all(context).isDefaultBrowser)
MozillaProductDetector.getMozillaBrowserDefault(context)?.also {
@ -685,6 +636,85 @@ class GleanMetricsService(private val context: Context) : MetricsService {
installationPing.checkAndSend()
}
private fun setPreferenceMetrics() {
// We purposefully make all of our preferences the string_list format to make data analysis
// simpler. While it makes things like booleans a bit more complicated, it means all our
// preferences can be analyzed with the same dashboard and compared.
Preferences.apply {
showSearchSuggestions.set(context.settings().shouldShowSearchSuggestions.toStringList())
remoteDebugging.set(context.settings().isRemoteDebuggingEnabled.toStringList())
telemetry.set(context.settings().isTelemetryEnabled.toStringList())
searchBookmarks.set(context.settings().shouldShowBookmarkSuggestions.toStringList())
showClipboardSuggestions.set(context.settings().shouldShowClipboardSuggestions.toStringList())
showSearchShortcuts.set(context.settings().shouldShowSearchShortcuts.toStringList())
openLinksInAPrivateTab.set(context.settings().openLinksInAPrivateTab.toStringList())
searchSuggestionsPrivate.set(context.settings().shouldShowSearchSuggestionsInPrivate.toStringList())
showVoiceSearch.set(context.settings().shouldShowVoiceSearch.toStringList())
openLinksInApp.set(context.settings().openLinksInExternalApp.toStringList())
val isLoggedIn =
context.components.backgroundServices.accountManager.accountProfile() != null
sync.set(isLoggedIn.toStringList())
val syncedItems = SyncEnginesStorage(context).getStatus().entries.filter {
it.value
}.map { it.key.nativeName }
syncItems.set(syncedItems)
val toolbarPositionSelection =
if (context.settings().shouldUseFixedTopToolbar) {
"fixed_top"
} else if (context.settings().shouldUseBottomToolbar) {
"bottom"
} else {
"top"
}
toolbarPosition.set(listOf(toolbarPositionSelection))
val etpSelection =
if (!context.settings().shouldUseTrackingProtection) {
""
} else if (context.settings().useStandardTrackingProtection) {
"standard"
} else if (context.settings().useStrictTrackingProtection) {
"strict"
} else if (context.settings().useCustomTrackingProtection) {
"custom"
} else {
""
}
trackingProtection.set(listOf(etpSelection))
val accessibilitySelection = mutableListOf<String>()
if (context.settings().switchServiceIsEnabled) { accessibilitySelection.add("switch") }
if (context.settings().touchExplorationIsEnabled) {
accessibilitySelection.add("touch exploration")
}
accessibilityServices.set(accessibilitySelection.toList())
val themeSelection =
if (context.settings().shouldUseLightTheme) {
"light"
} else if (context.settings().shouldUseDarkTheme) {
"dark"
} else if (context.settings().shouldFollowDeviceTheme) {
"system"
} else if (context.settings().shouldUseAutoBatteryTheme) {
"battery"
} else {
""
}
theme.set(listOf(themeSelection))
}
}
override fun stop() {
Glean.setUploadEnabled(false)
}

View File

@ -243,7 +243,7 @@ sealed class Event {
}
data class TrackingProtectionSettingChanged(val setting: Setting) : Event() {
enum class Setting { STRICT, STANDARD }
enum class Setting { STRICT, STANDARD, CUSTOM }
override val extras: Map<TrackingProtection.etpSettingChangedKeys, String>?
get() = hashMapOf(TrackingProtection.etpSettingChangedKeys.etpSetting to setting.name)

View File

@ -12,6 +12,10 @@ open class BrowserInteractor(
browserToolbarController.handleTabCounterClick()
}
override fun onTabCounterMenuItemTapped(item: TabCounterMenuItem) {
browserToolbarController.handleTabCounterItemInteraction(item)
}
override fun onBrowserToolbarPaste(text: String) {
browserToolbarController.handleToolbarPaste(text)
}
@ -35,4 +39,8 @@ open class BrowserInteractor(
override fun onScrolled(offset: Int) {
browserToolbarController.handleScroll(offset)
}
override fun onReaderModePressed(enabled: Boolean) {
browserToolbarController.handleReaderModePressed(enabled)
}
}

View File

@ -22,11 +22,13 @@ import mozilla.components.browser.state.selector.findTab
import mozilla.components.concept.engine.EngineView
import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.support.ktx.kotlin.isUrl
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.BrowserAnimator
import org.mozilla.fenix.browser.BrowserAnimator.Companion.getToolbarNavOptions
import org.mozilla.fenix.browser.BrowserFragmentDirections
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.readermode.ReaderModeController
import org.mozilla.fenix.collections.SaveCollectionStep
import org.mozilla.fenix.components.FenixSnackbar
@ -37,6 +39,7 @@ import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.getRootView
import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.navigateSafe
import org.mozilla.fenix.ext.sessionsOfType
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.home.SharedViewModel
import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit
@ -52,10 +55,12 @@ interface BrowserToolbarController {
fun handleToolbarItemInteraction(item: ToolbarMenu.Item)
fun handleToolbarClick()
fun handleTabCounterClick()
fun handleTabCounterItemInteraction(item: TabCounterMenuItem)
fun handleBrowserMenuDismissed(lowPrioHighlightItems: List<ToolbarMenu.Item>)
fun handleReaderModePressed(enabled: Boolean)
}
@Suppress("LargeClass")
@SuppressWarnings("LargeClass", "TooManyFunctions")
class DefaultBrowserToolbarController(
private val activity: Activity,
private val navController: NavController,
@ -72,7 +77,8 @@ class DefaultBrowserToolbarController(
private val tabCollectionStorage: TabCollectionStorage,
private val topSiteStorage: TopSiteStorage,
private val sharedViewModel: SharedViewModel,
private val onTabCounterClicked: () -> Unit
private val onTabCounterClicked: () -> Unit,
private val onCloseTab: (Session) -> Unit
) : BrowserToolbarController {
private val currentSession
@ -97,12 +103,12 @@ class DefaultBrowserToolbarController(
override fun handleToolbarPasteAndGo(text: String) {
if (text.isUrl()) {
activity.components.core.sessionManager.selectedSession?.searchTerms = ""
sessionManager.selectedSession?.searchTerms = ""
activity.components.useCases.sessionUseCases.loadUrl.invoke(text)
return
}
activity.components.core.sessionManager.selectedSession?.searchTerms = text
sessionManager.selectedSession?.searchTerms = text
activity.components.useCases.searchUseCases.defaultSearch.invoke(text)
}
@ -124,6 +130,37 @@ class DefaultBrowserToolbarController(
onTabCounterClicked.invoke()
}
override fun handleReaderModePressed(enabled: Boolean) {
if (enabled) {
readerModeController.showReaderView()
} else {
readerModeController.hideReaderView()
}
}
override fun handleTabCounterItemInteraction(item: TabCounterMenuItem) {
when (item) {
is TabCounterMenuItem.CloseTab -> {
sessionManager.selectedSession?.let {
// When closing the last tab we must show the undo snackbar in the home fragment
if (sessionManager.sessionsOfType(it.private).count() == 1) {
// The tab tray always returns to normal mode so do that here too
(activity as HomeActivity).browsingModeManager.mode = BrowsingMode.Normal
navController.navigate(BrowserFragmentDirections.actionGlobalHome(it.id))
} else {
onCloseTab.invoke(it)
activity.components.useCases.tabsUseCases.removeTab.invoke(it)
}
}
}
is TabCounterMenuItem.NewTab -> {
(activity as HomeActivity).browsingModeManager.mode =
BrowsingMode.fromBoolean(item.isPrivate)
navController.popBackStack(R.id.homeFragment, false)
}
}
}
override fun handleBrowserMenuDismissed(lowPrioHighlightItems: List<ToolbarMenu.Item>) {
lowPrioHighlightItems.forEach {
when (it) {
@ -245,7 +282,7 @@ class DefaultBrowserToolbarController(
// Strip the CustomTabConfig to turn this Session into a regular tab and then select it
customTabSession!!.customTabConfig = null
activity.components.core.sessionManager.select(customTabSession)
sessionManager.select(customTabSession)
// Switch to the actual browser which should now display our new selected session
activity.startActivity(openInFenixIntent)

View File

@ -34,7 +34,6 @@ import mozilla.components.browser.toolbar.behavior.BrowserToolbarBottomBehavior
import mozilla.components.browser.toolbar.display.DisplayToolbar
import mozilla.components.support.ktx.android.util.dpToFloat
import mozilla.components.support.utils.URLStringUtils
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.customtabs.CustomTabToolbarIntegration
@ -50,8 +49,10 @@ interface BrowserToolbarViewInteractor {
fun onBrowserToolbarClicked()
fun onBrowserToolbarMenuItemTapped(item: ToolbarMenu.Item)
fun onTabCounterClicked()
fun onTabCounterMenuItemTapped(item: TabCounterMenuItem)
fun onBrowserMenuDismissed(lowPrioHighlightItems: List<ToolbarMenu.Item>)
fun onScrolled(offset: Int)
fun onReaderModePressed(enabled: Boolean)
}
@SuppressWarnings("LargeClass")
class BrowserToolbarView(
@ -259,7 +260,7 @@ class BrowserToolbarView(
}
fun expand() {
if (settings.shouldUseBottomToolbar && FeatureFlags.dynamicBottomToolbar) {
if (settings.shouldUseBottomToolbar) {
(view.layoutParams as CoordinatorLayout.LayoutParams).apply {
(behavior as BrowserToolbarBottomBehavior).forceExpand(view)
}
@ -274,7 +275,7 @@ class BrowserToolbarView(
*/
fun setScrollFlags(shouldDisableScroll: Boolean = false) {
if (view.context.settings().shouldUseBottomToolbar) {
if (FeatureFlags.dynamicBottomToolbar && view.layoutParams is CoordinatorLayout.LayoutParams) {
if (view.layoutParams is CoordinatorLayout.LayoutParams) {
(view.layoutParams as CoordinatorLayout.LayoutParams).apply {
behavior = BrowserToolbarBottomBehavior(view.context, null)
}

View File

@ -15,7 +15,6 @@ import mozilla.components.browser.menu.BrowserMenuHighlight
import mozilla.components.browser.menu.WebExtensionBrowserMenuBuilder
import mozilla.components.browser.menu.item.BrowserMenuDivider
import mozilla.components.browser.menu.item.BrowserMenuHighlightableItem
import mozilla.components.browser.menu.item.BrowserMenuHighlightableSwitch
import mozilla.components.browser.menu.item.BrowserMenuImageSwitch
import mozilla.components.browser.menu.item.BrowserMenuImageText
import mozilla.components.browser.menu.item.BrowserMenuItemToolbar
@ -143,9 +142,6 @@ class DefaultToolbarMenu(
if (canInstall() && installToHomescreen.isHighlighted()) {
lowPrioHighlightItems.add(ToolbarMenu.Item.InstallToHomeScreen)
}
if (shouldShowReaderMode() && readerMode.isHighlighted()) {
lowPrioHighlightItems.add(ToolbarMenu.Item.ReaderMode(false))
}
if (shouldShowOpenInApp() && openInApp.isHighlighted()) {
lowPrioHighlightItems.add(ToolbarMenu.Item.OpenInApp)
}
@ -161,10 +157,6 @@ class DefaultToolbarMenu(
session != null && context.components.useCases.webAppUseCases.isPinningSupported() &&
context.components.useCases.webAppUseCases.isInstallable()
private fun shouldShowReaderMode(): Boolean = session?.let {
store.state.findTab(it.id)?.readerState?.readerable
} ?: false
private fun shouldShowOpenInApp(): Boolean = session?.let { session ->
val appLink = context.components.useCases.appLinksUseCases.appLinkRedirect
appLink(session.url).hasExternalApp()
@ -196,7 +188,6 @@ class DefaultToolbarMenu(
if (shouldShowSaveToCollection) saveToCollection else null,
desktopMode,
openInApp.apply { visible = ::shouldShowOpenInApp },
readerMode.apply { visible = ::shouldShowReaderMode },
readerAppearance.apply { visible = ::shouldShowReaderAppearance },
BrowserMenuDivider(),
menuToolbar
@ -256,7 +247,7 @@ class DefaultToolbarMenu(
private val syncedTabs = BrowserMenuImageText(
label = context.getString(R.string.synced_tabs),
imageResource = R.drawable.ic_tab_collection,
imageResource = R.drawable.ic_synced_tabs,
iconTintColorResource = primaryTextColor()
) {
onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs)
@ -301,23 +292,6 @@ class DefaultToolbarMenu(
onItemTapped.invoke(ToolbarMenu.Item.Quit)
}
private val readerMode = BrowserMenuHighlightableSwitch(
label = context.getString(R.string.browser_menu_read),
startImageResource = R.drawable.ic_readermode,
initialState = {
session?.let {
store.state.findTab(it.id)?.readerState?.active
} ?: false
},
highlight = BrowserMenuHighlight.LowPriority(
label = context.getString(R.string.browser_menu_read),
notificationTint = getColor(context, R.color.whats_new_notification_color)
),
isHighlighted = { !context.settings().readerModeOpened }
) { checked ->
onItemTapped.invoke(ToolbarMenu.Item.ReaderMode(checked))
}
private val readerAppearance = BrowserMenuImageText(
label = context.getString(R.string.browser_menu_read_appearance),
imageResource = R.drawable.ic_readermode_appearance,

View File

@ -34,11 +34,22 @@ open class TabCounter @JvmOverloads constructor(
TypedValue.COMPLEX_UNIT_DIP, TWO_DIGIT_PADDING, context.resources.displayMetrics
).toInt()
counter_text.setPadding(0, shiftThreeDp, shiftThreeDp, 0)
updateContentDescription(0)
animationSet = createAnimatorSet()
}
private fun updateContentDescription(count: Int) {
counter_root.contentDescription = if (count == 1) {
context?.getString(R.string.open_tab_tray_single)
} else {
context?.getString(R.string.open_tab_tray_plural, count.toString())
}
}
fun setCountWithAnimation(count: Int) {
updateContentDescription(count)
// Don't animate from initial state.
if (this.count == 0) {
setCount(count)
@ -69,6 +80,7 @@ open class TabCounter @JvmOverloads constructor(
}
fun setCount(count: Int) {
updateContentDescription(count)
adjustTextSize(count)
counter_text.text = formatForDisplay(count)

View File

@ -0,0 +1,6 @@
package org.mozilla.fenix.components.toolbar
sealed class TabCounterMenuItem {
object CloseTab : TabCounterMenuItem()
class NewTab(val isPrivate: Boolean) : TabCounterMenuItem()
}

View File

@ -8,11 +8,16 @@ import android.content.Context
import android.util.TypedValue
import android.view.View
import android.view.ViewGroup
import mozilla.components.browser.menu.BrowserMenu
import mozilla.components.browser.menu.BrowserMenuBuilder
import mozilla.components.browser.menu.item.BrowserMenuDivider
import mozilla.components.browser.menu.item.BrowserMenuImageText
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import mozilla.components.concept.toolbar.Toolbar
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.sessionsOfType
import org.mozilla.fenix.theme.ThemeManager
import java.lang.ref.WeakReference
/**
@ -21,6 +26,7 @@ import java.lang.ref.WeakReference
class TabCounterToolbarButton(
private val sessionManager: SessionManager,
private val isPrivate: Boolean,
private val onItemTapped: (TabCounterMenuItem) -> Unit = {},
private val showTabs: () -> Unit
) : Toolbar.Action {
private var reference: WeakReference<TabCounter> = WeakReference<TabCounter>(null)
@ -34,12 +40,11 @@ class TabCounterToolbarButton(
showTabs.invoke()
}
val count = sessionManager.sessions.count {
it.private == isPrivate
setOnLongClickListener {
getTabContextMenu(it.context).show(it)
true
}
contentDescription = getDescriptionForTabCount(context, count)
addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View?) {
setCount(sessionManager.sessionsOfType(private = isPrivate).count())
@ -66,16 +71,40 @@ class TabCounterToolbarButton(
val count = sessionManager.sessionsOfType(private = isPrivate).count()
reference.get()?.let {
it.contentDescription = getDescriptionForTabCount(it.context, count)
it.setCountWithAnimation(count)
}
}
private fun getDescriptionForTabCount(context: Context?, count: Int): String? {
return if (count > 1) context?.getString(
R.string.tab_counter_content_description_multi_tab,
count
) else context?.getString(R.string.tab_counter_content_description_one_tab)
private fun getTabContextMenu(context: Context): BrowserMenu {
val primaryTextColor = ThemeManager.resolveAttribute(R.attr.primaryText, context)
val menuItems = listOf(
BrowserMenuImageText(
label = context.getString(R.string.close_tab),
imageResource = R.drawable.ic_close,
iconTintColorResource = primaryTextColor,
textColorResource = primaryTextColor
) {
onItemTapped(TabCounterMenuItem.CloseTab)
},
BrowserMenuDivider(),
BrowserMenuImageText(
label = context.getString(R.string.browser_menu_new_tab),
imageResource = R.drawable.ic_new,
iconTintColorResource = primaryTextColor,
textColorResource = primaryTextColor
) {
onItemTapped(TabCounterMenuItem.NewTab(false))
},
BrowserMenuImageText(
label = context.getString(R.string.home_screen_shortcut_open_new_private_tab_2),
imageResource = R.drawable.ic_private_browsing,
iconTintColorResource = primaryTextColor,
textColorResource = primaryTextColor
) {
onItemTapped(TabCounterMenuItem.NewTab(true))
}
)
return BrowserMenuBuilder(menuItems).build(context)
}
private val sessionManagerObserver = object : SessionManager.Observer {

View File

@ -132,7 +132,10 @@ class DefaultToolbarIntegration(
)
}
val tabsAction = TabCounterToolbarButton(sessionManager, isPrivate) {
val onTabCounterMenuItemTapped = { item: TabCounterMenuItem ->
interactor.onTabCounterMenuItemTapped(item)
}
val tabsAction = TabCounterToolbarButton(sessionManager, isPrivate, onTabCounterMenuItemTapped) {
toolbar.hideKeyboard()
interactor.onTabCounterClicked()
}

View File

@ -14,7 +14,6 @@ import mozilla.components.browser.toolbar.display.DisplayToolbar
import mozilla.components.feature.customtabs.CustomTabsToolbarFeature
import mozilla.components.support.base.feature.LifecycleAwareFeature
import mozilla.components.support.base.feature.UserInteractionHandler
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.components.toolbar.ToolbarMenu
import org.mozilla.fenix.ext.settings
@ -34,13 +33,11 @@ class CustomTabsIntegration(
// Remove toolbar shadow
toolbar.elevation = 0f
if (!FeatureFlags.dynamicBottomToolbar) {
// Reduce margin height of EngineView from the top for the toolbar
engineLayout.run {
(layoutParams as ViewGroup.MarginLayoutParams).apply {
val toolbarHeight = resources.getDimension(R.dimen.browser_toolbar_height).toInt()
setMargins(0, toolbarHeight, 0, 0)
}
// Reduce margin height of EngineView from the top for the toolbar
engineLayout.run {
(layoutParams as ViewGroup.MarginLayoutParams).apply {
val toolbarHeight = resources.getDimension(R.dimen.browser_toolbar_height).toInt()
setMargins(0, toolbarHeight, 0, 0)
}
}

View File

@ -4,15 +4,19 @@
package org.mozilla.fenix.customtabs
import android.content.Intent
import androidx.navigation.NavDestination
import androidx.navigation.NavDirections
import mozilla.components.browser.session.runWithSession
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.manifest.WebAppManifestParser
import mozilla.components.feature.intent.ext.getSessionId
import mozilla.components.feature.pwa.ext.getWebAppManifest
import mozilla.components.feature.search.SearchAdapter
import mozilla.components.support.utils.SafeIntent
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.IntentReceiverActivity
import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
@ -24,6 +28,12 @@ import java.security.InvalidParameterException
*/
open class ExternalAppBrowserActivity : HomeActivity() {
private val openInFenixIntent by lazy {
Intent(this, IntentReceiverActivity::class.java).apply {
action = Intent.ACTION_VIEW
}
}
final override fun getBreadcrumbMessage(destination: NavDestination): String {
val fragmentName = resources.getResourceEntryName(destination.id)
return "Changing to fragment $fragmentName, isCustomTab: true"
@ -57,6 +67,19 @@ open class ExternalAppBrowserActivity : HomeActivity() {
}
}
override fun getSearchAdapter(store: BrowserStore): SearchAdapter {
val baseAdapter = super.getSearchAdapter(store)
return object : SearchAdapter {
override fun sendSearch(isPrivate: Boolean, text: String) {
baseAdapter.sendSearch(isPrivate, text)
startActivity(openInFenixIntent)
}
override fun isPrivateSession() = baseAdapter.isPrivateSession()
}
}
override fun onDestroy() {
super.onDestroy()

View File

@ -30,7 +30,6 @@ import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.arch.lifecycle.addObservers
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.BaseBrowserFragment
import org.mozilla.fenix.browser.CustomTabContextMenuCandidate
@ -106,7 +105,6 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler
trustedScopes
) { toolbarVisible ->
if (!toolbarVisible) { engineView.setDynamicToolbarMaxHeight(0) }
if (!FeatureFlags.dynamicBottomToolbar) { updateLayoutMargins(inFullScreen = !toolbarVisible) }
},
owner = this,
view = toolbar

View File

@ -12,7 +12,6 @@ import kotlinx.android.synthetic.main.download_dialog_layout.view.*
import mozilla.components.browser.state.state.content.DownloadState
import mozilla.components.feature.downloads.AbstractFetchDownloadService
import mozilla.components.feature.downloads.toMegabyteString
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.metrics
@ -47,7 +46,7 @@ class DynamicDownloadDialog(
private fun setupDownloadDialog(view: View) {
if (downloadState == null) return
view.apply {
if (FeatureFlags.dynamicBottomToolbar && layoutParams is CoordinatorLayout.LayoutParams) {
if (layoutParams is CoordinatorLayout.LayoutParams) {
(layoutParams as CoordinatorLayout.LayoutParams).apply {
behavior =
@ -126,10 +125,8 @@ class DynamicDownloadDialog(
fun show() {
view.visibility = View.VISIBLE
if (FeatureFlags.dynamicBottomToolbar) {
(view.layoutParams as CoordinatorLayout.LayoutParams).apply {
(behavior as DynamicDownloadDialogBehavior).forceExpand(view)
}
(view.layoutParams as CoordinatorLayout.LayoutParams).apply {
(behavior as DynamicDownloadDialogBehavior).forceExpand(view)
}
}

View File

@ -5,26 +5,17 @@
package org.mozilla.fenix.ext
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.Intent.ACTION_SEND
import android.content.Intent.EXTRA_SUBJECT
import android.content.Intent.EXTRA_TEXT
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.view.ContextThemeWrapper
import android.view.View
import android.view.ViewGroup
import androidx.annotation.StringRes
import androidx.fragment.app.FragmentActivity
import mozilla.components.browser.search.SearchEngineManager
import mozilla.components.support.base.log.Log
import mozilla.components.support.base.log.Log.Priority.WARN
import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config
import org.mozilla.fenix.FenixApplication
import org.mozilla.fenix.R
import org.mozilla.fenix.components.Components
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.settings.advanced.getSelectedLocale
@ -65,35 +56,6 @@ fun Context.asFragmentActivity() = (this as? ContextThemeWrapper)?.baseContext a
fun Context.getPreferenceKey(@StringRes resourceId: Int): String =
resources.getString(resourceId)
/**
* Shares content via [ACTION_SEND] intent.
*
* @param text the data to be shared [EXTRA_TEXT]
* @param subject of the intent [EXTRA_TEXT]
* @return true it is able to share false otherwise.
*/
@Deprecated("We are replacing the system share sheet with a custom version. See: [ShareFragment]")
fun Context.share(text: String, subject: String = ""): Boolean {
return try {
val intent = Intent(ACTION_SEND).apply {
type = "text/plain"
putExtra(EXTRA_SUBJECT, subject)
putExtra(EXTRA_TEXT, text)
flags = FLAG_ACTIVITY_NEW_TASK
}
val shareIntent = Intent.createChooser(intent, getString(R.string.menu_share_with)).apply {
flags = FLAG_ACTIVITY_NEW_TASK
}
startActivity(shareIntent)
true
} catch (e: ActivityNotFoundException) {
Log.log(WARN, message = "No activity to share to found", throwable = e, tag = "Reference-Browser")
false
}
}
/**
* Gets the Root View with an activity context
*

View File

@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@file:Suppress("NOTHING_TO_INLINE")
package org.mozilla.fenix.ext
import android.util.Log
@ -12,7 +14,6 @@ import org.mozilla.fenix.Config
*
* Meant to be used for logs that should not be visible in the production app.
*/
@Suppress("NOTHING_TO_INLINE")
inline fun logDebug(tag: String, message: String) {
if (Config.channel.isDebug) Log.d(tag, message)
}
@ -22,7 +23,6 @@ inline fun logDebug(tag: String, message: String) {
*
* Meant to be used for logs that should not be visible in the production app.
*/
@Suppress("NOTHING_TO_INLINE")
inline fun logWarn(tag: String, message: String) {
if (Config.channel.isDebug) Log.w(tag, message)
}
@ -32,7 +32,6 @@ inline fun logWarn(tag: String, message: String) {
*
* Meant to be used for logs that should not be visible in the production app.
*/
@Suppress("NOTHING_TO_INLINE")
inline fun logWarn(tag: String, message: String, err: Throwable) {
if (Config.channel.isDebug) Log.w(tag, message, err)
}
@ -42,7 +41,6 @@ inline fun logWarn(tag: String, message: String, err: Throwable) {
*
* Meant to be used for logs that should not be visible in the production app.
*/
@Suppress("NOTHING_TO_INLINE")
inline fun logErr(tag: String, message: String, err: Throwable) {
if (Config.channel.isDebug) Log.e(tag, message, err)
}

View File

@ -11,8 +11,12 @@ import androidx.navigation.NavDirections
import androidx.navigation.NavOptions
import androidx.navigation.Navigator
import io.sentry.Sentry
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.components.isSentryEnabled
/**
* Navigate from the fragment with [id] using the given [directions].
* If the id doesn't match the current destination, an error is recorded.
*/
fun NavController.nav(@IdRes id: Int?, directions: NavDirections, navOptions: NavOptions? = null) {
if (id == null || this.currentDestination?.id == id) {
this.navigate(directions, navOptions)
@ -55,7 +59,7 @@ fun NavController.alreadyOnDestination(@IdRes destId: Int?): Boolean {
}
fun recordIdException(actual: Int?, expected: Int?) {
if (!BuildConfig.SENTRY_TOKEN.isNullOrEmpty()) {
if (isSentryEnabled()) {
Sentry.capture("Fragment id $actual did not match expected $expected")
}
}

View File

@ -15,10 +15,7 @@ fun View.increaseTapArea(extraDps: Int) {
parent.post {
val touchRect = Rect()
getHitRect(touchRect)
touchRect.top -= dips
touchRect.left -= dips
touchRect.right += dips
touchRect.bottom += dips
touchRect.inset(-dips, -dips)
parent.touchDelegate = TouchDelegate(touchRect, this)
}
}

View File

@ -36,6 +36,7 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
@ -49,6 +50,9 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import mozilla.appservices.places.BookmarkRoot
import mozilla.components.browser.menu.BrowserMenu
import mozilla.components.browser.menu.BrowserMenuBuilder
import mozilla.components.browser.menu.item.BrowserMenuImageText
import mozilla.components.browser.menu.view.MenuButton
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
@ -95,6 +99,7 @@ import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit
import org.mozilla.fenix.tabtray.TabTrayDialogFragment
import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.FragmentPreDrawManager
import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.whatsnew.WhatsNew
import java.lang.ref.WeakReference
import kotlin.math.abs
@ -106,6 +111,8 @@ class HomeFragment : Fragment() {
ViewModelProvider.AndroidViewModelFactory(requireActivity().application)
}
private val args by navArgs<HomeFragmentArgs>()
private val snackbarAnchorView: View?
get() {
return if (requireContext().settings().shouldUseBottomToolbar) {
@ -148,7 +155,7 @@ class HomeFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
postponeEnterTransition()
StrictMode.allowThreadDiskReads().resetAfter {
lifecycleScope.launch(IO) {
if (!onboarding.userHasBeenOnboarded()) {
requireComponents.analytics.metrics.track(Event.OpenedAppFirstRun)
}
@ -306,6 +313,10 @@ class HomeFragment : Fragment() {
}
createHomeMenu(requireContext(), WeakReference(view.menuButton))
view.tab_button.setOnLongClickListener {
createTabCounterMenu(requireContext()).show(view.tab_button)
true
}
view.menuButton.setColorFilter(
ContextCompat.getColor(
@ -453,7 +464,40 @@ class HomeFragment : Fragment() {
if (browsingModeManager.mode == BrowsingMode.Private) {
activity?.window?.setBackgroundDrawableResource(R.drawable.private_home_background_gradient)
}
hideToolbar()
args.sessionToDelete?.also {
sessionManager.findSessionById(it)?.let { session ->
val snapshot = sessionManager.createSessionSnapshot(session)
val state = snapshot.engineSession?.saveState()
val isSelected =
session.id == requireComponents.core.store.state.selectedTabId ?: false
val snackbarMessage = if (snapshot.session.private) {
requireContext().getString(R.string.snackbar_private_tab_closed)
} else {
requireContext().getString(R.string.snackbar_tab_closed)
}
viewLifecycleOwner.lifecycleScope.allowUndo(
requireView(),
snackbarMessage,
requireContext().getString(R.string.snackbar_deleted_undo),
{
sessionManager.add(
snapshot.session,
isSelected,
engineSessionState = state
)
findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToBrowserFragment(null))
},
operation = { },
anchorView = snackbarAnchorView
)
requireComponents.useCases.tabsUseCases.removeTab.invoke(session)
}
}
}
override fun onPause() {
@ -545,6 +589,31 @@ class HomeFragment : Fragment() {
)
}
private fun createTabCounterMenu(context: Context): BrowserMenu {
val primaryTextColor = ThemeManager.resolveAttribute(R.attr.primaryText, context)
val isPrivate = (activity as HomeActivity).browsingModeManager.mode == BrowsingMode.Private
val menuItems = listOf(
BrowserMenuImageText(
label = context.getString(if (isPrivate) {
R.string.browser_menu_new_tab
} else {
R.string.home_screen_shortcut_open_new_private_tab_2
}),
imageResource = if (isPrivate) {
R.drawable.ic_new
} else {
R.drawable.ic_private_browsing
},
iconTintColorResource = primaryTextColor,
textColorResource = primaryTextColor
) {
(activity as HomeActivity).browsingModeManager.mode =
BrowsingMode.fromBoolean(!isPrivate)
}
)
return BrowserMenuBuilder(menuItems).build(context)
}
@SuppressWarnings("ComplexMethod", "LongMethod")
private fun createHomeMenu(context: Context, menuButtonView: WeakReference<MenuButton>) =
HomeMenu(

View File

@ -99,7 +99,7 @@ class HomeMenu(
val bookmarksItem = BrowserMenuImageText(
context.getString(R.string.library_bookmarks),
R.drawable.ic_bookmark_outline,
R.drawable.ic_bookmark_filled,
primaryTextColor
) {
onItemTapped.invoke(Item.Bookmarks)
@ -131,7 +131,7 @@ class HomeMenu(
val syncedTabsItem = BrowserMenuImageText(
context.getString(R.string.library_synced_tabs),
R.drawable.ic_tab_collection,
R.drawable.ic_synced_tabs,
primaryTextColor
) {
onItemTapped.invoke(Item.SyncedTabs)
@ -156,15 +156,16 @@ class HomeMenu(
if (shouldUseBottomToolbar) {
listOfNotNull(
accountAuthItem,
helpItem,
whatsNewItem,
BrowserMenuDivider(),
bookmarksItem,
addons,
BrowserMenuDivider(),
historyItem,
bookmarksItem,
if (FeatureFlags.syncedTabs) syncedTabsItem else null,
BrowserMenuDivider(),
addons,
settingsItem,
helpItem,
if (Settings.getInstance(context).shouldDeleteBrowsingDataOnQuit) quitItem else null
).also { items ->
items.getHighlight()?.let { onHighlightPresent(it) }
@ -172,16 +173,17 @@ class HomeMenu(
} else {
listOfNotNull(
if (Settings.getInstance(context).shouldDeleteBrowsingDataOnQuit) quitItem else null,
helpItem,
settingsItem,
addons,
accountAuthItem,
BrowserMenuDivider(),
if (FeatureFlags.syncedTabs) syncedTabsItem else null,
bookmarksItem,
historyItem,
if (FeatureFlags.syncedTabs) syncedTabsItem else null,
BrowserMenuDivider(),
whatsNewItem
addons,
BrowserMenuDivider(),
whatsNewItem,
helpItem,
accountAuthItem
).also { items ->
items.getHighlight()?.let { onHighlightPresent(it) }
}

View File

@ -0,0 +1,38 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.home.intent
import android.content.Intent
import androidx.navigation.NavController
import mozilla.components.feature.media.service.AbstractMediaService
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.ext.components
/**
* When the media notification is clicked we need to switch to the tab where the audio/video is
* playing. This intent has the following informations:
* action - [AbstractMediaService.Companion.ACTION_SWITCH_TAB]
* extra string for the tab id - [AbstractMediaService.Companion.EXTRA_TAB_ID]
*/
class OpenSpecificTabIntentProcessor(
private val activity: HomeActivity
) : HomeIntentProcessor {
override fun process(intent: Intent, navController: NavController, out: Intent): Boolean {
if (intent.action == AbstractMediaService.Companion.ACTION_SWITCH_TAB) {
val sessionManager = activity.components.core.sessionManager
val sessionId = intent.extras?.getString(AbstractMediaService.Companion.EXTRA_TAB_ID)
val session = sessionId?.let { sessionManager.findSessionById(it) }
if (session != null) {
sessionManager.select(session)
activity.openToBrowser(BrowserDirection.FromGlobal)
return true
}
}
return false
}
}

View File

@ -80,7 +80,7 @@ class OnboardingTrackingProtectionViewHolder(view: View) : RecyclerView.ViewHold
strictTrackingProtection.performClick()
}
val strictTitle =
view.context.getString(R.string.onboarding_tracking_protection_strict_button)
view.context.getString(R.string.onboarding_tracking_protection_strict_option)
val strictSummary =
view.context.getString(R.string.onboarding_tracking_protection_strict_button_description_2)
contentDescription = "$strictTitle. $strictSummary"

View File

@ -10,6 +10,8 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.res.Resources
import androidx.navigation.NavController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import mozilla.components.concept.engine.prompt.ShareData
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
@ -25,6 +27,7 @@ interface HistoryController {
fun handleDeleteSome(items: Set<HistoryItem>)
fun handleCopyUrl(item: HistoryItem)
fun handleShare(item: HistoryItem)
fun handleRequestSync()
}
class DefaultHistoryController(
@ -33,16 +36,21 @@ class DefaultHistoryController(
private val resources: Resources,
private val snackbar: FenixSnackbar,
private val clipboardManager: ClipboardManager,
private val scope: CoroutineScope,
private val openToBrowser: (item: HistoryItem, mode: BrowsingMode?) -> Unit,
private val displayDeleteAll: () -> Unit,
private val invalidateOptionsMenu: () -> Unit,
private val deleteHistoryItems: (Set<HistoryItem>) -> Unit
private val deleteHistoryItems: (Set<HistoryItem>) -> Unit,
private val syncHistory: suspend () -> Unit
) : HistoryController {
override fun handleOpen(item: HistoryItem, mode: BrowsingMode?) {
openToBrowser(item, mode)
}
override fun handleSelect(item: HistoryItem) {
if (store.state.mode === HistoryFragmentState.Mode.Syncing) {
return
}
store.dispatch(HistoryFragmentAction.AddItemForRemoval(item))
}
@ -87,4 +95,12 @@ class DefaultHistoryController(
)
)
}
override fun handleRequestSync() {
scope.launch {
store.dispatch(HistoryFragmentAction.StartSync)
syncHistory.invoke()
store.dispatch(HistoryFragmentAction.FinishSync)
}
}
}

View File

@ -24,6 +24,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.service.fxa.sync.SyncReason
import mozilla.components.support.base.feature.UserInteractionHandler
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
@ -72,10 +73,12 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
isDisplayedWithBrowserToolbar = false
),
activity?.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager,
lifecycleScope,
::openItem,
::displayDeleteAllDialog,
::invalidateOptionsMenu,
::deleteHistoryItems
::deleteHistoryItems,
::syncHistory
)
historyInteractor = HistoryInteractor(
historyController
@ -268,4 +271,10 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
)
nav(R.id.historyFragment, directions)
}
private suspend fun syncHistory() {
val accountManager = requireComponents.backgroundServices.accountManager
accountManager.syncNowAsync(SyncReason.User).await()
viewModel.invalidate()
}
}

View File

@ -32,6 +32,8 @@ sealed class HistoryFragmentAction : Action {
data class RemoveItemForRemoval(val item: HistoryItem) : HistoryFragmentAction()
object EnterDeletionMode : HistoryFragmentAction()
object ExitDeletionMode : HistoryFragmentAction()
object StartSync : HistoryFragmentAction()
object FinishSync : HistoryFragmentAction()
}
/**
@ -45,6 +47,7 @@ data class HistoryFragmentState(val items: List<HistoryItem>, val mode: Mode) :
object Normal : Mode()
object Deleting : Mode()
object Syncing : Mode()
data class Editing(override val selectedItems: Set<HistoryItem>) : Mode()
}
}
@ -72,5 +75,7 @@ private fun historyStateReducer(
is HistoryFragmentAction.ExitEditMode -> state.copy(mode = HistoryFragmentState.Mode.Normal)
is HistoryFragmentAction.EnterDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Deleting)
is HistoryFragmentAction.ExitDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Normal)
is HistoryFragmentAction.StartSync -> state.copy(mode = HistoryFragmentState.Mode.Syncing)
is HistoryFragmentAction.FinishSync -> state.copy(mode = HistoryFragmentState.Mode.Normal)
}
}

View File

@ -57,4 +57,8 @@ class HistoryInteractor(
override fun onDeleteSome(items: Set<HistoryItem>) {
historyController.handleDeleteSome(items)
}
override fun onRequestSync() {
historyController.handleRequestSync()
}
}

View File

@ -16,6 +16,7 @@ import mozilla.components.support.base.feature.UserInteractionHandler
import org.mozilla.fenix.R
import org.mozilla.fenix.library.LibraryPageView
import org.mozilla.fenix.library.SelectionInteractor
import org.mozilla.fenix.theme.ThemeManager
/**
* Interface for the HistoryViewInteractor. This interface is implemented by objects that want
@ -71,6 +72,11 @@ interface HistoryViewInteractor : SelectionInteractor<HistoryItem> {
* @param items the history items to delete
*/
fun onDeleteSome(items: Set<HistoryItem>)
/**
* Called when the user requests a sync of the history
*/
fun onRequestSync()
}
/**
@ -97,12 +103,23 @@ class HistoryView(
adapter = historyAdapter
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
}
val primaryTextColor =
ThemeManager.resolveAttribute(R.attr.primaryText, context)
view.swipe_refresh.setColorSchemeColors(primaryTextColor)
view.swipe_refresh.setOnRefreshListener {
interactor.onRequestSync()
view.history_list.scrollToPosition(0)
}
}
fun update(state: HistoryFragmentState) {
val oldMode = mode
view.progress_bar.isVisible = state.mode === HistoryFragmentState.Mode.Deleting
view.swipe_refresh.isRefreshing = state.mode === HistoryFragmentState.Mode.Syncing
view.swipe_refresh.isEnabled =
state.mode === HistoryFragmentState.Mode.Normal || state.mode === HistoryFragmentState.Mode.Syncing
items = state.items
mode = state.mode

View File

@ -1,73 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.settings
import android.content.Intent
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import android.provider.Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.ext.showToolbar
/**
* Lets the user control their default browser preferences
*/
class DefaultBrowserSettingsFragment : PreferenceFragmentCompat() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val makeDefaultBrowserKey = getPreferenceKey(R.string.pref_key_make_default_browser)
val preferenceMakeDefaultBrowser = findPreference<Preference>(makeDefaultBrowserKey)
preferenceMakeDefaultBrowser?.onPreferenceClickListener =
getClickListenerForMakeDefaultBrowser()
}
override fun onResume() {
super.onResume()
showToolbar(getString(R.string.preferences_set_as_default_browser))
updatePreferences()
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.default_browser_preferences, rootKey)
updatePreferences()
}
private fun updatePreferences() {
findPreference<DefaultBrowserPreference>(getPreferenceKey(R.string.pref_key_make_default_browser))
?.updateSwitch()
}
private fun getClickListenerForMakeDefaultBrowser(): Preference.OnPreferenceClickListener {
return if (SDK_INT >= Build.VERSION_CODES.N) {
Preference.OnPreferenceClickListener {
val intent = Intent(ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
startActivity(intent)
true
}
} else {
Preference.OnPreferenceClickListener {
(activity as HomeActivity).openToBrowserAndLoad(
searchTermOrURL = SupportUtils.getSumoURLForTopic(
requireContext(),
SupportUtils.SumoTopic.SET_AS_DEFAULT_BROWSER
),
newTab = true,
from = BrowserDirection.FromDefaultBrowserSettingsFragment
)
true
}
}
}
}

View File

@ -8,8 +8,10 @@ import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.provider.Settings
import android.widget.Toast
import androidx.appcompat.content.res.AppCompatResources
import androidx.lifecycle.lifecycleScope
@ -114,6 +116,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
updateMakeDefaultBrowserPreference()
}
override fun onResume() {
@ -173,6 +176,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
requireComponents.backgroundServices.accountManager.accountProfile()
)
}
updateMakeDefaultBrowserPreference()
}
@Suppress("ComplexMethod", "LongMethod")
@ -208,9 +213,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
requireContext().metrics.track(Event.AddonsOpenInSettings)
SettingsFragmentDirections.actionSettingsFragmentToAddonsFragment()
}
resources.getString(R.string.pref_key_make_default_browser) -> {
SettingsFragmentDirections.actionSettingsFragmentToDefaultBrowserSettingsFragment()
}
resources.getString(R.string.pref_key_data_choices) -> {
SettingsFragmentDirections.actionSettingsFragmentToDataChoicesFragment()
}
@ -289,9 +291,11 @@ class SettingsFragment : PreferenceFragmentCompat() {
private fun setupPreferences() {
val leakKey = getPreferenceKey(R.string.pref_key_leakcanary)
val debuggingKey = getPreferenceKey(R.string.pref_key_remote_debugging)
val makeDefaultBrowserKey = getPreferenceKey(R.string.pref_key_make_default_browser)
val preferenceLeakCanary = findPreference<Preference>(leakKey)
val preferenceRemoteDebugging = findPreference<Preference>(debuggingKey)
val preferenceMakeDefaultBrowser = findPreference<Preference>(makeDefaultBrowserKey)
if (!Config.channel.isReleased) {
preferenceLeakCanary?.setOnPreferenceChangeListener { _, newValue ->
@ -308,6 +312,9 @@ class SettingsFragment : PreferenceFragmentCompat() {
true
}
preferenceMakeDefaultBrowser?.onPreferenceClickListener =
getClickListenerForMakeDefaultBrowser()
val preferenceFxAOverride =
findPreference<Preference>(getPreferenceKey(R.string.pref_key_override_fxa_server))
val preferenceSyncOverride =
@ -335,6 +342,33 @@ class SettingsFragment : PreferenceFragmentCompat() {
)?.isVisible = requireContext().settings().showSecretDebugMenuThisSession
}
private fun getClickListenerForMakeDefaultBrowser(): Preference.OnPreferenceClickListener {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Preference.OnPreferenceClickListener {
val intent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
startActivity(intent)
true
}
} else {
Preference.OnPreferenceClickListener {
(activity as HomeActivity).openToBrowserAndLoad(
searchTermOrURL = SupportUtils.getSumoURLForTopic(
requireContext(),
SupportUtils.SumoTopic.SET_AS_DEFAULT_BROWSER
),
newTab = true,
from = BrowserDirection.FromSettings
)
true
}
}
}
private fun updateMakeDefaultBrowserPreference() {
findPreference<DefaultBrowserPreference>(getPreferenceKey(R.string.pref_key_make_default_browser))
?.updateSwitch()
}
private fun navigateFromSettings(directions: NavDirections) {
view?.findNavController()?.let { navController ->
if (navController.currentDestination?.id == R.id.settingsFragment) {

View File

@ -111,8 +111,9 @@ class TrackingProtectionFragment : PreferenceFragmentCompat() {
Event.TrackingProtectionSettingChanged.Setting.STANDARD
TrackingProtectionMode.STRICT ->
Event.TrackingProtectionSettingChanged.Setting.STRICT
TrackingProtectionMode.CUSTOM -> null
}?.let { setting ->
TrackingProtectionMode.CUSTOM ->
Event.TrackingProtectionSettingChanged.Setting.CUSTOM
}.let { setting ->
metrics.track(Event.TrackingProtectionSettingChanged(setting))
}
}

View File

@ -7,30 +7,24 @@ package org.mozilla.fenix.settings.logins
import android.os.Bundle
import android.text.Editable
import android.text.InputType
import android.text.TextWatcher
import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.fragment_edit_login.inputLayoutPassword
import kotlinx.android.synthetic.main.fragment_edit_login.inputLayoutUsername
import kotlinx.android.synthetic.main.fragment_edit_login.hostnameText
import kotlinx.android.synthetic.main.fragment_edit_login.usernameText
import kotlinx.android.synthetic.main.fragment_edit_login.passwordText
import kotlinx.android.synthetic.main.fragment_edit_login.clearUsernameTextButton
import kotlinx.android.synthetic.main.fragment_edit_login.clearPasswordTextButton
import kotlinx.android.synthetic.main.fragment_edit_login.revealPasswordButton
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.launch
import kotlinx.android.synthetic.main.fragment_edit_login.*
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import mozilla.components.concept.storage.Login
import mozilla.components.service.sync.logins.InvalidRecordException
@ -38,7 +32,6 @@ import mozilla.components.service.sync.logins.LoginsStorageException
import mozilla.components.service.sync.logins.NoSuchRecordException
import mozilla.components.support.ktx.android.view.hideKeyboard
import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.StoreProvider
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
@ -55,10 +48,12 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
private lateinit var savedLoginsStore: LoginsFragmentStore
fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
private lateinit var oldLogin: SavedLogin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
oldLogin = args.savedLoginItem
savedLoginsStore = StoreProvider.get(this) {
LoginsFragmentStore(
LoginsListState(
@ -82,12 +77,16 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
hostnameText.isFocusable = false
usernameText.text = args.savedLoginItem.username.toEditable()
passwordText.text = args.savedLoginItem.password!!.toEditable()
passwordText.text = args.savedLoginItem.password.toEditable()
// TODO: extend PasswordTransformationMethod() to change bullets to asterisks
passwordText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
passwordText.compoundDrawablePadding =
requireContext().resources
.getDimensionPixelOffset(R.dimen.saved_logins_end_icon_drawable_padding)
setUpClickListeners()
setUpTextListeners()
}
private fun setUpClickListeners() {
@ -96,18 +95,100 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
usernameText.isCursorVisible = true
usernameText.hasFocus()
inputLayoutUsername.hasFocus()
it.isEnabled = false
}
clearPasswordTextButton.setOnClickListener {
passwordText.text?.clear()
passwordText.isCursorVisible = true
passwordText.hasFocus()
inputLayoutPassword.hasFocus()
it.isEnabled = false
}
revealPasswordButton.setOnClickListener {
togglePasswordReveal()
}
var firstClick = true
passwordText.setOnClickListener {
togglePasswordReveal()
if (firstClick) {
togglePasswordReveal()
firstClick = false
}
}
}
private fun setUpTextListeners() {
val frag = view?.findViewById<View>(R.id.editLoginFragment)
frag?.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
view?.hideKeyboard()
}
}
editLoginLayout.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {
view?.hideKeyboard()
}
}
usernameText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(u: Editable?) {
if (u.toString() == oldLogin.username) {
inputLayoutUsername.error = null
inputLayoutUsername.errorIconDrawable = null
} else {
clearUsernameTextButton.isEnabled = true
// setDupeError() TODO in #10173
}
}
override fun beforeTextChanged(u: CharSequence?, start: Int, count: Int, after: Int) {
// NOOP
}
override fun onTextChanged(u: CharSequence?, start: Int, before: Int, count: Int) {
// NOOP
}
})
passwordText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p: Editable?) {
when {
p.toString().isEmpty() -> {
clearPasswordTextButton.isEnabled = false
setPasswordError()
}
p.toString() == oldLogin.password -> {
inputLayoutPassword.error = null
inputLayoutPassword.errorIconDrawable = null
clearPasswordTextButton.isEnabled = true
}
else -> {
inputLayoutPassword.error = null
inputLayoutPassword.errorIconDrawable = null
clearPasswordTextButton.isEnabled = true
}
}
}
override fun beforeTextChanged(p: CharSequence?, start: Int, count: Int, after: Int) {
// NOOP
}
override fun onTextChanged(p: CharSequence?, start: Int, before: Int, count: Int) {
// NOOP
}
})
}
private fun setPasswordError() {
inputLayoutPassword?.let { layout ->
layout.error = context?.getString(R.string.saved_login_password_required)
layout.setErrorIconDrawable(R.drawable.mozac_ic_warning)
layout.errorIconDrawable?.setTint(
ContextCompat.getColor(requireContext(), R.color.design_default_color_error)
)
}
}
@ -126,26 +207,26 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
R.id.save_login_button -> {
view?.hideKeyboard()
try {
if (!passwordText.text.isNullOrBlank()) {
if (!passwordText.text.isNullOrBlank()) {
try {
attemptSaveAndExit()
} else {
view?.let {
FenixSnackbar.make(
view = it,
duration = Snackbar.LENGTH_SHORT,
isDisplayedWithBrowserToolbar = false
).setText(getString(R.string.saved_login_password_required)).show()
} catch (loginException: LoginsStorageException) {
when (loginException) {
is NoSuchRecordException,
is InvalidRecordException -> {
Log.e(
"Edit login",
"Failed to save edited login.",
loginException
)
}
else -> Log.e(
"Edit login",
"Failed to save edited login.",
loginException
)
}
}
} catch (loginException: LoginsStorageException) {
when (loginException) {
is NoSuchRecordException,
is InvalidRecordException -> {
Log.e("Edit login", "Failed to save edited login.", loginException)
}
else -> Log.e("Edit login", "Failed to save edited login.", loginException)
}
}
true
}
@ -158,9 +239,11 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
var saveLoginJob: Deferred<Unit>? = null
viewLifecycleOwner.lifecycleScope.launch(IO) {
saveLoginJob = async {
val oldLogin = requireContext().components.core.passwordsStorage.get(args.savedLoginItem.guid)
val oldLogin =
requireContext().components.core.passwordsStorage.get(args.savedLoginItem.guid)
// Update requires a Login type, which needs at least one of httpRealm or formActionOrigin
// Update requires a Login type, which needs at least one of
// httpRealm or formActionOrigin
val loginToSave = Login(
guid = oldLogin?.guid,
origin = oldLogin?.origin!!,

View File

@ -24,7 +24,7 @@ data class SavedLogin(
val guid: String,
val origin: String,
val username: String,
val password: String?,
val password: String,
val timeLastUsed: Long
) : Parcelable

View File

@ -30,6 +30,7 @@ import mozilla.components.concept.sync.AuthType
import mozilla.components.concept.sync.OAuthAccount
import mozilla.components.service.fxa.SyncEngine
import mozilla.components.service.fxa.manager.SyncEnginesStorage
import org.mozilla.fenix.Config
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
@ -112,11 +113,17 @@ class SavedLoginsAuthFragment : PreferenceFragmentCompat(), AccountObserver {
val autofillPreferenceKey = getPreferenceKey(R.string.pref_key_autofill_logins)
findPreference<SwitchPreference>(autofillPreferenceKey)?.apply {
isEnabled = context.settings().shouldPromptToSaveLogins
isChecked =
context.settings().shouldAutofillLogins && context.settings().shouldPromptToSaveLogins
onPreferenceChangeListener =
SharedPreferenceUpdater()
// The ability to toggle autofill on the engine is only available in Nightly currently
// See https://github.com/mozilla-mobile/fenix/issues/11320
isVisible = Config.channel.isNightlyOrDebug
isChecked = context.settings().shouldAutofillLogins
onPreferenceChangeListener = object : SharedPreferenceUpdater() {
override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean {
context?.components?.core?.engine?.settings?.loginAutofillEnabled =
newValue as Boolean
return super.onPreferenceChange(preference, newValue)
}
}
}
val savedLoginsKey = getPreferenceKey(R.string.pref_key_saved_logins)

View File

@ -18,7 +18,7 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import mozilla.components.concept.sync.DeviceCapability
import mozilla.components.feature.share.RecentAppsStorage
@ -38,6 +38,8 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) {
private val fxaAccountManager = application.components.backgroundServices.accountManager
@VisibleForTesting
internal var recentAppsStorage = RecentAppsStorage(application.applicationContext)
@VisibleForTesting
internal var ioDispatcher = Dispatchers.IO
private val devicesListLiveData = MutableLiveData<List<SyncShareOption>>(emptyList())
private val appsListLiveData = MutableLiveData<List<AppShareOption>>(emptyList())
@ -49,7 +51,7 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) {
override fun onAvailable(network: Network?) = reloadDevices(network)
private fun reloadDevices(network: Network?) {
viewModelScope.launch(IO) {
viewModelScope.launch(ioDispatcher) {
fxaAccountManager.authenticatedAccount()
?.deviceConstellation()
?.refreshDevicesAsync()
@ -83,7 +85,7 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) {
connectivityManager?.registerNetworkCallback(networkRequest, networkCallback)
// Start preparing the data as soon as we have a valid Context
viewModelScope.launch(IO) {
viewModelScope.launch(ioDispatcher) {
val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
flags = Intent.FLAG_ACTIVITY_NEW_TASK
@ -98,7 +100,7 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) {
appsListLiveData.postValue(apps)
}
viewModelScope.launch(IO) {
viewModelScope.launch(ioDispatcher) {
val devices = buildDeviceList(fxaAccountManager)
devicesListLiveData.postValue(devices)
}

View File

@ -45,6 +45,7 @@ class SyncedTabsLayout @JvmOverloads constructor(
synced_tabs_list.visibility = View.GONE
sync_tabs_status.visibility = View.VISIBLE
synced_tabs_pull_to_refresh.isEnabled = false
}
override fun displaySyncedTabs(syncedTabs: List<SyncedDeviceTabs>) {

View File

@ -23,26 +23,63 @@ import mozilla.components.browser.state.selector.normalTabs
import mozilla.components.browser.state.selector.privateTabs
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.concept.tabstray.Tab
import mozilla.components.feature.tabs.tabstray.TabsFeature
import mozilla.components.feature.tab.collections.TabCollection
import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.collections.SaveCollectionStep
import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.sessionsOfType
import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.components.TabCollectionStorage
@SuppressWarnings("TooManyFunctions")
@SuppressWarnings("TooManyFunctions", "LargeClass")
class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
private val tabsFeature = ViewBoundFeatureWrapper<TabsFeature>()
private var _tabTrayView: TabTrayView? = null
private val tabTrayView: TabTrayView
get() = _tabTrayView!!
private val collectionStorageObserver = object : TabCollectionStorage.Observer {
override fun onCollectionCreated(title: String, sessions: List<Session>) {
showCollectionSnackbar()
}
override fun onTabsAdded(tabCollection: TabCollection, sessions: List<Session>) {
showCollectionSnackbar()
}
}
private val selectTabUseCase = object : TabsUseCases.SelectTabUseCase {
override fun invoke(tabId: String) {
requireComponents.useCases.tabsUseCases.selectTab(tabId)
navigateToBrowser()
}
override fun invoke(session: Session) {
requireComponents.useCases.tabsUseCases.selectTab(session)
navigateToBrowser()
}
}
private val removeTabUseCase = object : TabsUseCases.RemoveTabUseCase {
override fun invoke(sessionId: String) {
showUndoSnackbarForTab(sessionId)
requireComponents.useCases.tabsUseCases.removeTab(sessionId)
}
override fun invoke(session: Session) {
showUndoSnackbarForTab(session.id)
requireComponents.useCases.tabsUseCases.removeTab(session)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.TabTrayDialogStyle)
@ -57,7 +94,10 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
val isLandscape = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE
tabTrayView.setTopOffset(isLandscape)
if (isLandscape) {
tabTrayView.expand()
}
}
@ -77,13 +117,14 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
TabsFeature(
tabTrayView.view.tabsTray,
view.context.components.core.store,
view.context.components.useCases.tabsUseCases,
selectTabUseCase,
removeTabUseCase,
view.context.components.useCases.thumbnailUseCases,
{ it.content.private == isPrivate },
{ }
),
viewLifecycleOwner,
view
owner = viewLifecycleOwner,
view = view
)
tabLayout.setOnClickListener {
@ -110,20 +151,15 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
}
}
override fun onDestroyView() {
super.onDestroyView()
_tabTrayView = null
}
override fun onTabClosed(tab: Tab) {
private fun showUndoSnackbarForTab(sessionId: String) {
val sessionManager = view?.context?.components?.core?.sessionManager
val snapshot = sessionManager
?.findSessionById(tab.id)?.let {
?.findSessionById(sessionId)?.let {
sessionManager.createSessionSnapshot(it)
} ?: return
val state = snapshot.engineSession?.saveState()
val isSelected = tab.id == requireComponents.core.store.state.selectedTabId ?: false
val isSelected = sessionId == requireComponents.core.store.state.selectedTabId ?: false
val snackbarMessage = if (snapshot.session.private) {
getString(R.string.snackbar_private_tab_closed)
@ -145,7 +181,12 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
}
}
override fun onTabSelected(tab: Tab) {
override fun onDestroyView() {
_tabTrayView = null
super.onDestroyView()
}
fun navigateToBrowser() {
dismissAllowingStateLoss()
if (findNavController().currentDestination?.id == R.id.browserFragment) return
if (!findNavController().popBackStack(R.id.browserFragment, false)) {
@ -182,6 +223,9 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
if (navController.currentDestination?.id == R.id.collectionCreationFragment) return
// Only register the observer right before moving to collection creation
registerCollectionStorageObserver()
val directions = TabTrayDialogFragmentDirections.actionGlobalCollectionCreationFragment(
tabIds = tabIds,
saveCollectionStep = step,
@ -252,11 +296,37 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
}
}
private fun registerCollectionStorageObserver() {
requireComponents.core.tabCollectionStorage.register(collectionStorageObserver, this)
}
private fun showCollectionSnackbar() {
view.let {
val snackbar = FenixSnackbar
.make(
duration = FenixSnackbar.LENGTH_LONG,
isDisplayedWithBrowserToolbar = true,
view = (view as View)
)
.setText(requireContext().getString(R.string.create_collection_tabs_saved))
.setAction(requireContext().getString(R.string.create_collection_view)) {
dismissAllowingStateLoss()
findNavController().navigate(TabTrayDialogFragmentDirections.actionGlobalHome())
}
snackbar.view.elevation = ELEVATION
snackbar.show()
}
}
companion object {
private const val ELEVATION = 80f
private const val FRAGMENT_TAG = "tabTrayDialogFragment"
fun show(fragmentManager: FragmentManager) {
// If we've killed the fragmentManager. Let's not try to show the tabs tray.
if (fragmentManager.isDestroyed) { return }
// We want to make sure we don't accidentally show the dialog twice if
// a user somehow manages to trigger `show()` twice before we present the dialog.
if (fragmentManager.findFragmentByTag(FRAGMENT_TAG) == null) {

View File

@ -14,7 +14,6 @@ import androidx.core.view.isVisible
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.tabs.TabLayout
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.component_tabstray.*
import kotlinx.android.synthetic.main.component_tabstray.view.*
import kotlinx.android.synthetic.main.component_tabstray_fab.view.*
import mozilla.components.browser.menu.BrowserMenuBuilder
@ -24,14 +23,10 @@ import mozilla.components.browser.state.selector.privateTabs
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.tabstray.BrowserTabsTray
import mozilla.components.concept.tabstray.Tab
import mozilla.components.concept.tabstray.TabsTray
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
interface TabTrayInteractor {
fun onTabClosed(tab: Tab)
fun onTabSelected(tab: Tab)
fun onNewTabTapped(private: Boolean)
fun onTabTrayDismissed()
fun onShareTabsClicked(private: Boolean)
@ -47,7 +42,7 @@ class TabTrayView(
isPrivate: Boolean,
startingInLandscape: Boolean,
private val filterTabs: ((TabSessionState) -> Boolean) -> Unit
) : LayoutContainer, TabsTray.Observer, TabLayout.OnTabSelectedListener {
) : LayoutContainer, TabLayout.OnTabSelectedListener {
val fabView = LayoutInflater.from(container.context)
.inflate(R.layout.component_tabstray_fab, container, true)
@ -109,7 +104,7 @@ class TabTrayView(
expand()
}
behavior.setExpandedOffset(view.context.resources.getDimension(R.dimen.tab_tray_top_offset).toInt())
setTopOffset(startingInLandscape)
(view.tabsTray as? BrowserTabsTray)?.also { tray ->
TabsTouchHelper(tray.tabsAdapter).attachToRecyclerView(tray)
@ -150,18 +145,12 @@ class TabTrayView(
fabView.new_tab_button.setOnClickListener {
interactor.onNewTabTapped(isPrivateModeSelected)
}
tabsTray.register(this, view)
}
fun expand() {
behavior.state = BottomSheetBehavior.STATE_EXPANDED
}
override fun onTabSelected(tab: Tab) {
interactor.onTabSelected(tab)
}
override fun onTabSelected(tab: TabLayout.Tab?) {
// We need a better way to determine which tab was selected.
val filter: (TabSessionState) -> Boolean = when (tab?.position) {
@ -175,6 +164,9 @@ class TabTrayView(
updateState(view.context.components.core.store.state)
}
override fun onTabReselected(tab: TabLayout.Tab?) { /*noop*/ }
override fun onTabUnselected(tab: TabLayout.Tab?) { /*noop*/ }
fun updateState(state: BrowserState) {
view.let {
val hasNoTabs = if (isPrivateModeSelected) {
@ -197,13 +189,7 @@ class TabTrayView(
}
}
override fun onTabClosed(tab: Tab) {
interactor.onTabClosed(tab)
}
override fun onTabReselected(tab: TabLayout.Tab?) { /*noop*/ }
override fun onTabUnselected(tab: TabLayout.Tab?) { /*noop*/ }
fun toggleFabText(private: Boolean) {
private fun toggleFabText(private: Boolean) {
if (private) {
fabView.new_tab_button.extend()
fabView.new_tab_button.contentDescription = view.context.resources.getString(R.string.add_private_tab)
@ -213,6 +199,16 @@ class TabTrayView(
}
}
fun setTopOffset(landscape: Boolean) {
val topOffset = if (landscape) {
0
} else {
view.context.resources.getDimension(R.dimen.tab_tray_top_offset).toInt()
}
behavior.setExpandedOffset(topOffset)
}
companion object {
private const val DEFAULT_TAB_ID = 0
private const val PRIVATE_TAB_ID = 1

View File

@ -17,6 +17,7 @@ import android.view.View
import android.widget.RemoteViews
import androidx.annotation.Dimension
import androidx.annotation.Dimension.DP
import androidx.annotation.VisibleForTesting
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.graphics.drawable.toBitmap
import org.mozilla.fenix.HomeActivity
@ -27,7 +28,6 @@ import org.mozilla.fenix.home.intent.StartSearchIntentProcessor
import org.mozilla.fenix.widget.VoiceSearchActivity
import org.mozilla.fenix.widget.VoiceSearchActivity.Companion.SPEECH_PROCESSING
@Suppress("TooManyFunctions")
class SearchWidgetProvider : AppWidgetProvider() {
// Implementation note:
// This class name (SearchWidgetProvider) and package name (org.mozilla.gecko.search) should
@ -79,31 +79,9 @@ class SearchWidgetProvider : AppWidgetProvider() {
appWidgetManager.updateAppWidget(appWidgetId, views)
}
private fun getLayoutSize(@Dimension(unit = DP) dp: Int) = when {
dp >= DP_LARGE -> SearchWidgetProviderSize.LARGE
dp >= DP_MEDIUM -> SearchWidgetProviderSize.MEDIUM
dp >= DP_SMALL -> SearchWidgetProviderSize.SMALL
dp >= DP_EXTRA_SMALL -> SearchWidgetProviderSize.EXTRA_SMALL_V2
else -> SearchWidgetProviderSize.EXTRA_SMALL_V1
}
private fun getLayout(size: SearchWidgetProviderSize, showMic: Boolean) = when (size) {
SearchWidgetProviderSize.LARGE -> R.layout.search_widget_large
SearchWidgetProviderSize.MEDIUM -> R.layout.search_widget_medium
SearchWidgetProviderSize.SMALL -> {
if (showMic) R.layout.search_widget_small
else R.layout.search_widget_small_no_mic
}
SearchWidgetProviderSize.EXTRA_SMALL_V2 -> R.layout.search_widget_extra_small_v2
SearchWidgetProviderSize.EXTRA_SMALL_V1 -> R.layout.search_widget_extra_small_v1
}
private fun getText(layout: SearchWidgetProviderSize, context: Context) = when (layout) {
SearchWidgetProviderSize.MEDIUM -> context.getString(R.string.search_widget_text_short)
SearchWidgetProviderSize.LARGE -> context.getString(R.string.search_widget_text_long)
else -> null
}
/**
* Builds pending intent that opens the browser and starts a new text search.
*/
private fun createTextSearchIntent(context: Context): PendingIntent {
return Intent(context, IntentReceiverActivity::class.java)
.let { intent ->
@ -114,6 +92,9 @@ class SearchWidgetProvider : AppWidgetProvider() {
}
}
/**
* Builds pending intent that starts a new voice search.
*/
private fun createVoiceSearchIntent(context: Context): PendingIntent? {
val voiceIntent = Intent(context, VoiceSearchActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
@ -156,7 +137,7 @@ class SearchWidgetProvider : AppWidgetProvider() {
// Unlike "small" widget, "medium" and "large" sizes do not have separate layouts
// that exclude the microphone icon, which is why we must hide it accordingly here.
if (voiceSearchIntent == null) {
this.setViewVisibility(R.id.button_search_widget_voice, View.GONE)
setViewVisibility(R.id.button_search_widget_voice, View.GONE)
}
}
}
@ -187,6 +168,40 @@ class SearchWidgetProvider : AppWidgetProvider() {
private const val DP_LARGE = 256
private const val REQUEST_CODE_NEW_TAB = 0
private const val REQUEST_CODE_VOICE = 1
@VisibleForTesting
internal fun getLayoutSize(@Dimension(unit = DP) dp: Int) = when {
dp >= DP_LARGE -> SearchWidgetProviderSize.LARGE
dp >= DP_MEDIUM -> SearchWidgetProviderSize.MEDIUM
dp >= DP_SMALL -> SearchWidgetProviderSize.SMALL
dp >= DP_EXTRA_SMALL -> SearchWidgetProviderSize.EXTRA_SMALL_V2
else -> SearchWidgetProviderSize.EXTRA_SMALL_V1
}
/**
* Get the layout resource to use for the search widget.
*/
@VisibleForTesting
internal fun getLayout(size: SearchWidgetProviderSize, showMic: Boolean) = when (size) {
SearchWidgetProviderSize.LARGE -> R.layout.search_widget_large
SearchWidgetProviderSize.MEDIUM -> R.layout.search_widget_medium
SearchWidgetProviderSize.SMALL -> {
if (showMic) R.layout.search_widget_small
else R.layout.search_widget_small_no_mic
}
SearchWidgetProviderSize.EXTRA_SMALL_V2 -> R.layout.search_widget_extra_small_v2
SearchWidgetProviderSize.EXTRA_SMALL_V1 -> R.layout.search_widget_extra_small_v1
}
/**
* Get the text to place in the search widget
*/
@VisibleForTesting
internal fun getText(layout: SearchWidgetProviderSize, context: Context) = when (layout) {
SearchWidgetProviderSize.MEDIUM -> context.getString(R.string.search_widget_text_short)
SearchWidgetProviderSize.LARGE -> context.getString(R.string.search_widget_text_long)
else -> null
}
}
}

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true"
android:color="?primaryText" />
<item android:state_enabled="false"
android:color="@android:color/transparent" />
</selector>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M16.7 21H7.3A3.3 3.3 0 0 1 4 17.7V6.3C4 4.5 5.5 3 7.3 3h9.4C18.5 3 20 4.5 20 6.3v11.4c0 1.8-1.5 3.3-3.3 3.3zM7.3 5C6.6 5 6 5.6 6 6.3v11.4c0 0.7 0.6 1.3 1.3 1.3h9.4c0.7 0 1.3-0.6 1.3-1.3V6.3c0-0.7-0.6-1.3-1.3-1.3H7.3zM15 8H9a0.5 0.5 0 0 1 0-1h6a0.5 0.5 0 0 1 0 1zm0 3H9a0.5 0.5 0 0 1 0-1h6a0.5 0.5 0 0 1 0 1zm0 3H9a0.5 0.5 0 0 1 0-1h6a0.5 0.5 0 0 1 0 1zm-3.4 3H9a0.5 0.5 0 0 1 0-1h2.6a0.5 0.5 0 0 1 0 1z">
<aapt:attr name="android:fillColor">
<gradient
android:type="linear"
android:startX="24"
android:startY="0"
android:endX="0"
android:endY="24"
android:startColor="?readerModeStartGradient"
android:endColor="?readerModeEndGradient"/>
</aapt:attr>
</path>
</vector>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="m14.5,12.833v-7.5a0.836,0.836 0,0 0,-0.833 -0.833h-10.834a0.836,0.836 0,0 0,-0.833 0.833v7.5a0.836,0.836 0,0 0,0.833 0.834h10.834a0.836,0.836 0,0 0,0.833 -0.834zM12,12h-8.333v-5.833h8.333zM13.25,10.333a0.417,0.417 0,0 1,-0.417 -0.416v-1.667a0.417,0.417 0,0 1,0.834 0v1.667a0.417,0.417 0,0 1,-0.417 0.416z"
android:fillColor="?primaryText"/>
<path
android:pathData="m21.375,17.833h-1.042v-7.033a1.259,1.259 0,0 0,-1.217 -1.3h-3.783v1.667h3.334v5h-8.334v-1.667h-1.666v3.333h-1.042c-0.345,0 -0.625,0.373 -0.625,0.834s0.28,0.833 0.625,0.833h13.75c0.345,0 0.625,-0.372 0.625,-0.833s-0.28,-0.834 -0.625,-0.834zM17,18.667h-5v-0.834h5z"
android:fillColor="?primaryText"/>
</vector>

View File

@ -5,6 +5,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="4dp" />
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="?toolbarDivider" />
<solid android:color="@color/top_site_background" />
<stroke android:width="1dp" android:color="@color/top_site_border" />
</shape>

View File

@ -33,9 +33,16 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.recyclerview.widget.RecyclerView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/history_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/history_list_item"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -7,6 +7,7 @@
android:id="@+id/top_sites_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:layout_marginBottom="8dp"
tools:listitem="@layout/top_site_item" />

View File

@ -12,7 +12,9 @@
android:layout_height="wrap_content"
android:layout_marginStart="72dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="12dp" >
android:layout_marginTop="12dp"
android:clickable="true"
android:focusable="true" >
<TextView
android:id="@+id/hostnameHeaderText"
@ -125,7 +127,7 @@
android:clickable="true"
android:focusable="true"
android:cursorVisible="true"
android:textCursorDrawable="?primaryText"
android:textCursorDrawable="@null"
app:backgroundTint="?primaryText"
tools:ignore="Autofill"/>
</com.google.android.material.textfield.TextInputLayout>
@ -135,9 +137,9 @@
android:layout_width="48dp"
android:layout_height="30dp"
android:layout_marginBottom="10dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:background="@null"
android:contentDescription="@string/saved_login_copy_username"
app:tint="?android:colorAccent"
app:tint="@color/saved_login_clear_edit_text_tint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/inputLayoutUsername"
app:srcCompat="@drawable/ic_clear" />
@ -186,6 +188,7 @@
android:colorControlActivated="?primaryText"
android:colorControlHighlight="?primaryText"
android:cursorVisible="true"
android:textCursorDrawable="@null"
android:ellipsize="end"
android:focusable="true"
android:fontFamily="sans-serif"
@ -195,7 +198,6 @@
android:maxLines="1"
android:singleLine="true"
android:textColor="?primaryText"
android:textCursorDrawable="?primaryText"
android:textSize="16sp"
android:textStyle="normal"
app:backgroundTint="?primaryText"
@ -207,9 +209,9 @@
android:layout_width="48dp"
android:layout_height="30dp"
android:layout_marginTop="3dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:background="@null"
android:contentDescription="@string/saved_login_reveal_password"
app:tint="?android:colorAccent"
app:tint="?primaryText"
app:layout_constraintEnd_toStartOf="@id/clearPasswordTextButton"
app:layout_constraintTop_toTopOf="@id/inputLayoutPassword"
app:srcCompat="@drawable/mozac_ic_password_reveal" />
@ -218,9 +220,9 @@
android:id="@+id/clearPasswordTextButton"
android:layout_width="48dp"
android:layout_height="30dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:background="@null"
android:contentDescription="@string/saved_logins_copy_password"
app:tint="?android:colorAccent"
app:tint="@color/saved_login_clear_edit_text_tint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/revealPasswordButton"
app:srcCompat="@drawable/ic_clear" />

View File

@ -48,7 +48,7 @@
android:layout_height="40dp"
android:layout_marginStart="28dp"
android:layout_marginTop="56dp"
android:layout_marginBottom="40dp"
android:layout_marginBottom="32dp"
android:adjustViewBounds="true"
android:clickable="false"
android:contentDescription="@string/app_name"

View File

@ -124,7 +124,6 @@
android:layout_width="0dp"
android:layout_height="30dp"
android:gravity="center_vertical"
android:inputType="textPassword|text"
android:letterSpacing="0.01"
android:lineSpacingExtra="8sp"
android:layout_marginTop="2dp"
@ -142,7 +141,7 @@
android:layout_width="48dp"
android:layout_height="30dp"
android:layout_marginBottom="2dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:background="@null"
android:contentDescription="@string/saved_login_reveal_password"
app:layout_constraintBottom_toBottomOf="@id/passwordText"
app:layout_constraintEnd_toStartOf="@id/copyPassword"
@ -153,7 +152,7 @@
android:id="@+id/copyPassword"
android:layout_width="48dp"
android:layout_height="30dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:background="@null"
android:contentDescription="@string/saved_logins_copy_password"
app:layout_constraintBottom_toBottomOf="@id/revealPasswordButton"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -7,5 +7,4 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabLayout"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:clipToPadding="false" />
android:layout_width="match_parent" />

View File

@ -9,16 +9,34 @@
android:layout_height="wrap_content"
android:elevation="1dp">
<TextView
android:id="@+id/add_ons_overlay_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:drawablePadding="8dp"
android:gravity="start|center_vertical"
android:padding="16dp"
android:text="@string/mozac_add_on_install_progress_caption"
app:drawableStartCompat="@drawable/mozac_ic_extensions_black" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/add_ons_overlay_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:drawablePadding="8dp"
android:gravity="start|center_vertical"
android:padding="16dp"
android:text="@string/mozac_add_on_install_progress_caption"
app:drawableStartCompat="@drawable/mozac_ic_extensions_black" />
<Button
android:id="@+id/cancel_button"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/add_ons_overlay_text"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:text="@string/mozac_feature_addons_install_addon_dialog_cancel"
android:textAllCaps="false" />
</RelativeLayout>
</androidx.cardview.widget.CardView>

View File

@ -71,21 +71,34 @@
app:layout_constraintStart_toEndOf="@+id/recentAppsContainer"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/appsList"
<!-- Having the RecyclerView inside a RelativeLayout means
the RecyclerView will load all items at once and never recycle.
This is a conscious choice since we use HorizontalScrollView to scroll all
children horizontally and so prevent scrolling in the RecyclerViews. -->
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/share_all_apps_list_margin"
android:clipToPadding="false"
android:minHeight="@dimen/share_list_min_height"
android:orientation="horizontal"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/recentAppsContainer"
app:layout_constraintTop_toBottomOf="@id/apps_link_header"
app:spanCount="2" />
app:layout_constraintTop_toBottomOf="@id/apps_link_header">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/appsList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/share_all_apps_list_margin"
android:clipToPadding="false"
android:minHeight="@dimen/share_list_min_height"
android:orientation="horizontal"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:spanCount="2" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</HorizontalScrollView>

View File

@ -8,8 +8,7 @@
android:id="@+id/top_site_item"
android:layout_width="64dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp">
android:padding="8dp">
<FrameLayout
android:id="@+id/favicon_wrapper"
@ -37,7 +36,7 @@
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:textColor="?primaryText"
android:textColor="@color/top_site_title_text"
android:textSize="10sp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"

View File

@ -8,6 +8,6 @@
android:id="@+id/confirm_add_folder_button"
android:icon="@drawable/mozac_ic_check"
app:iconTint="?primaryText"
android:title="@string/bookmark_add_folder"
android:title="@string/bookmark_menu_save_button"
app:showAsAction="ifRoom" />
</menu>

View File

@ -8,6 +8,6 @@
android:id="@+id/add_folder_button"
android:icon="@drawable/ic_new"
app:iconTint="?primaryText"
android:title="@string/bookmark_select_folder"
android:title="@string/bookmark_add_folder"
app:showAsAction="ifRoom" />
</menu>

View File

@ -66,6 +66,11 @@
app:destination="@id/browserFragment"
app:exitAnim="@anim/zoom_in_fade"
app:popEnterAnim="@anim/zoom_out_fade" />
<argument
android:name="session_to_delete"
app:argType="string"
app:nullable="true"
android:defaultValue="@null" />
</fragment>
<fragment
@ -446,13 +451,6 @@
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
app:destination="@id/deleteBrowsingDataOnQuitFragment" />
<action
android:id="@+id/action_settingsFragment_to_defaultBrowserSettingsFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
app:destination="@id/defaultBrowserSettingsFragment" />
<action
android:id="@+id/action_settingsFragment_to_localeSettingsFragment"
app:enterAnim="@anim/slide_in_right"
@ -709,9 +707,6 @@
<fragment
android:id="@+id/addNewDeviceFragment"
android:name="org.mozilla.fenix.share.AddNewDeviceFragment" />
<fragment
android:id="@+id/defaultBrowserSettingsFragment"
android:name="org.mozilla.fenix.settings.DefaultBrowserSettingsFragment"/>
<fragment
android:id="@+id/addSearchEngineFragment"
android:name="org.mozilla.fenix.settings.search.AddSearchEngineFragment" />

View File

@ -1,5 +1,5 @@
{
"v": "5.5.5",
"v": "5.6.5",
"fr": 30,
"ip": 0,
"op": 17,
@ -48,8 +48,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -348,8 +348,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -783,7 +783,7 @@
"p": {
"a": 0,
"k": [
9.75,
9.998,
12,
0
],
@ -801,8 +801,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -1158,7 +1158,7 @@
{
"t": 17,
"s": [
100
0
]
}
],
@ -1190,8 +1190,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6

View File

@ -1,11 +1,11 @@
{
"v": "5.5.5",
"v": "5.6.5",
"fr": 30,
"ip": 0,
"op": 17,
"w": 24,
"h": 24,
"nm": "Shield - Final for export (updated colours - Amy)",
"nm": "Shield - Final 24x24 (on Light)",
"ddd": 0,
"assets": [],
"layers": [
@ -48,8 +48,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -348,8 +348,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -705,8 +705,8 @@
"p": {
"a": 0,
"k": [
6,
7
6.035,
7.01
],
"ix": 2
},
@ -783,7 +783,7 @@
"p": {
"a": 0,
"k": [
9.75,
9.998,
12,
0
],
@ -801,8 +801,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -1190,8 +1190,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -1444,35 +1444,35 @@
],
"v": [
[
-4,
-3.953,
-4.3
],
[
-4,
-3.953,
-1
],
[
-2.513,
-2.466,
3.382
],
[
0,
0.047,
4.987
],
[
2.512,
2.559,
3.382
],
[
4,
4.047,
-1
],
[
4,
4.047,
-4.3
],
[
0,
0.047,
-4.985
]
],
@ -1519,8 +1519,8 @@
"p": {
"a": 0,
"k": [
6,
7
6.026,
7.035
],
"ix": 2
},
@ -1579,4 +1579,4 @@
}
],
"markers": []
}
}

View File

@ -1,5 +1,5 @@
{
"v": "5.5.5",
"v": "5.6.5",
"fr": 30,
"ip": 0,
"op": 17,
@ -48,8 +48,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -348,8 +348,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -783,7 +783,7 @@
"p": {
"a": 0,
"k": [
9.75,
9.998,
12,
0
],
@ -801,8 +801,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6
@ -1158,7 +1158,7 @@
{
"t": 17,
"s": [
100
0
]
}
],
@ -1190,8 +1190,8 @@
"s": {
"a": 0,
"k": [
150,
150,
133.5,
133.5,
100
],
"ix": 6

View File

@ -20,7 +20,7 @@
<string name="no_open_tabs_description">Equi van amosase les llingüetes abiertes.</string>
<!-- No Private Tabs Message Description -->
<string name="no_private_tabs_description">Les llingüetes privaes van amosase equí.</string>
<string name="no_private_tabs_description">Equi van amosase les llingüetes abiertes.</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">%1$s ta producíu por Mozilla.</string>
@ -99,8 +99,6 @@
<string name="browser_menu_new_tab">Llingüeta nueva</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Guardar nuna coleición</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Informar d\'un problema col sitiu</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Compartir</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -114,7 +112,7 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Cola potencia de %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Mou de llector</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Abrir nuna aplicación</string>
@ -344,6 +342,9 @@
<!-- Header of the Turn on Sync preference view -->
<string name="preferences_sync">Activación de Sync</string>
<!-- Pairing Feature strings -->
<!-- Instructions on how to access pairing -->
<string name="pair_instructions_2"><![CDATA[Escania\'l códigu QR que s\'amuesa en <b>firefox.com/pair</b>]]></string>
<!-- Button to open camera for pairing -->
<string name="pair_open_camera">Abrir la cámara</string>
<!-- Button to cancel pairing -->
@ -399,6 +400,16 @@
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Amestar una llingüeta</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">En privao</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Guardar nuna coleición</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Compartir toles llingüetes</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Zarrar toles llingüetes</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Llingüeta nueva</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
<string name="close_tab">Zarrar la llingüeta</string>
<!-- Content description (not visible, for screen readers etc.): Close tab <title> button. First parameter is tab title -->
@ -433,6 +444,9 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Desaniciar</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (en privao)</string>
<!-- History -->
<!-- Text for the button to clear all history -->
<string name="history_delete_all">Desaniciar l\'historial</string>
@ -822,20 +836,11 @@
<string name="onboarding_firefox_account_sync_is_on">La sincronización ta activada</string>
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Fallu al aniciar sesión</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Proteición</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s ayuda a impidir que los sitios web te rastrexen en llinia.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Estándar</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Bloquia dellos rastrexadores pero permite que les páxines carguen normalmente</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header_2">Privacidá automática</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Estricta (aconséyase)</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Bloquia más rastrexadores pa más proteición y rindimientu pero podría causar que dalgunos sitios nun funcionen afayadizamente</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -918,28 +923,14 @@
<string name="preference_enhanced_tracking_protection_explanation">Curia los tos datos. %s protéxite de la mayoría de rastrexadores comunes que siguen lo que faes en llinia.</string>
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Deprender más</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Estándar</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Estándar (aconséyase)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Les páxines van cargar de forma nomal pero blóquiense dellos rastrexadores.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Qué se bloquia coles proteición estándar escontra\'l rastrexu</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Estricta</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Estricta (por defeutu)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">La proteición ye mayor y el rindimientu ameyora pero dalgunos sitios quiciabes nun carguen afayadizamente.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Estricta (aconséyase)</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Lo que la proteición estricta escontra\'l rastrexu bloquia</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Personalizar</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Escueyes los rastrexadores y scripts a bloquiar</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Lo que la proteición personalizada escontra\'l rastrexu bloquia</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -989,8 +980,6 @@
<string name="etp_tracking_content_title">Conteníu que rastrexa</string>
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Para la carga d\'anuncios, vídeos y otru conteníu esternu que contenga códigu que rastrexe. Quiciabes afeute a la funcionalidá de dalgunos sitios web.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s bloquia los rastrexadores d\'esti sitiu cuando l\'escudu ta moráu. Tócalu pa ver qué se bloquia.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">ACTIVÓSE nesti sitiu</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -50,8 +50,6 @@
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Захаваць у калекцыі</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Паведаміць аб праблеме з сайтам</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Падзяліцца</string>
@ -131,6 +129,20 @@
<string name="preferences_privacy_link">Паведамленне аб прыватнасці</string>
<!-- Preference category for developer tools -->
<string name="developer_tools_category">Прылады распрацоўшчыка</string>
<!-- Preference title for switch preference to show search suggestions -->
<string name="preferences_show_search_suggestions">Паказваць пошукавыя прапановы</string>
<!-- Preference title for switch preference to show voice search button -->
<string name="preferences_show_voice_search">Паказваць галасавы пошук</string>
<!-- Preference title for switch preference to show search suggestions also in private mode -->
<string name="preferences_show_search_suggestions_in_private">Паказаць у прыватных сеансах</string>
<!-- Preference title for switch preference to show a clipboard suggestion when searching -->
<string name="preferences_show_clipboard_suggestions">Паказваць прапановы з буфера абмену</string>
<!-- Preference title for switch preference to suggest browsing history when searching -->
<string name="preferences_search_browsing_history">Пошук у гісторыі аглядання</string>
<!-- Preference title for switch preference to suggest bookmarks when searching -->
<string name="preferences_search_bookmarks">Пошук у закладках</string>
<!-- Preference for account settings -->
<string name="preferences_account_settings">Налады ўліковага запісу</string>
<!-- Preference for add_ons -->
<string name="preferences_addons">Дадаткі</string>
@ -185,6 +197,12 @@
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Дадаць картку</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Адкрытыя карткі</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Захаваць у калекцыі</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Закрыць усе карткі</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Выдаліць картку з калекцыі</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -220,4 +238,17 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Выдаліць</string>
<!-- History multi select title in app bar
The first parameter is the number of bookmarks selected -->
<string name="history_multi_select_title">Выбрана: %1$d</string>
<!-- Text for the button to clear selected history items. The first parameter
is a digit showing the number of items you have selected -->
<string name="history_delete_some">Выдаліць %1$d элементаў</string>
<!-- Text for the header that groups the history for last 24 hours -->
<string name="history_24_hours">Апошнія 24 гадзіны</string>
<!-- Text for the header that groups the history the past 7 days -->
<string name="history_7_days">Апошнія 7 дзён</string>
<!-- Text for the header that groups the history the past 30 days -->
<string name="history_30_days">Апошнія 30 дзён</string>
</resources>

View File

@ -104,8 +104,6 @@
<string name="browser_menu_new_tab">Pestanya nova</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Desa a la col·lecció</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Informa dun problema amb el lloc</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Comparteix</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -120,8 +118,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Funciona amb el %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Vista de lectura</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Tanca la vista de lectura</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Obre en una aplicació</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -451,6 +451,24 @@
<string name="tabs_header_private_tabs_title">Pestanyes privades</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Afegeix una pestanya</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Afegeix una pestanya privada</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Privada</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Pestanyes obertes</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Desa a la col·lecció</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Comparteix totes les pestanyes</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Tanca totes les pestanyes</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Pestanya nova</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Vés a la pantalla dinici</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Canvia el mode de pestanyes</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Elimina la pestanya de la col·lecció</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -716,6 +734,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Desa</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Mostra</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Col·lecció %d</string>
@ -948,20 +969,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">No sha pogut iniciar la sessió</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Protegiu-vos</string>
<string name="onboarding_tracking_protection_header_2">Privadesa automàtica</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">El %s impedeix que els llocs web us facin el seguiment mentre navegueu.</string>
<string name="onboarding_tracking_protection_description_2">Els paràmetres de privadesa i de seguretat bloquen els elements de seguiment, el programari maliciós i les empreses que us fan el seguiment.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Estàndard</string>
<string name="onboarding_tracking_protection_standard_button_2">Estàndard (per defecte)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Es bloquen menys elements de seguiment, però les pàgines es carregaran amb normalitat</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Es bloquen menys elements de seguiment. Les pàgines es carregaran amb normalitat.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Estricta (recomanat)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Estricta</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Es bloquen més elements de seguiment i, per tant, millora la protecció i el rendiment, però pot fer que alguns llocs no funcionin correctament</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Bloca més elements de seguiment, anuncis i finestres emergents. Les pàgines es carreguen més ràpidament, però és possible que algunes característiques no funcionin.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1048,31 +1069,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Més informació</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Estàndard</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Estàndard (recomanat)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Estàndard (per defecte)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Equilibri entre protecció i rendiment.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Les pàgines es carregaran amb normalitat, però es blocaran menys elements de seguiment.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Es bloquen menys elements de seguiment. Les pàgines es carregaran amb normalitat.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Què es bloca en la protecció contra el seguiment estàndard</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Estricta</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Estricta (per defecte)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Més protecció i millor rendiment, però pot fer que alguns llocs no funcionin correctament.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Estricta (recomanat)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Més protecció, però pot fer que alguns llocs o algun contingut no funcionin correctament.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Bloca més elements de seguiment, anuncis i finestres emergents. Les pàgines es carreguen més ràpidament, però és possible que algunes característiques no funcionin.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Què es bloca en la protecció contra el seguiment estricta</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Personalitzada</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Trieu quins elements de seguiment i scripts cal blocar</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Trieu quins elements de seguiment i scripts cal blocar.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Què es bloca en la protecció contra el seguiment personalitzada</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1123,7 +1134,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Impedeix que es carreguin anuncis, vídeos i altre contingut que contenen codi de seguiment. Pot afectar la funcionalitat del lloc web.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Quan lescut és de color lila, vol dir que el %s està blocant elements de seguiment en aquest lloc. Toqueu-lo per veure què sha blocat.</string>
<string name="etp_onboarding_cfr_message">Quan lescut és de color lila, el %s està blocant els elements de seguiment del lloc. Toqueu per obtenir més informació.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Shan activat les proteccions per a aquest lloc</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -108,8 +108,6 @@
<string name="browser_menu_new_tab">Kaka ruwi</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Tiyak pa mol</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Tiya\' rutzijol ruk\'ayewal ri ruxaq</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Tikomonïx</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -124,8 +122,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">B\'anon ruma %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Sik\'inem tz\'etoj</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Titz\'apïx rutz\'etik sik\'inïk</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Tijaq pa Chokoy</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -463,6 +463,24 @@
<string name="tabs_header_private_tabs_title">Ichinan taq ruwi\'</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Titz\'aqatisäx ruwi\'</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Titz\'aqatisäx ichinan ruwi\'</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Ichinan</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Kejaq taq Ruwi\'</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Tiyak pa mol</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Kekomonïx ronojel taq ruwi\'</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Titz\'apïx ronojel ri taq ruwi\'</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">K\'ak\'a\' ruwi\'</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Tib\'e pa tikirib\'äl</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Tik\'ex rik\'in ruwi\' rub\'anikil</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Tiyuj ruwi\' pa molb\'äl</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -734,6 +752,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Tiyak</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Titz\'et</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Mol %d</string>
@ -972,21 +993,20 @@
<string name="onboarding_firefox_account_automatic_signin_failed">Xsach toq xtikirisäx molojri\'ïl</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Tachajij awi\'</string>
<string name="onboarding_tracking_protection_header_2">Ichinanem pa ruyonil</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s kato\'on richin ye\'aq\'ät ri ajk\'amaya\'l ruxaq yatkojqaj pa k\'amab\'ey.</string>
<string name="onboarding_tracking_protection_description_2">Ri runuk\'ulem ichinanem chuqa\' jikomal yekiq\'ät ri ojqanela\', itzel taq kema\' chuqa\' ri ajk\'aymoloj yatkojqaj.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Pa rub\'eyal</string>
<string name="onboarding_tracking_protection_standard_button_2">Junaman (k\'o wi)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Jub\'a\' ojqanela\' ke\'aq\'ata\' po taya\' q\'ij chi ütz yesamäj ri taq ruxaq</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Yeruq\'ät jub\'a\' ojqanela\'. Ütz xkesamajïx ri taq ruxaq.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">K\'atzinel (chilab\'en)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Nimaläj</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">K\'ïy ojqanela\' keq\'at richin jun ütz chajinïk chuqa\' rub\'eyal nisamäj, xa xe chi rik\'in jub\'a\' jujun taq ruxaq man xkesamäj ta ütz</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Ke\'aq\'ata\' k\'ïy ojqanela\', taq rutzijol chuqa\' elenel taq tzuwäch. Anin xkesamajitäj ri taq ruxaq, xa xe chi yatikïr ye\'asäch jujun taq rusamajib\'al.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1075,32 +1095,22 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Tetamäx ch\'aqa\' chik</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Pa rub\'eyal</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Relik (chilab\'en)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Junaman (k\'o wi)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Junaman richin chajinïk chuqa\' rub\'eyal nisamäj.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Xkesamäj ri taq ruxaq achi\'el rub\'anon, xa xe chi man k\'ïy ta taq ojqanela\' xkeq\'at.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Yeruq\'ät jub\'a\' ojqanela\'. Ütz xkesamajïx ri taq ruxaq.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Achike ri q\'aton ruma ri relik ruchajixik ojqanem</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Nimaläj</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Nimaläj (K\'o wi)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">K\'ïy chajinïk chuwäch ojqanem chuqa\' ütz rub\'eyal nisamäj, xa xe chi jujun taq ruxaq rik\'in jub\'a\' man xkesamäj ta ütz.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">K\'atzinel (chilab\'en)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Nïm chajinem, xa xe chi nub\'än chi jujun taq ruxaq o rupam man yesamäj ta.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Ke\'aq\'ata\' k\'ïy ojqanela\', taq rutzijol chuqa\' elenel taq tzuwäch. Anin xkesamajitäj ri taq ruxaq, xa xe chi yatikïr ye\'asäch jujun taq rusamajib\'al.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Achike ri q\'aton ruma ri ruchajixik ojqanem k\'o</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Ichinan</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Ke\'acha\' achike taq ojqanela\' chuqa\' kiskrip nawajo\' ye\'aq\'ät</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Ke\'acha\' achike taq ojqanela\' chuqa\' kiskrip nawajo\' ye\'aq\'ät.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Achike ri q\'aton ruma ri chijun ruchajixik ojqanem</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1152,7 +1162,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Ke\'aq\'ata\' ri taq eltzijol man e k\'o ta chupam, taq silowäch chuqa\' taq rupam kik\'wan taq rub\'itz\'ib\' ojqanem. Nitikïr yerutz\'ila\' jujun taq rusamaj ajk\'amaya\'l ruxaq.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s yeruq\'ät ojqanela\' pa ri ruxaq ri\' toq tuq\' ri pokob\'. Tacha\' richin nitz\'et achike ruq\'aton.</string>
<string name="etp_onboarding_cfr_message">Toq xtatz\'ët ri tuq\' pokob\', %s xeruq\'ät ojqanela\' pa jun ruxaq k\'amaya\'l. Tapitz\'a\' richin ch\'aqa\' chik retamab\'al.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">TZIJÏL ri chajinïk pa re ruxaq re\'</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -20,16 +20,25 @@
<!-- No Open Tabs Message Description -->
<string name="no_open_tabs_description">Tady se zobrazí vaše otevřené panely.</string>
<!-- No Private Tabs Message Description -->
<string name="no_private_tabs_description">Tady se zobrazí vaše anonymní panely.</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">Autorem aplikace %1$s je Mozilla.</string>
<!-- Private Browsing -->
<!-- Title for private session option -->
<string name="private_browsing_title">Používáte anonymní prohlížení</string>
<!-- Explanation for private browsing displayed to users on home view when they first enable private mode
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="private_browsing_placeholder_description_2">%1$s vymaže vaši historii vyhledávání a stránek navštívených v anonymním panelu po jeho zavření nebo ukončení aplikace. S touto funkcí nejste na internetu zcela neviditelní a např. poskytovatel připojení k internetu může stále zjistit, které stránky navštěvujete. Vaše aktivita na internetu ale zůstane utajena před dalšími uživateli tohoto zařízení.</string>
<string name="private_browsing_common_myths">
Časté omyly o fungování anonymního prohlížení
</string>
<!-- Delete session button to erase your history in a private session -->
<string name="private_browsing_delete_session">Odstranit relaci</string>
<!-- Private mode shortcut "contextual feature recommender" (CFR) -->
<!-- Private mode shortcut "contextual feature recommendation" (CFR) -->
<!-- Text for the main message -->
<string name="cfr_message">Přidejte si zkratku k otevření anonymního prohlížení na plochu.</string>
<!-- Text for the positive button -->
@ -37,6 +46,14 @@
<!-- Text for the negative button -->
<string name="cfr_neg_button_text">Ne, děkuji</string>
<!-- Search widget "contextual feature recommendation" (CFR) -->
<!-- Text for the main message. 'Firefox' intentionally hardcoded here.-->
<string name="search_widget_cfr_message">Otevřete Firefox rychleji. Přidejte si widget na domovskou obrazovku.</string>
<!-- Text for the positive button -->
<string name="search_widget_cfr_pos_button_text">Přidat widget</string>
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Teď ne</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Nový panel</string>
@ -79,6 +96,8 @@
<string name="browser_menu_add_to_homescreen">Přidat na plochu</string>
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">Nainstalovat</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">Synchronizované panely</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">Najít na stránce</string>
<!-- Browser menu button that creates a private tab -->
@ -87,8 +106,6 @@
<string name="browser_menu_new_tab">Nový panel</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Uložit do sbírky</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Nahlásit chybu stránky</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Sdílet</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -105,8 +122,10 @@
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Používá %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Zobrazení čtečky</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Zavřít zobrazení čtečky</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Otevřít v aplikaci</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -249,6 +268,8 @@
<string name="preferences_show_search_shortcuts">Zobrazit zkratky vyhledávání</string>
<!-- Preference title for switch preference to show search suggestions -->
<string name="preferences_show_search_suggestions">Našeptávat vyhledávání</string>
<!-- Preference title for switch preference to show voice search button -->
<string name="preferences_show_voice_search">Zobrazit hlasové vyhledávání</string>
<!-- Preference title for switch preference to show search suggestions also in private mode -->
<string name="preferences_show_search_suggestions_in_private">Našeptávat také v anonymním prohlížení</string>
<!-- Preference title for switch preference to show a clipboard suggestion when searching -->
@ -277,6 +298,8 @@
<string name="preferences_sync_bookmarks">Záložky</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">Přihlašovací údaje</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs">Panely</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">Odhlásit</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -372,7 +395,7 @@
<!-- Pairing Feature strings -->
<!-- Instructions on how to access pairing -->
<string name="pair_instructions"><![CDATA[Pro zobrazení QR kódu navštivte ve Firefoxu na svém počítači stránku <b>firefox.com/pair</b>.]]></string>
<string name="pair_instructions_2"><![CDATA[Naskenujte QR kód zobrazený na <b>firefox.com/pair</b>]]></string>
<!-- Button to open camera for pairing -->
<string name="pair_open_camera">Otevřít fotoaparát</string>
<!-- Button to cancel pairing -->
@ -413,6 +436,8 @@
<string name="library_desktop_bookmarks_unfiled">Ostatní záložky</string>
<!-- Option in Library to open History page -->
<string name="library_history">Historie</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">Synchronizované panely</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">Seznam ke čtení</string>
<!-- Menu Item Label for Search in Library -->
@ -433,6 +458,26 @@
<string name="tabs_header_private_tabs_title">Anonymní panely</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Přidat panel</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Přidat anonymní panel</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Anonymní</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Otevřené panely</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Uložit do sbírky</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Sdílet všechny panely</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Zavřít všechny panely</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nový panel</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Domů</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Přepnout režim panelů</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Odstranit panel ze sbírky</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
<string name="close_tab">Zavřít panel</string>
<!-- Content description (not visible, for screen readers etc.): Close tab <title> button. First parameter is tab title -->
@ -476,11 +521,18 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Odebrat</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (anonymní režim)</string>
<!-- History -->
<!-- Text for the button to clear all history -->
<string name="history_delete_all">Vymazat historii</string>
<!-- Text for the dialog to confirm clearing all history -->
<string name="history_delete_all_dialog">Opravdu chcete vymazat historii vašeho prohlížení?</string>
<!-- Text for the snackbar to confirm that multiple browsing history items has been deleted -->
<string name="history_delete_multiple_items_snackbar">Historie byla smazána</string>
<!-- Text for the snackbar to confirm that a single browsing history item has been deleted. The first parameter is the shortened URL of the deleted history item. -->
<string name="history_delete_single_item_snackbar">Položka %1$s odstraněna</string>
<!-- Text for positive action to delete history in deleting history dialog -->
<string name="history_clear_dialog">Vymazat</string>
<!-- History overflow menu copy button -->
@ -536,6 +588,10 @@
<string name="bookmark_edit">Upravit záložku</string>
<!-- Screen title for selecting a bookmarks folder -->
<string name="bookmark_select_folder">Vybrat složku</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete the selected folder -->
<string name="bookmark_delete_folder_confirmation_dialog">Opravdu chcete smazat tuto složku?</string>
<!-- Snackbar title shown after a folder has been deleted. This first parameter is the name of the deleted folder -->
<string name="bookmark_delete_folder_snackbar">Složka %1$s smazána</string>
<!-- Screen title for adding a bookmarks folder -->
<string name="bookmark_add_folder">Přidat složku</string>
<!-- deprecated: Snackbar title shown after a bookmark has been created. -->
@ -590,6 +646,8 @@
The first parameter is the host part of the URL of the bookmark deleted, if any -->
<string name="bookmark_deletion_snackbar_message">Záložka odstraněna: %1$s</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
<string name="bookmark_deletion_multiple_snackbar_message_2">Záložky smazány</string>
<!-- Bookmark undo button for deletion snackbar action -->
<string name="bookmark_undo_deletion">ZPĚT</string>
@ -693,6 +751,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Uložit</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Zobrazit</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Sbírka č. %d</string>
@ -771,7 +832,7 @@
<!-- Text shown in snackbar when user closes all private tabs -->
<string name="snackbar_private_tabs_closed">Anonymní panely zavřeny</string>
<!-- Text shown in snackbar when user deletes all private tabs -->
<string name="snackbar_private_tabs_deleted">Soukromé panely smazány</string>
<string name="snackbar_private_tabs_deleted">Anonymní panely smazány</string>
<!-- Text shown in snackbar to undo deleting a tab, top site or collection -->
<string name="snackbar_deleted_undo">ZPĚT</string>
<!-- Text shown in snackbar when user removes a top site -->
@ -806,15 +867,14 @@
<string name="preference_accessibility_font_size_title">Velikost písma</string>
<!-- Title for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size">Automatická velikost písma</string>
<string name="preference_accessibility_auto_size_2">Automatická velikost písma</string>
<!-- Summary for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size_summary">Zrušte tuto volbu, pokud nechcete, aby se velikost písma řídila nastavením systému Android.</string>
<!-- Title for the Delete browsing data preference -->
<string name="preferences_delete_browsing_data">Smazat soukromá data</string>
<!-- Title for the tabs item in Delete browsing data -->
<string name="preferences_delete_browsing_data_tabs_title">Otevřené panely</string>
<string name="preferences_delete_browsing_data_tabs_title_2">Otevřené panely</string>
<!-- Subtitle for the tabs item in Delete browsing data, parameter will be replaced with the number of open tabs -->
<string name="preferences_delete_browsing_data_tabs_subtitle">Počet panelů: %d</string>
<!-- Title for the data and history items in Delete browsing data -->
@ -865,6 +925,29 @@
<!-- Text for the snackbar to show the user that the deletion of browsing data is in progress -->
<string name="deleting_browsing_data_in_progress">Mazání soukromých dat…</string>
<!-- Tips -->
<!-- text for firefox preview moving tip header "Firefox Preview" and "Firefox Nightly" are intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header">Firefox Preview je nyní Firefox Nightly</string>
<!-- text for firefox preview moving tip button. "Mozilla Firefox Browser" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_button">Stáhněte si prohlížeč Mozilla Firefox</string>
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header_preview_installed">Firefox Nightly se mění</string>
<!-- text for firefox preview moving tip description -->
<string name="tip_firefox_preview_moved_description_preview_installed">Tato aplikace už nebude nadále dostávat bezpečnostní aktualizace. Přestaňte ji prosím používat a nainstalujete si novou Nightly.
\n\nPro přesun svých záložek, přihlašovacích údajů a historie prohlížení si prosím založte účet Firefoxu.</string>
<!-- text for firefox preview moving tip button -->
<string name="tip_firefox_preview_moved_button_preview_installed">Používejte novou Nightly</string>
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header_preview_not_installed">Firefox Nightly se mění</string>
<!-- text for firefox preview moving tip description -->
<string name="tip_firefox_preview_moved_description_preview_not_installed">Tato aplikace už nebude nadále dostávat bezpečnostní aktualizace. Přestaňte ji prosím používat a stáhněte si novou Nightly.
\n\nPro přesun svých záložek, přihlašovacích údajů a historie prohlížení si prosím založte účet Firefoxu.</string>
<!-- text for firefox preview moving tip button -->
<string name="tip_firefox_preview_moved_button_preview_not_installed">Stáhněte si novou Nightly</string>
<!-- Onboarding -->
<!-- Text for onboarding welcome message
The first parameter is the name of the app (e.g. Firefox Preview) -->
@ -901,18 +984,17 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Přihlášení selhalo</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Chraňte se</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s brání stránkám, aby vás sledovaly online.</string>
<string name="onboarding_tracking_protection_header_2">Automatické soukromí</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standardní</string>
<string name="onboarding_tracking_protection_standard_button_2">Standardní (výchozí)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Blokuje méně sledovacích prvků, díky čemuž umožňuje, aby se některé stránky načítaly správně</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Blokuje méně sledovacích prvků. Stránky se načítají běžným způsobem.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Striktní (doporučeno)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Přísná</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Blokuje více sledovacích prvků pro vaši ochranu a lepší výkon, ale může rozbít některé stránky</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Blokuje více sledovacích prvků, reklam a vyskakovacích oken. Zrychlí i načítání stránek, ale může omezit jejich fungování.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -998,31 +1080,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Zjistit více</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standardní</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standardní (doporučeno)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standardní (výchozí)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Vyvážená ochrana a výkon.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Stránky se načítají normálně s výjimkou některých sledovacích prvků.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Blokuje méně sledovacích prvků. Stránky se načítají běžným způsobem.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Co blokuje běžné nastavení ochrany proti sledování</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Přísná</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Přísná (výchozí)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Silnější ochrana, která zlepšuje rychlost načítání stránek. Může ale omezit jejich fungování.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Přísná (doporučeno)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Silnější ochrana. Může omezit fungování některých stránek.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Blokuje více sledovacích prvků, reklam a vyskakovacích oken. Zrychlí i načítání stránek, ale může omezit jejich fungování.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Co blokuje přísné nastavení ochrany proti sledování</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Vlastní</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Vyberte sledovací prvky a skripty, které chcete blokovat</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Vyberte sledovací prvky a skripty, které chcete blokovat.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Co blokuje vlastní nastavení ochrany proti sledování</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1071,8 +1143,6 @@
<string name="etp_tracking_content_title">Sledující obsah</string>
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Blokuje načítání reklam, videí a dalšího obsahu, který obsahuje sledující kód. To může ovlivnit fungování některých webových stránek.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Pokud je ikona štítu fialová, znamená to, že %s na stránce blokuje nějaké sledovací prvky. Klepnutím na ikonu zobrazíte jejich seznam.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Ochrana je na tomto serveru zapnuta</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
@ -1094,6 +1164,8 @@
<!-- About page link text to open support link -->
<string name="about_support">Podpora</string>
<!-- About page link text to list of past crashes (like about:crashes on desktop) -->
<string name="about_crashes">Pády</string>
<!-- About page link text to open privacy notice link -->
<string name="about_privacy_notice">Zásady ochrany osobních údajů</string>
<!-- About page link text to open know your rights link -->
@ -1323,8 +1395,21 @@
<string name="certificate_info_verified_by">Ověřil: %1$s</string>
<!-- Login overflow menu delete button -->
<string name="login_menu_delete_button">Odstranit</string>
<!-- Login overflow menu edit button -->
<string name="login_menu_edit_button">Upravit</string>
<!-- Message in delete confirmation dialog for logins -->
<string name="login_deletion_confirmation">Opravdu chcete tyto přihlašovací údaje odstranit?</string>
<!-- Positive action of a dialog asking to delete -->
<string name="dialog_delete_positive">Odstranit</string>
<!-- The button description to discard changes to an edited login. -->
<string name="discard_changes">Zahodit změny</string>
<!-- The page title for editing a saved login. -->
<string name="edit">Upravit</string>
<!-- Voice search button content description -->
<string name="voice_search_content_description">Hlasové vyhledávání</string>
<!-- Voice search prompt description displayed after the user presses the voice search button -->
<string name="voice_search_explainer">Nyní mluvte</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">Připojte další zařízení.</string>
</resources>

View File

@ -104,8 +104,6 @@
<string name="browser_menu_new_tab">Tab newydd</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Cadw i gasgliad</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Pryder am wefan</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Rhannu</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -119,8 +117,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Grym %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Golwg darllen</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Caur golwg darllenydd</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Agor yn yr Ap</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -448,6 +448,24 @@
<string name="tabs_header_private_tabs_title">Tabiau preifat</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Ychwanegu tab</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Ychwanegu tab preifat</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Preifat</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Agor Tabiau</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Cadw i gasgliad</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Rhannu pob tab</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Cau pob tab</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Tab newydd</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Mynd adref</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Toglor modd tab</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Tynnu tab or casgliad</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -713,6 +731,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Cadw</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Golwg</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Casgliad %d</string>
@ -943,20 +964,20 @@
<string name="onboarding_firefox_account_automatic_signin_failed">Wedi methu mewngofnodi</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Diogelwch eich hun</string>
<string name="onboarding_tracking_protection_header_2">Preifatrwydd awtomatig</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">Mae %s yn helpu i atal gwefannau rhag eich tracio ar-lein.</string>
<string name="onboarding_tracking_protection_description_2">Mae gosodiadau preifatrwydd a diogelwch yn rhwystro tracwyr, meddalwedd faleisus, a chwmnïau syn eich dilyn.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Safonol</string>
<string name="onboarding_tracking_protection_standard_button_2">Safonol (rhagosodedig)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Yn rhwystro llai o dracwyr ond yn caniatáu i dudalennau lwython arferol</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Yn rhwystro llai o dracwyr. Bydd tudalennaun llwython arferol.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Llym (argymell)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Llym</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Yn rhwystro mwy o dracwyr ar gyfer gwell amddiffyniad a pherfformiad, ond gall achosi i rai gwefannau beidio â gweithion iawn</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Yn rhwystro rhagor o dracwyr, hysbysebion, a llamlenni. Mae tudalennaun llwython gyflymach, ond efallai na fydd rhywfaint ou hymarferoldeb yn gweithio.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1043,31 +1064,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Dysgu rhagor</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Safonol</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Safon (argymell)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Safonol (rhagosodedig)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Cytbwys ar gyfer diogelu a pherfformiad.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Bydd tudalennaun llwytho fel arfer, ond yn rhwystro llai o dracwyr.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Yn rhwystro llai o dracwyr. Bydd tudalennaun llwython arferol.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Beth sydd wedii rwystro gan ddiogelu tracio safonol</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Llym</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Llym (Rhagosodedig)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Diogelwch tracio cryfach a pherfformiad cyflymach, ond efallai na fydd rhai gwefannaun gweithion iawn.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Llym (argymell)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Diogelwch cryfach, ond gall achosi i rai gwefannau neu gynnwys dorri.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Yn rhwystro rhagor o dracwyr, hysbysebion, a llamlenni. Mae tudalennaun llwython gyflymach, ond efallai na fydd rhywfaint ou hymarferoldeb yn gweithio.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Beth sydd wedii rwystro gan ddiogelu tracio llym</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Cyfaddas</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Dewis pa dracwyr a sgriptiau iw rhwystro</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Dewiswch pa dracwyr a sgriptiau iw rhwystro.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Beth sydd wedii rwystro gan ddiogelu tracio cyfaddas</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1118,7 +1129,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Yn rhwystro hysbysebion, fideos, a chynnwys allanol arall rhag llwythor hyn syn cynnwys cod tracio. Gall effeithio ar rywfaint o ymarferoldeb gwefan.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Mae %s yn rhwystro tracwyr ar y wefan hon pan fydd y darian yn biws. Tapiwch ef i weld beth sydd wedii rwystro.</string>
<string name="etp_onboarding_cfr_message">Bob tro maer darian yn biws, mae %s wedi rhwystro tracwyr ar wefan. Tapiwch am ragor o wybodaeth.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Mae diogelu YMLAEN ar gyfer y wefan hon</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -108,8 +108,6 @@
<string name="browser_menu_new_tab">Neuer Tab</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">In Sammlung speichern</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Website-Problem melden</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Teilen</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -125,8 +123,10 @@
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Bereitgestellt von %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Leseansicht</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Leseansicht schließen</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Mit App öffnen</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -459,6 +459,24 @@
<string name="tabs_header_private_tabs_title">Private Tabs</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Tab hinzufügen</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Privaten Tab hinzufügen</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Privat</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Offene Tabs</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">In Sammlung speichern</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Alle Tabs teilen</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Alle Tabs schließen</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Neuer Tab</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Zum Startbildschirm gehen</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Tab-Modus umschalten</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Tab aus Sammlung entfernen</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -741,6 +759,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Speichern</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Ansehen</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Sammlung %d</string>
@ -978,20 +999,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Anmeldung fehlgeschlagen</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Schützen Sie sich</string>
<string name="onboarding_tracking_protection_header_2">Automatischer Datenschutz</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s verhindert, dass Websites Sie online verfolgen.</string>
<string name="onboarding_tracking_protection_description_2">Datenschutz- und Sicherheitseinstellungen blockieren Tracker, Schadsoftware und Unternehmen, die Sie verfolgen.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standard</string>
<string name="onboarding_tracking_protection_standard_button_2">Standard</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Blockiert weniger Tracker, ermöglicht jedoch das normale Laden von Seiten</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Blockiert weniger Tracker. Seiten werden normal geladen.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Streng (empfohlen)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Streng</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Blockiert mehr Tracker für besseren Schutz und Leistung, kann jedoch dazu führen, dass einige Websites nicht ordnungsgemäß funktionieren</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Blockiert mehr Tracker, Anzeigen und Pop-ups. Seiten werden schneller geladen, aber einige Funktionen funktionieren möglicherweise nicht.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1078,31 +1099,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Weitere Informationen</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standard</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standard (empfohlen)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standard</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Ausgewogen für Schutz und Leistung.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Die Seiten werden normal geladen, aber weniger Tracker blockiert.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Blockiert weniger Tracker. Seiten werden normal geladen.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Was wird durch den Standard-Tracking-Schutz blockiert?</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Streng</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Streng (Standard)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Stärkerer Tracking-Schutz und schnellere Leistung, aber einige Websites funktionieren möglicherweise nicht richtig.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Streng (empfohlen)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Stärkerer Schutz, kann jedoch dazu führen, dass einige Inhalte nicht funktionieren.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Blockiert mehr Tracker, Anzeigen und Pop-ups. Seiten werden schneller geladen, aber einige Funktionen funktionieren möglicherweise nicht.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Was wird durch den strengen Tracking-Schutz blockiert?</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Benutzerdefiniert</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Wählen Sie, welche Art von Skripten zur Aktivitätenverfolgung und sonstige Inhalte blockiert werden</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Wählen Sie, welche Art von Skripten zur Aktivitätenverfolgung und sonstige Inhalte blockiert werden.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Was wird durch den benutzerdefinierten Tracking-Schutz blockiert?</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1152,7 +1163,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Verhindert das Laden von Werbung, Videos und anderen Inhalten, die Skripte zur Aktivitätenverfolgung enthalten. Kann einige Funktionen der Website beeinträchtigen.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s blockiert Tracker auf dieser Website, wenn der Schild violett ist. Tippen Sie darauf, um zu sehen, was blockiert wird.</string>
<string name="etp_onboarding_cfr_message">Immer wenn der Schild lila ist, hat %s Tracker auf einer Website blockiert. Antippen, um weitere Informationen zu erhalten.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Der Schutz für diese Website ist aktiviert</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -106,8 +106,6 @@
<string name="browser_menu_new_tab">Nowy rejtarik</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Do zběrki składowaś</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Sedłowy problem k wěsći daś</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Źěliś</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -121,8 +119,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Spěchowany wót %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Cytański naglěd</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Cytański naglěd zacyniś</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">W nałoženju wócyniś</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -450,6 +450,24 @@
<string name="tabs_header_private_tabs_title">Priwatne rejtariki</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Rejtarik pśidaś</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Priwatny rejtarik pśidaś</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Priwatny</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Wócynjone rejtariki</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Do zběrki składowaś</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Wšykne rejtariki źěliś</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Wšykne rejtariki zacyniś</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nowy rejtarik</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">K startowej wobrazowce</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Rejtarikowy modus pśešaltowaś</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Rejtaŕk ze zběrki wótwónoźeś</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -716,6 +734,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Składowaś</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Pokazaś</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Zběrka %d</string>
@ -945,20 +966,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Pśizjawjenje njejo se raźiło</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Šćitajśo se</string>
<string name="onboarding_tracking_protection_header_2">Awtomatiska priwatnosć</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s tomu zajźujo, až websedła wam online slěduju.</string>
<string name="onboarding_tracking_protection_description_2">Nastajenja priwatnosći a wěstoty pśeslědowaki, škódnu softwaru a pśedewześa blokěruju, kótarež wam slěduju.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standard</string>
<string name="onboarding_tracking_protection_standard_button_2">Standard</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Blokěrujo mjenjej pśeslědowakow, ale zmóžnja bokam se normalnje zacytaś</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Blokěrujo mjenjej pśeslědowakow. Boki se normalnje zacytaju.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Striktny (dopórucony)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Striktny</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Blokěrujo wěcej pśeslědowakow za lěpšy šćit a lěpše wugbaśe, ale móžo zawinowaś, až někotare sedła pšawje njefunkcioněruju</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Blokěrujo wěcej pśeslědowakow, wabjenja a wuskokujucych woknow. Boki se malsnjej spěšnje zacytaju, ale někotare funkcije snaź njefunkcioněruju.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1046,31 +1067,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Dalšne informacije</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standard</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standard (dopórucony)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standard</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Wuwažony za šćit a wugbaśe.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Boki se normalnje zacytaju, ale blokěrujo se mjenjej pśeslědowakow.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Blokěrujo mjenjej pśeslědowakow. Boki se normalnje zacytaju.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Co se pśez standardny slědowański šćit blokěrujo?</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Striktny</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Striktny (standard)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Mócnjejšy slědowański šćit a malsnjejše wugbaśe, ale někotare sedła snaź pórědnje njefunlcioněruju.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Striktny (dopórucony)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Mócnjejšy šćit, ale móžo zawinowaś, až někotare sedła abo wopśimjeśe wěcej njefunkcioněruju.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Blokěrujo wěcej pśeslědowakow, wabjenja a wuskokujucych woknow. Boki se malsnjej spěšnje zacytaju, ale někotare funkcije snaź njefunkcioněruju.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Co se pśez striktny slědowański šćit blokěrujo?</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Swójski</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Wubjeŕśo, kótare pśeslědowaki a skripty maju se blokěrowaś</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Wubjeŕśo, kótare pśeslědowaki a skripty maju se blokěrowaś.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Co se pśez swójski slědowański šćit blokěrujo?</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1123,7 +1134,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Zaźujo zacytanjeju wabjenja, wideo a drugego wopśimjeśa, kótarež slědowański kod wopśimuju. Móžo někotare funkcije websedłow kazyś.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s pśeslědowaki na toś tom sedle blokěrujo, gaž šćit jo wioletny. Pótusniśo, aby wiźeł, co se blokěrujo.</string>
<string name="etp_onboarding_cfr_message">Kuždy raz, gaž šćit jo wioletny, jo %s pśeslědowaki na sedle zablokěrował. Pótusniśo za dalšne informacije.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Šćit jo zmóžnjony za toś to sedło</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -30,6 +30,7 @@
<!-- Private Browsing -->
<!-- Title for private session option -->
<string name="private_browsing_title">Είστε σε ιδιωτική συνεδρία</string>
<string name="private_browsing_common_myths">Κοινοί μύθοι σχετικά με την ιδιωτική περιήγηση</string>
<!-- Delete session button to erase your history in a private session -->
<string name="private_browsing_delete_session">Διαγραφή συνεδρίας</string>
@ -38,6 +39,8 @@
<!-- Text for the negative button -->
<string name="cfr_neg_button_text">Όχι, ευχαριστώ</string>
<!-- Text for the positive button -->
<string name="search_widget_cfr_pos_button_text">Προσθήκη widget</string>
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Όχι τώρα</string>
@ -116,6 +119,10 @@
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
<string name="browser_menu_read_appearance">Εμφάνιση</string>
<!-- Error message to show when the user tries to access a scheme not
handled by the app (Ex: blob, tel etc) -->
<string name="unknown_scheme_error_message">Αδυναμία σύνδεσης. Μη αναγνωρίσιμο σχήμα URL.</string>
<!-- Locale Settings Fragment -->
<!-- Content description for tick mark on selected language -->
<string name="a11y_selected_locale_content_description">Επιλεγμένη γλώσσα</string>
@ -138,6 +145,16 @@
<string name="search_shortcuts_search_with">Αναζήτηση με</string>
<!-- Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with_2">Αυτή τη φορά, αναζήτηση με:</string>
<!-- Button in the search view that lets a user navigate to the site in their clipboard -->
<string name="awesomebar_clipboard_title">Συμπλήρωση συνδέσμου από το πρόχειρο</string>
<!-- Button in the search suggestions onboarding that allows search suggestions in private sessions -->
<string name="search_suggestions_onboarding_allow_button">Αποδοχή</string>
<!-- Button in the search suggestions onboarding that does not allow search suggestions in private sessions -->
<string name="search_suggestions_onboarding_do_not_allow_button">Απόρριψη</string>
<!-- Search suggestion onboarding hint title text -->
<string name="search_suggestions_onboarding_title">Αποδοχή εμφάνισης προτάσεων αναζήτησης σε ιδιωτικές συνεδρίες;</string>
<!-- Search suggestion onboarding hint description text, first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="search_suggestions_onboarding_text">Το %s θα μοιραστεί ό,τι πληκτρολογείτε στη γραμμή διευθύνσεων με την προεπιλεγμένη μηχανή αναζήτησής σας.</string>
<!-- Search suggestion onboarding hint Learn more link text -->
<string name="search_suggestions_onboarding_learn_more_link">Μάθετε περισσότερα</string>
@ -193,6 +210,8 @@
<string name="preferences_site_permissions">Δικαιώματα ιστοσελίδων</string>
<!-- Preference for private browsing options -->
<string name="preferences_private_browsing_options">Ιδιωτική περιήγηση</string>
<!-- Preference for opening links in a private tab-->
<string name="preferences_open_links_in_a_private_tab">Άνοιγμα συνδέσμων σε ιδιωτική καρτέλα</string>
<!-- Preference for accessibility -->
<string name="preferences_accessibility">Προσβασιμότητα</string>
<!-- Preference category for account information -->
@ -265,6 +284,10 @@
<!-- Label indicating that sync is in progress -->
<string name="sync_syncing_in_progress">Συγχρονισμός…</string>
<!-- Label summary the date we last synced. The first parameter is date stamp showing last time synced -->
<string name="sync_last_synced_summary">Τελευταίος συγχρονισμός: %s</string>
<!-- Label summary showing never synced -->
<string name="sync_never_synced_summary">Τελευταίος συγχρονισμός: ποτέ</string>
<!-- Text for displaying the default device name.
The first parameter is the application name, the second is the device manufacturer name
and the third is the device model. -->
@ -273,6 +296,10 @@
<!-- Send Tab -->
<!-- Name of the "receive tabs" notification channel. Displayed in the "App notifications" system settings for the app -->
<string name="fxa_received_tab_channel_name">Ληφθείσες καρτέλες</string>
<!-- The body for these is the URL of the tab received -->
<string name="fxa_tab_received_notification_name">Ελήφθη καρτέλα</string>
<!-- When multiple tabs have been received -->
<string name="fxa_tabs_received_notification_name">Ελήφθησαν καρτέλες</string>
<!-- %s is the device name -->
<string name="fxa_tab_received_from_notification_name">Καρτέλα από %s</string>
@ -303,9 +330,14 @@
<!-- Preference for account login -->
<string name="preferences_sync_sign_in">Σύνδεση</string>
<!-- Preference for reconnecting to FxA sync -->
<string name="preferences_sync_sign_in_to_reconnect">Συνδεθείτε για επανασύνδεση</string>
<!-- Preference for removing FxA account -->
<string name="preferences_sync_remove_account">Αφαίρεση λογαριασμού</string>
<!-- Pairing Feature strings -->
<!-- Instructions on how to access pairing -->
<string name="pair_instructions_2"><![CDATA[Σαρώστε το κωδικό QR που εμφανίζεται στο <b>firefox.com/pair</b>]]></string>
<!-- Button to open camera for pairing -->
<string name="pair_open_camera">Άνοιγμα κάμερας</string>
<!-- Button to cancel pairing -->
@ -392,20 +424,46 @@
<string name="current_session_save">Αποθήκευση</string>
<!-- Button in the current session menu. Opens the share menu when pressed -->
<string name="current_session_share">Κοινή χρήση</string>
<!-- Content description (not visible, for screen readers etc.): Title icon for current session menu -->
<string name="current_session_image">Εικόνα τρέχουσας συνεδρίας</string>
<!-- Button to save the current set of tabs into a collection -->
<string name="save_to_collection">Αποθήκευση στη συλλογή</string>
<!-- Text for the menu button to delete a collection -->
<string name="collection_delete">Διαγραφή συλλογής</string>
<!-- Text for the menu button to rename a collection -->
<string name="collection_rename">Μετονομασία συλλογής</string>
<!-- Text for the button to open tabs of the selected collection -->
<string name="collection_open_tabs">Άνοιγμα καρτελών</string>
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Αφαίρεση</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (Ιδιωτική λειτουργία)</string>
<!-- History -->
<!-- Text for the button to clear all history -->
<string name="history_delete_all">Διαγραφή ιστορικού</string>
<!-- Text for the dialog to confirm clearing all history -->
<string name="history_delete_all_dialog">Θέλετε σίγουρα να διαγράψετε το ιστορικό σας;</string>
<!-- Text for the snackbar to confirm that multiple browsing history items has been deleted -->
<string name="history_delete_multiple_items_snackbar">Το ιστορικό διαγράφηκε</string>
<!-- Text for the snackbar to confirm that a single browsing history item has been deleted. The first parameter is the shortened URL of the deleted history item. -->
<string name="history_delete_single_item_snackbar">Το &quot;%1$s&quot; διαγράφηκε</string>
<!-- Text for positive action to delete history in deleting history dialog -->
<string name="history_clear_dialog">Απαλοιφή</string>
<!-- History overflow menu copy button -->
<string name="history_menu_copy_button">Αντιγραφή</string>
<!-- History overflow menu share button -->
<string name="history_menu_share_button">Κοινή χρήση</string>
<!-- History overflow menu open in new tab button -->
<string name="history_menu_open_in_new_tab_button">Άνοιγμα σε νέα καρτέλα</string>
<!-- History overflow menu open in private tab button -->
<string name="history_menu_open_in_private_tab_button">Άνοιγμα σε ιδιωτική καρτέλα</string>
<!-- Text for the button to delete a single history item -->
<string name="history_delete_item">Διαγραφή</string>
<!-- History multi select title in app bar
The first parameter is the number of bookmarks selected -->
<string name="history_multi_select_title">Επιλέχθηκαν %1$d</string>
<!-- Text for the button to clear selected history items. The first parameter
is a digit showing the number of items you have selected -->
<string name="history_delete_some">Διαγραφή %1$d στοιχείων</string>
@ -418,16 +476,35 @@
<!-- Text for the header that groups the history older than the last month -->
<string name="history_older">Παλαιότερα</string>
<!-- Text shown when no history exists -->
<string name="history_empty_message">Δεν υπάρχει ιστορικό</string>
<!-- Close tab button text on the tab crash page -->
<string name="tab_crash_close">Κλείσιμο καρτέλας</string>
<!-- Restore tab button text on the tab crash page -->
<string name="tab_crash_restore">Επαναφορά καρτελών</string>
<!-- Content Description for session item menu button -->
<string name="content_description_session_menu">Επιλογές συνεδρίας</string>
<!-- Bookmarks -->
<!-- Content description for bookmarks library menu -->
<string name="bookmark_menu_content_description">Μενού σελιδοδεικτών</string>
<!-- Screen title for editing bookmarks -->
<string name="bookmark_edit">Επεξεργασία σελιδοδείκτη</string>
<!-- Screen title for selecting a bookmarks folder -->
<string name="bookmark_select_folder">Επιλογή φακέλου</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete the selected folder -->
<string name="bookmark_delete_folder_confirmation_dialog">Θέλετε σίγουρα να διαγράψετε αυτό το φάκελο;</string>
<!-- Snackbar title shown after a folder has been deleted. This first parameter is the name of the deleted folder -->
<string name="bookmark_delete_folder_snackbar">Ο φάκελος &quot;%1$s&quot; διαγράφηκε</string>
<!-- Screen title for adding a bookmarks folder -->
<string name="bookmark_add_folder">Προσθήκη φακέλου</string>
<!-- deprecated: Snackbar title shown after a bookmark has been created. -->
<string name="bookmark_created_snackbar">Ο σελιδοδείκτης δημιουργήθηκε.</string>
<!-- Snackbar title shown after a bookmark has been created. -->
<string name="bookmark_saved_snackbar">Ο σελιδοδείκτης αποθηκεύτηκε!</string>
<!-- Snackbar edit button shown after a bookmark has been created. -->
<string name="edit_bookmark_snackbar_action">ΕΠΕΞΕΡΓΑΣΙΑ</string>
<!-- Bookmark overflow menu edit button -->
@ -569,6 +646,8 @@
<!-- text for the button to finish onboarding -->
<string name="onboarding_finish">Έναρξη περιήγησης</string>
<!-- Preference for enhanced tracking protection for the custom protection settings for tracking content -->
<string name="preference_enhanced_tracking_protection_custom_tracking_content">Περιεχόμενο καταγραφής</string>
<!-- Option for enhanced tracking protection for the custom protection settings for tracking content-->
<string name="preference_enhanced_tracking_protection_custom_tracking_content_1">Σε όλες τις καρτέλες</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
@ -579,14 +658,31 @@
<string name="etp_cryptominers_title">Cryptominers</string>
<!-- Category of trackers (fingerprinters) that can be blocked by Enhanced Tracking Protection -->
<string name="etp_fingerprinters_title">Fingerprinters</string>
<!-- Category of trackers (tracking content) that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_title">Περιεχόμενο καταγραφής</string>
<!-- About page Your rights link text -->
<string name="about_your_rights">Τα δικαιώματά σας</string>
<!-- About page link text to open what's new link -->
<string name="about_whats_new">Τι νέο υπάρχει στο %s</string>
<!-- Open source licenses page title
The first parameter is the app name -->
<string name="open_source_licenses_title">%s | Βιβλιοθήκες OSS</string>
<!-- About page link text to open support link -->
<string name="about_support">Υποστήριξη</string>
<!-- About page link text to list of past crashes (like about:crashes on desktop) -->
<string name="about_crashes">Καταρρεύσεις</string>
<!-- About page link text to open privacy notice link -->
<string name="about_privacy_notice">Πολιτική απορρήτου</string>
<!-- About page link text to open know your rights link -->
<string name="about_know_your_rights">Μάθετε τα δικαιώματά σας</string>
<!-- About page link text to open licensing information link -->
<string name="about_licensing_information">Πληροφορίες άδειας</string>
<!-- About page link text to open a screen with libraries that are used -->
<string name="about_other_open_source_libraries">Βιβλιοθήκες που χρησιμοποιούμε</string>
<!-- Content description of the tab counter toolbar button when one tab is open -->
<string name="tab_counter_content_description_one_tab">1 καρτέλα</string>
<!-- Content description of the tab counter toolbar button when multiple tabs are open. First parameter will be replaced with the number of tabs (always more than one) -->
@ -600,6 +696,11 @@
<!-- Paste the text in the clipboard -->
<string name="browser_toolbar_long_press_popup_paste">Επικόλληση</string>
<!-- Snackbar message shown after an URL has been copied to clipboard. -->
<string name="browser_toolbar_url_copied_to_clipboard_snackbar">Το URL αντιγράφτηκε στο πρόχειρο</string>
<!-- Title text for the Add To Homescreen dialog -->
<string name="add_to_homescreen_title">Προσθήκη στην αρχική οθόνη</string>
<!-- Cancel button text for the Add to Homescreen dialog -->
<string name="add_to_homescreen_cancel">Ακύρωση</string>
<!-- Add button text for the Add to Homescreen dialog -->
@ -607,12 +708,41 @@
<!-- Continue to website button text for the first-time Add to Homescreen dialog -->
<string name="add_to_homescreen_continue">Συνέχεια στην ιστοσελίδα</string>
<!-- Placeholder text for the TextView in the Add to Homescreen dialog -->
<string name="add_to_homescreen_text_placeholder">Όνομα συντόμευσης</string>
<!-- Preference for managing the settings for logins and passwords in Fenix -->
<string name="preferences_passwords_logins_and_passwords">Συνδέσεις και κωδικοί πρόσβασης</string>
<!-- Preference for managing the saving of logins and passwords in Fenix -->
<string name="preferences_passwords_save_logins">Αποθήκευση συνδέσεων και κωδικών πρόσβασης</string>
<!-- Preference option for asking to save passwords in Fenix -->
<string name="preferences_passwords_save_logins_ask_to_save">Ερώτηση για αποθήκευση</string>
<!-- Preference option for never saving passwords in Fenix -->
<string name="preferences_passwords_save_logins_never_save">Ποτέ αποθήκευση</string>
<!-- Preference for autofilling saved logins in Fenix -->
<string name="preferences_passwords_autofill">Αυτόματη συμπλήρωση</string>
<!-- Preference for syncing saved logins in Fenix -->
<string name="preferences_passwords_sync_logins">Συγχρονισμός συνδέσεων</string>
<!-- Syncing saved logins in Fenix is on -->
<string name="preferences_passwords_sync_logins_on">Ενεργό</string>
<!-- Syncing saved logins in Fenix is off -->
<string name="preferences_passwords_sync_logins_off">Ανενεργό</string>
<!-- Syncing saved logins in Fenix needs reconnect to sync -->
<string name="preferences_passwords_sync_logins_reconnect">Επανασύνδεση</string>
<!-- Syncing saved logins in Fenix needs login -->
<string name="preferences_passwords_sync_logins_sign_in">Σύνδεση στο Sync</string>
<!-- Preference to access list of saved logins -->
<string name="preferences_passwords_saved_logins">Αποθηκευμένες συνδέσεις</string>
<!-- Preference to access list of saved logins -->
<string name="preferences_passwords_saved_logins_description_empty_learn_more_link">Μάθετε περισσότερα σχετικά με το Sync.</string>
<!-- Preference to access list of login exceptions that we never save logins for -->
<string name="preferences_passwords_exceptions">Εξαιρέσεις</string>
<!-- Hint for search box in logins list -->
<string name="preferences_passwords_saved_logins_search">Αναζήτηση συνδέσεων</string>
<!-- Option to sort logins list A-Z, alphabetically -->
<string name="preferences_passwords_saved_logins_alphabetically">Αλφαβητικά</string>
<!-- Option to sort logins list by most recently used -->
<string name="preferences_passwords_saved_logins_recently_used">Πρόσφατη χρήση</string>
<!-- The header for the site that a login is for -->
<string name="preferences_passwords_saved_logins_site">Ιστοσελίδα</string>
<!-- The header for the username for a login -->
@ -621,6 +751,28 @@
<string name="preferences_passwords_saved_logins_password">Κωδικός πρόσβασης</string>
<!-- Learn more link that will link to a page with more information displayed when a connection is insecure and we detect the user is entering a password -->
<string name="logins_insecure_connection_warning_learn_more">Μάθετε περισσότερα</string>
<!-- Prompt message displayed when Fenix detects a user has entered a password and user decides if Fenix should save it. The first parameter is the name of the application (For example: Fenix) -->
<string name="logins_doorhanger_save">Θέλετε το %s να αποθηκεύσει αυτή τη σύνδεση;</string>
<!-- Positive confirmation that Fenix should save the new or updated login -->
<string name="logins_doorhanger_save_confirmation">Αποθήκευση</string>
<!-- Negative confirmation that Fenix should not save the new or updated login -->
<string name="logins_doorhanger_save_dont_save">Χωρίς αποθήκευση</string>
<!-- Shown in snackbar to tell user that the password has been copied -->
<string name="logins_password_copied">Ο κωδικός πρόσβασης έχει αντιγραφεί στο πρόχειρο</string>
<!-- Shown in snackbar to tell user that the username has been copied -->
<string name="logins_username_copied">Το όνομα χρήστη αντιγράφτηκε στο πρόχειρο</string>
<!-- Shown in snackbar to tell user that the site has been copied -->
<string name="logins_site_copied">Η ιστοσελίδα αντιγράφτηκε στο πρόχειρο</string>
<!-- Content Description (for screenreaders etc) read for the button to copy a password in logins-->
<string name="saved_logins_copy_password">Αντιγραφή κωδικού πρόσβασης</string>
<!-- Content Description (for screenreaders etc) read for the button to copy a username in logins -->
<string name="saved_login_copy_username">Αντιγραφή ονόματος χρήστη</string>
<!-- Content Description (for screenreaders etc) read for the button to copy a site in logins -->
<string name="saved_login_copy_site">Αντιγραφή ιστοσελίδας</string>
<!-- Content Description (for screenreaders etc) read for the button to reveal a password in logins -->
<string name="saved_login_reveal_password">Εμφάνιση κωδικού πρόσβασης</string>
<!-- Content Description (for screenreaders etc) read for the button to hide a password in logins -->
<string name="saved_login_hide_password">Απόκρυψη κωδικού πρόσβασης</string>
<!-- Negative button to ignore warning dialog if users have no device authentication set up -->
<string name="logins_warning_dialog_later">Αργότερα</string>
<!-- Positive button to send users to set up a pin of warning dialog if users have no device authentication set up -->
@ -630,6 +782,9 @@
<!-- Saved logins sorting strategy menu item -by last used- (if selected, it will sort saved logins by last used) -->
<string name="saved_logins_sort_strategy_last_used">Τελευταία χρήση</string>
<!-- Content description (not visible, for screen readers etc.): Sort saved logins dropdown menu chevron icon -->
<string name="saved_logins_menu_dropdown_chevron_icon_content_description">Ταξινόμηση μενού σύνδεσης</string>
<!-- Title of the Add search engine screen -->
<string name="search_engine_add_custom_search_engine_title">Προσθήκη μηχανής αναζήτησης</string>
<!-- Title of the Edit search engine screen -->
@ -648,4 +803,72 @@
<!-- Placeholder text shown in the Search Engine Name TextField before a user enters text -->
<string name="search_add_custom_engine_name_hint">Όνομα</string>
</resources>
<!-- Text for the button to learn more about adding a custom search engine -->
<string name="search_add_custom_engine_learn_more_label">Μάθετε περισσότερα</string>
<!-- Text shown when we aren't able to validate the custom search query. The first parameter is the url of the custom search engine -->
<string name="search_add_custom_engine_error_cannot_reach">Σφάλμα σύνδεσης στο “%s”</string>
<!-- Title text shown for the migration screen to the new browser. Placeholder replaced with app name -->
<string name="migration_title">Καλώς ορίσατε στο νέο %s</string>
<!-- Text on the disabled button while in progress. Placeholder replaced with app name -->
<string name="migration_updating_app_button_text">Ενημέρωση του %s…</string>
<!-- Text on the enabled button. Placeholder replaced with app name-->
<string name="migration_update_app_button">Έναρξη του %s</string>
<!-- Accessibility description text for a completed migration item -->
<string name="migration_icon_description">Η μεταφορά ολοκληρώθηκε</string>
<!--Text on list of migrated items (e.g. Settings, History, etc.)-->
<string name="migration_text_passwords">Κωδικοί πρόσβασης</string>
<!-- First step for the allowing a permission -->
<string name="phone_feature_blocked_step_settings">1. Μεταβείτε στις Ρυθμίσεις Android</string>
<!-- Second step for the allowing a permission -->
<string name="phone_feature_blocked_step_permissions"><![CDATA[2. Πατήστε το <b>Δικαιώματα</b>]]></string>
<!-- Third step for the allowing a permission (Fore example: Camera) -->
<string name="phone_feature_blocked_step_feature"><![CDATA[3. Ενεργοποιήστε το <b>%1$s</b>]]></string>
<!-- Label that indicates a site is using a secure connection -->
<string name="quick_settings_sheet_secure_connection">Ασφαλής σύνδεση</string>
<!-- Label that indicates a site is using a insecure connection -->
<string name="quick_settings_sheet_insecure_connection">Μη ασφαλής σύνδεση</string>
<!-- Label for the Pocket default top site -->
<string name="pocket_top_articles">Κορυφαία άρθρα</string>
<!-- Browser menu button that adds a top site to the home fragment -->
<string name="browser_menu_add_to_top_sites">Προσθήκη στις κορυφαίες ιστοσελίδες</string>
<!-- text shown before the issuer name to indicate who its verified by, parameter is the name of
the certificate authority that verified the ticket-->
<string name="certificate_info_verified_by">Επαλήθευση από: %1$s</string>
<!-- Login overflow menu delete button -->
<string name="login_menu_delete_button">Διαγραφή</string>
<!-- Login overflow menu edit button -->
<string name="login_menu_edit_button">Επεξεργασία</string>
<!-- Message in delete confirmation dialog for logins -->
<string name="login_deletion_confirmation">Θέλετε σίγουρα να διαγράψετε αυτή τη σύνδεση;</string>
<!-- Positive action of a dialog asking to delete -->
<string name="dialog_delete_positive">Διαγραφή</string>
<!-- The saved login options menu description. -->
<string name="login_options_menu">Επιλογές σύνδεσης</string>
<!-- The button description to save changes to an edited login. -->
<string name="save_changes_to_login">Αποθήκευση αλλαγών στη σύνδεση.</string>
<!-- The button description to discard changes to an edited login. -->
<string name="discard_changes">Απόρριψη αλλαγών</string>
<!-- The page title for editing a saved login. -->
<string name="edit">Επεξεργασία</string>
<!-- The error message in edit login view when password field is blank. -->
<string name="saved_login_password_required">Απαιτείται κωδικός πρόσβασης</string>
<!-- Voice search button content description -->
<string name="voice_search_content_description">Φωνητική αναζήτηση</string>
<!-- Voice search prompt description displayed after the user presses the voice search button -->
<string name="voice_search_explainer">Μιλήστε τώρα</string>
<!-- Synced Tabs -->
<!-- Text displayed when user is not logged into a Firefox Account -->
<string name="synced_tabs_connect_to_sync_account">Συνδεθείτε με ένα λογαριασμό Firefox.</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">Συνδέστε μια άλλη συσκευή.</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">Παρακαλούμε επαληθεύστε ξανά την ταυτότητά σας.</string>
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
<string name="synced_tabs_enable_tab_syncing">Παρακαλούμε ενεργοποιήστε το συγχρονισμό καρτελών.</string>
</resources>

View File

@ -96,7 +96,7 @@
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">Install</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">Synced Tabs</string>
<string name="synced_tabs">Synced tabs</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">Find in page</string>
<!-- Browser menu button that creates a private tab -->
@ -105,8 +105,6 @@
<string name="browser_menu_new_tab">New tab</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Save to collection</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Report site issue</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Share</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -120,8 +118,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Powered by %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Reader view</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Close reader view</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Open in app</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -425,7 +425,7 @@
<!-- Option in Library to open History page -->
<string name="library_history">History</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">Synced Tabs</string>
<string name="library_synced_tabs">Synced tabs</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">Reading List</string>
<!-- Menu Item Label for Search in Library -->
@ -446,6 +446,24 @@
<string name="tabs_header_private_tabs_title">Private tabs</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Add tab</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Add private tab</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Private</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Open Tabs</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Save to collection</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Share all tabs</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Close all tabs</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">New tab</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Go home</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Toggle tab mode</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Remove tab from collection</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -709,6 +727,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Save</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">View</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Collection %d</string>
@ -937,20 +958,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Failed to sign-in</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Protect yourself</string>
<string name="onboarding_tracking_protection_header_2">Automatic privacy</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s helps stop websites from tracking you online.</string>
<string name="onboarding_tracking_protection_description_2">Privacy and security settings block trackers, malware, and companies that follow you.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standard</string>
<string name="onboarding_tracking_protection_standard_button_2">Standard (default)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Blocks fewer trackers but allows pages to load normally</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Blocks fewer trackers. Pages will load normally.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Strict (recommended)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Strict</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Blocks more trackers for better protection and performance, but may cause some sites to not work properly</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Blocks more trackers, ads, and popups. Pages load faster, but some functionality might not work.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1037,31 +1058,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Learn more</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standard</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standard (recommended)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standard (default)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Balanced for protection and performance.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Pages will load normally, but block fewer trackers.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Blocks fewer trackers. Pages will load normally.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Whats blocked by standard tracking protection</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Strict</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Strict (Default)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Stronger tracking protection and faster performance, but some sites may not work properly.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Strict (recommended)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Stronger protection, but may cause some sites or content to break.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Blocks more trackers, ads, and popups. Pages load faster, but some functionality might not work.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Whats blocked by strict tracking protection</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Custom</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Choose which trackers and scripts to block</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Choose which trackers and scripts to block.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Whats blocked by custom tracking protection</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1111,7 +1122,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Stops outside ads, videos, and other content from loading that contains tracking code. May affect some website functionality.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s is blocking trackers on this site when the shield is purple. Tap it to see whats blocked.</string>
<string name="etp_onboarding_cfr_message">Every time the shield is purple, %s has blocked trackers on a site. Tap for more info.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Protections are ON for this site</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -95,7 +95,7 @@
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">Install</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">Synchronised Tabs</string>
<string name="synced_tabs">Synchronised tabs</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">Find in page</string>
<!-- Browser menu button that creates a private tab -->
@ -425,7 +425,7 @@
<!-- Option in Library to open History page -->
<string name="library_history">History</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">Synchronised Tabs</string>
<string name="library_synced_tabs">Synchronised tabs</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">Reading List</string>
<!-- Menu Item Label for Search in Library -->

View File

@ -106,8 +106,6 @@
<string name="browser_menu_new_tab">Nueva pestaña</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Guardar en la colección</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Informar sobre problema del sitio</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Compartir</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -123,8 +121,10 @@
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Desarrollado por %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Vista de lectura</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Salir de vista de lectura</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Abrir en la aplicación</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -462,6 +462,24 @@
<string name="tabs_header_private_tabs_title">Pestañas privadas</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Agregar pestaña</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Agregar pestaña privada</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Privado</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Abrir pestañas</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Guardar en colección</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Compartir todas las pestañas</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Cerrar todas las pestañas</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nueva pestaña</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Ir a inicio</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Alternar modo pestaña</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Eliminar pestaña de la colección</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -734,6 +752,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Guardar</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Ver</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Colección %d</string>
@ -966,20 +987,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Falló el inicio de sesión</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Protegete </string>
<string name="onboarding_tracking_protection_header_2">Privacidad automática</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s ayuda a evitar que los sitios web te rastreen en línea.</string>
<string name="onboarding_tracking_protection_description_2">La configuración de privacidad y seguridad bloquea los rastreadores, los programas malignos y las compañías que te siguen.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Estándar</string>
<string name="onboarding_tracking_protection_standard_button_2">Estándar (predeterminado)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Bloquea menos rastreadores pero permite que las páginas se carguen correctamente</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Bloquea menos rastreadores. Las páginas se van a cargar normalmente.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Estricta (recomendada)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Estricto</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Bloquea más rastreadores para una mejor protección y rendimiento, pero es posible que algunos sitios no se carguen correctamente</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero podés perder cierta funcionalidad.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1067,31 +1088,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Conocer más</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Estándar</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Estándar (recomendado)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Estándar (predeterminado)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Equilibrado para protección y rendimiento.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Las páginas se van a cargar normalmente, pero bloquean menos rastreadores.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Bloquea menos rastreadores. Las páginas se van a cargar normalmente.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Qué es lo que está bloqueado por la protección de rastreo estándar</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Estricta</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Estricta (predeterminada)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Mayor protección de rastreo y rendimiento más rápido, pero algunos sitios pueden no funcionar correctamente.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Estricto (recomendada)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Mayor protección, pero puede causar que algunos sitios o contenido no se carguen.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero podés perder cierta funcionalidad.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Qué es lo que está bloqueado por la protección de rastreo estricta</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Personalizado</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Elegí qué rastreadores y secuencias de comandos querés bloquear</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Elegí qué rastreadores y secuencias de comandos querés bloquear.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Esto es lo que está bloqueado por la protección de rastreo estándar</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1141,7 +1152,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Detiene la carga de anuncios externos, videos y otro contenido que contiene código de rastreo. Puede afectar la funcionalidad del sitio web.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Cuando el escudo es morado, %s está bloqueando rastreadores en ese sitio. Tocá para ver qué está bloqueado.</string>
<string name="etp_onboarding_cfr_message">Cada vez que ves el escudo morado, %s bloqueó los rastreadores en un sitio. Tocá para más información.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Las protecciones están habilitadas para este sitio</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -108,8 +108,6 @@
<string name="browser_menu_new_tab">Nueva pestaña</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Guardar en la colección</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Informar de error en el sitio</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Compartir</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -124,8 +122,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Desarrollado por %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Vista de lectura</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Salir de vista de lectura</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Abrir en aplicación</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -456,6 +456,24 @@
<string name="tabs_header_private_tabs_title">Pestañas privadas</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Añadir pestaña</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Agregar pestaña privada</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Privada</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Abrir pestañas</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Guardar en colección</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Compartir todas las pestañas</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Cerrar todas las pestañas</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nueva pestaña</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Ir a inicio</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Alternar modo pestaña</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Eliminar pestaña de la colección</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -736,6 +754,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Guardar</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Ver</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Colección %d</string>
@ -972,22 +993,22 @@
<string name="onboarding_firefox_account_sync_is_on">Sync está activado</string>
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Error al iniciar sesión</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Protégete a ti mismo</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header_2">Privacidad automática</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s ayuda a evitar que los sitios web te rastreen en línea.</string>
<string name="onboarding_tracking_protection_description_2">La configuración de privacidad y seguridad bloquea los rastreadores, los programas malignos y las compañías que te siguen.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Estándar</string>
<string name="onboarding_tracking_protection_standard_button_2">Estándar (predeterminado)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Bloquea menos rastreadores pero permite que las páginas carguen con normalidad</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Bloquea menos rastreadores. Las páginas se van a cargar normalmente.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Estricta (recomendada)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Estricto</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Bloquea más rastreadores para una mejor protección y rendimiento, pero puede hacer que algunos sitios no funcionen correctamente</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero podés perder cierta funcionalidad.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1075,31 +1096,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Más información</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Estándar</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Estándar (recomendada)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Estándar (predeterminado)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Equilibrada para protección y rendimiento.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Las páginas se cargarán normalmente, pero se bloquearán menos rastreadores.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Bloquea menos rastreadores. Las páginas se van a cargar normalmente.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Lo que bloquea la protección de seguimiento estándar</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Estricta</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Estricta (predeterminada)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Mayor protección contra rasteo y mejor rendimiento, pero puede que algunos sitios no funcionen correctamente.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Estricta (recomendada)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Mayor protección, pero puede provocar que algunos sitios o contenido no funcionen.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero podés perder cierta funcionalidad.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Lo que bloquea la estricta protección de rastreo</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Personalizar</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Elige qué rastreadores y secuencias de comandos bloquear</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Ele qué rastreadores y secuencias de comandos querés bloquear.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Lo que bloquea la protección de seguimiento personalizada</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1149,7 +1160,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Bloquea la carga de anuncios externos, videos y contenido que incluye código de seguimiento. Puede afectar a algunas funciones del sitio web.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Cuando el escudo es morado, %s está bloqueando rastreadores en ese sitio. Selecciónalo para ver qué ha bloqueado.</string>
<string name="etp_onboarding_cfr_message">Cada vez que ves el escudo morado, %s bloqueó los rastreadores en un sitio. Tocá para más información.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Las protecciones están activadas para este sitio</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -106,8 +106,6 @@
<string name="browser_menu_new_tab">Fitxa berria</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Gorde bildumara</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Jakinarazi gunearen arazoa</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Partekatu</string>
@ -124,8 +122,10 @@
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">%1$s nabigatzaileak hornitua</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Irakurtzeko ikuspegia</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Itxi irakurtzeko ikuspegia</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Ireki aplikazioan</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -458,6 +458,24 @@
<string name="tabs_header_private_tabs_title">Fitxa pribatuak</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Gehitu fitxa</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Gehitu fitxa pribatua</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Pribatua</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Irekitako fitxak</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Gorde bildumara</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Partekatu fitxa guztiak</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Itxi fitxa guztiak</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Fitxa berria</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Joan hasierara</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Txandakatu fitxen modua</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Kendu fitxa bildumatik</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -725,6 +743,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Gorde</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Ikusi</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">%d. bilduma</string>
@ -958,20 +979,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Huts egin du saioa hastean</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Babestu zure burua</string>
<string name="onboarding_tracking_protection_header_2">Pribatutasun automatikoa</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">Webguneek zure jarraipena ez egiteko laguntza ematen dizu %s(e)k.</string>
<string name="onboarding_tracking_protection_description_2">Pribatutasun- eta segurtasun-ezarpenek jarraipen-elementuak, malwarea eta zure jarraipena egiten duten enpresak blokeatzen dituzte.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Oinarrizkoa</string>
<string name="onboarding_tracking_protection_standard_button_2">Oinarrizkoa (lehenetsia)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Jarraipen-elementu gutxiago blokeatzen ditu baina orriak normal kargatzea baimentzen du</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Jarraipen-elementu gutxiago blokeatzen ditu. Orriak ohi bezala kargatuko dira.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Zorrotza (gomendatua)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Zorrotza</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Jarraipen-elementu gehiago blokeatzen ditu babes eta errendimendu hoberako baina zenbait gune ondo ez ibiltzea eragin lezake</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Jarraipen-elementu, iragarki eta popup gehiago blokeatzen ditu. Orriak azkarrago kargatzen dira baina zenbait eginbide agian ez dira ondo ibiliko.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1058,31 +1079,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Argibide gehiago</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Oinarrizkoa</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Oinarrizkoa (gomendatua)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Oinarrizkoa (lehenetsia)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Babeserako eta errendimendurako orekatua.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Orriak ohi bezala kargatuko dira baina jarraipen-elementu gutxiago blokeatuko dira.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Jarraipen-elementu gutxiago blokeatzen ditu. Orriak ohi bezala kargatuko dira.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Jarraipenaren oinarrizko babesak blokeatzen duena</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Zorrotza</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Zorrotza (lehenetsia)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Jarraipenaren babes sendoagoa eta errendimendu hobea baina baliteke zenbait gune ondo ez ibiltzea.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Zorrotza (gomendatua)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Babes sendoagoa baina zenbait gune edo eduki apurtzea eragin lezake.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Jarraipen-elementu, iragarki eta popup gehiago blokeatzen ditu. Orriak azkarrago kargatzen dira baina zenbait eginbide agian ez dira ondo ibiliko.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Jarraipenaren babes zorrotzak blokeatzen duena</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Pertsonalizatua</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Aukeratu blokeatu beharreko jarraipen-elementu eta scriptak</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Aukeratu blokeatu beharreko jarraipen-elementu eta scriptak.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Jarraipenaren babes pertsonalizatuak blokeatzen duena</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1132,7 +1143,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Jarraipenerako kodea izan lezaketen kanpoko iragarkiak, bideoak eta bestelako edukia kargatzea eragozten du. Zenbait webguneren eginbideetan eragina izan lezake.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s jarraipen-elementuak blokeatzen ari da babesaren ikonoa morea denean. Saka ezazu zer blokeatzen den ikusteko.</string>
<string name="etp_onboarding_cfr_message">Babesaren ikonoa morea denean, %s(e)k jarraipen-elementuak blokeatu ditu gune batean. Sakatu informazio gehiagorako.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Babesak aktibo daude gune honetarako</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -42,6 +42,11 @@
<!-- Text for the negative button -->
<string name="cfr_neg_button_text">نه، ممنون!</string>
<!-- Search widget "contextual feature recommendation" (CFR) -->
<!-- Text for the main message. 'Firefox' intentionally hardcoded here.-->
<string name="search_widget_cfr_message">سریعتر به Firefox بروید. ویجت را به صفحه اصلی خود اضافه کنید.</string>
<!-- Text for the positive button -->
<string name="search_widget_cfr_pos_button_text">ویجت را اضافه کنید</string>
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">اکنون نه</string>
@ -87,6 +92,8 @@
<string name="browser_menu_add_to_homescreen">افزودن به صفحه‌ی خانه</string>
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">نصب</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">زبانه‌های همگام‌سازی شده</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">پیدا کردن در صفحه</string>
<!-- Browser menu button that creates a private tab -->
@ -95,8 +102,6 @@
<string name="browser_menu_new_tab">زبانه جدید</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">افزودن به مجموعه</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">گزارش مشکل پایگاه اینترنتی</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">اشتراک‌گذاری</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -110,8 +115,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">قدرت گرفته توسط %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">نمای خواننده</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">بستن نمای مطالعه</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">باز کردن در برنامه</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -281,6 +288,8 @@
<string name="preferences_sync_bookmarks">نشانک‌ها</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">ورودها</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs">زبانه‌ها</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">خروج</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -412,6 +421,8 @@
<string name="library_desktop_bookmarks_unfiled">نشانک‌‌های دیگر</string>
<!-- Option in Library to open History page -->
<string name="library_history">تاریخچه</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">زبانه‌های همگام‌سازی شده</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">فهرست خواندن</string>
<!-- Menu Item Label for Search in Library -->
@ -432,6 +443,24 @@
<string name="tabs_header_private_tabs_title">برگه خصوصی</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">افزودن زبانه</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">افزودن زبانه خصوصی</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">خصوصی</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">زبانه‌های باز</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">افزودن به مجموعه</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">به اشتراک‌گذار همه‌ی زبانه‌ها</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">بستن همه‌ی زبانه‌ها</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">زبانه جدید</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">برو به خانه</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">تغییر حالت زبانه</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">حذف زبانه از مجموعه</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -699,6 +728,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">ذخیره</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">نما</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">مجموعه %d</string>
@ -928,18 +960,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">ورود شکست خورد</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">از خودت محافظت کن</string>
<string name="onboarding_tracking_protection_header_2">حریم‌‌ خصوصی خودکار</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s به شما کمک می کند تا وب سایت ها ردیاب شما را متوقف کنند.</string>
<string name="onboarding_tracking_protection_description_2">تنظیمات حریم خصوصی و امنیتی ردیاب ها ، بدافزارها و شرکت هایی که شما را ردیابی می کنند را مسدود می کند.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">استاندارد</string>
<string name="onboarding_tracking_protection_standard_button_2">استاندارد (پیش فرض)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">تعداد کمتر ردیاب را مسدود می کند اما به صفحات اجازه می دهد تا به طور عادی بارگیری شوند</string>
<string name="onboarding_tracking_protection_standard_button_description_2">تعداد کمتر ردیاب را مسدود می کند. صفحات به صورت عادی بارگیری می شوند.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">سختگیرانه (توصیه می‌شود)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">شدید</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">ردیاب های بیشتری را برای محافظت و عملکرد بهتر مسدود می کند ، اما ممکن است باعث شود برخی سایت ها به درستی کار نکنند</string>
<string name="onboarding_tracking_protection_strict_button_description_2">ردگیرها ، تبلیغات و پنجره های بیشتر را مسدود می کند. صفحات سریعتر بارگیری می شوند ، اما برخی از عملکردها ممکن است کار نکند.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1026,31 +1060,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">بیشتر بدانید</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">استاندارد</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">استاندارد (توصیه می شود)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">استاندارد (پیش فرض)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">تنظیم شده برای محافظت و کارایی.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">صفحات به طور عادی بارگیری می شوند ، اما تعداد کمتر ردیاب را مسدود می کنند.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">تعداد کمتر ردیاب را مسدود می کند. صفحات به صورت عادی بارگیری می شوند.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">آنچه توسط حفاظت ردیابی استاندارد مسدود شده است</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">سخت گیرانه</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">سخت‌گیرانه (پیش فرض)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">محافظت از ردیابی قوی تر و عملکرد سریع تر ، اما برخی از سایت ها ممکن است به درستی کار نکنند.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">سختگیرانه (توصیه می‌شود)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">ارائه محافظت قوی تر ممکن است باعث خرابی ها در پایگاه اینترنتی شود.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">ردگیرها ، تبلیغات و پنجره های بیشتر را مسدود می کند. صفحات سریعتر بارگیری می شوند ، اما برخی از عملکردها ممکن است کار نکند.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">آنچه توسط حفاظت ردیابی سخت‌گیرانه مسدود شده است</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">سفارشی</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">کدام ردیاب و اسکریپت را مسدود کنید</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">انتخاب کنید کدام ردیاب و اسکریپت را مسدود کنید.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">آنچه توسط حفاظت ردیابی سفارشی مسدود شده است</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1101,7 +1125,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">از بارگیری که حاوی کد رهگیری است ، خارج از تبلیغات ، فیلم ها و سایر مطالب متوقف می شود. ممکن است بر عملکرد وب سایت تأثیر بگذارد.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">هنگام محافظت از رنگ بنفش ،%s در حال ردگیری ردیاب ها در این سایت است. روی آن ضربه بزنید تا ببینید چه چیزی مسدود شده است.</string>
<string name="etp_onboarding_cfr_message">هربار که سپر بنفش است%s ردگیرها را در یک سایت مسدود کرده است. برای دریافت اطلاعات بیشتر ضربه بزنید.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">محافظت برای این سایت فعال است</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
@ -1386,4 +1410,15 @@
<string name="voice_search_content_description">جستجوی صوتی</string>
<!-- Voice search prompt description displayed after the user presses the voice search button -->
<string name="voice_search_explainer">صحبت کنید</string>
<!-- Synced Tabs -->
<!-- Text displayed when user is not logged into a Firefox Account -->
<string name="synced_tabs_connect_to_sync_account">اتصال به حساب فایرفاکس.</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">اتصال به دستگاه دیگر.</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">لطفا مجددا تایید کنید.</string>
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
<string name="synced_tabs_enable_tab_syncing">لطفاً همگام سازی برگه را فعال کنید.</string>
</resources>

View File

@ -96,6 +96,8 @@
<string name="browser_menu_add_to_homescreen">Lisää aloitusnäytölle</string>
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">Asenna</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">Synkronoidut välilehdet</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">Etsi sivulta</string>
<!-- Browser menu button that creates a private tab -->
@ -104,8 +106,6 @@
<string name="browser_menu_new_tab">Uusi välilehti</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Tallenna kokoelmaan</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Ilmoita sivusto-ongelma</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Jaa</string>
@ -121,8 +121,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Mahdollistajana %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Lukunäkymä</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Sulje lukunäkymä</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Avaa sovelluksessa</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -296,6 +298,8 @@
<string name="preferences_sync_bookmarks">Kirjanmerkit</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">Kirjautumistiedot</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs">Välilehdet</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">Kirjaudu ulos</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -430,6 +434,8 @@
<string name="library_desktop_bookmarks_unfiled">Muut kirjanmerkit</string>
<!-- Option in Library to open History page -->
<string name="library_history">Historia</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">Synkronoidut välilehdet</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">Lukulista</string>
<!-- Menu Item Label for Search in Library -->
@ -450,6 +456,22 @@
<string name="tabs_header_private_tabs_title">Yksityiset välilehdet</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Lisää välilehti</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Lisää yksityinen välilehti</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Yksityinen</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Avoimet välilehdet</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Tallenna kokoelmaan</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Jaa kaikki välilehdet</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Sulje kaikki välilehdet</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Uusi välilehti</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Siirry kotiin</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Poista välilehti kokoelmasta</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -952,18 +974,13 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Sisäänkirjautuminen epäonnistui</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Suojaa itsesi</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s auttaa estämään verkkosivustoja seuraamasta sinua verkossa.</string>
<string name="onboarding_tracking_protection_header_2">Automaattinen yksityisyys</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Tavallinen</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Estää vähemmän seuraimia, mutta sallii sivujen latautumisen normaalisti</string>
<string name="onboarding_tracking_protection_standard_button_2">Tavallinen (oletus)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Tiukka (suositeltu)</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Estää enemmän seuraimia paremman suojauksen ja suorituskyvyn saavuttamiseksi, mutta saattaa aiheuttaa ongelmia joidenkin sivujen toimivuudessa</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Tiukka</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1051,31 +1068,17 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Lue lisää</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Tavallinen</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Tavallinen (suositeltu)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Tasapainoa suojauksen ja suorituskyvyn välillä.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Sivut latautuvat normaalisti, mutta vähemmän seuraimia estetään.</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Tavallinen (oletus)</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Mitä tavallinen seurannan suojaus estää</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Tiukka</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Tiukka (oletus)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Vahvempi seurannan suojaus ja nopeampi suorituskyky, mutta jotkin sivustot eivät välttämättä toimi kunnolla.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Tiukka (suositeltu)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Vahvempi suojaus, mutta jotkin sivustot tai sisällöt voivat rikkoutua.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Mitä tiukka seurannan suojaus estää</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Mukautettu</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Valitse, mitkä seuraimet ja komentosarjat estetään</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Valitse, mitkä seuraimet ja komentosarjat estetään.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Mitä mukautettu seurannan suojaus estää</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1124,8 +1127,6 @@
<string name="etp_tracking_content_title">Seurantaan tarkoitettu sisältö</string>
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Estää lataamasta ulkopuolisia mainoksia, videoita ja muuta sisältöä, joka sisältää seurantakoodin. Voi vaikuttaa joidenkin verkkosivustojen toimimiseen.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s estää seuraimia tällä sivustolla, kun kilpi on väriltään liila. Napauta kilpeä nähdäksesi mitä estetään.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Suojaukset ovat PÄÄLLÄ tällä sivustolla</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
@ -1412,4 +1413,14 @@
<!-- Voice search prompt description displayed after the user presses the voice search button -->
<string name="voice_search_explainer">Puhu nyt</string>
</resources>
<!-- Synced Tabs -->
<!-- Text displayed when user is not logged into a Firefox Account -->
<string name="synced_tabs_connect_to_sync_account">Yhdistä Firefox-tilillä.</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">Yhdistä toinen laite.</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">Tunnistaudu uudelleen.</string>
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
<string name="synced_tabs_enable_tab_syncing">Ota välilehtien synkronointi käyttöön.</string>
</resources>

View File

@ -105,8 +105,6 @@
<string name="browser_menu_new_tab">Nouvel onglet</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Enregistrer dans une collection</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Signaler un problème sur ce site</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Partager</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -122,8 +120,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Fonctionne grâce à %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Mode lecture</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Quitter le mode lecture</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Ouvrir dans une application</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -458,6 +458,24 @@
<string name="tabs_header_private_tabs_title">Onglets privés</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Ajouter un onglet</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Ouvrir un nouvel onglet privé</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Onglet privé</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Onglets ouverts</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Enregistrer dans une collection</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Partager tous les onglets</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Fermer tous les onglets</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nouvel onglet</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Accueil</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Changer de mode donglets</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Supprimer longlet de la collection</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -740,6 +758,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Enregistrer</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Afficher</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Collection %d</string>
@ -981,20 +1002,20 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Échec de connexion</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Protégez-vous</string>
<string name="onboarding_tracking_protection_header_2">Respect automatique de la vie privée</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s vous aide à empêcher les sites web de vous suivre en ligne.</string>
<string name="onboarding_tracking_protection_description_2">Les paramètres de confidentialité et de sécurité bloquent les traqueurs, les logiciels malveillants et les entreprises qui vous pistent.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standard</string>
<string name="onboarding_tracking_protection_standard_button_2">Standard (par défaut)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Bloque moins de traqueurs mais permet aux pages de se charger normalement</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Bloque moins de traqueurs. Les pages se chargent normalement.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Strict (recommandé)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Strict</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Bloque davantage de traqueurs pour une meilleure protection et de meilleures performances, mais peut empêcher certains sites de fonctionner correctement</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Bloque davantage de traqueurs, de publicités et de popups. Les pages se chargent plus rapidement, mais certaines fonctionnalités pourraient ne pas être opérantes.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1081,31 +1102,21 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">En savoir plus</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standard</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standard (recommandé)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standard (par défaut)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Équilibré entre la protection et la performance.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Les pages se chargeront normalement, mais bloqueront moins de traqueurs.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Bloque moins de traqueurs. Les pages se chargent normalement.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Ce qui est bloqué par la protection standard contre le pistage</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Stricte</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Stricte (par défaut)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Une protection renforcée contre le pistage et de meilleures performances, mais certains sites peuvent ne pas fonctionner correctement.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Stricte (recommandé)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Protection renforcée, mais certains sites ou contenus peuvent être endommagés.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Bloque davantage de traqueurs, de publicités et de popups. Les pages se chargent plus rapidement, mais certaines fonctionnalités pourraient ne pas être opérantes.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Ce qui est bloqué par la protection stricte contre le pistage</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Personnalisée</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Choisissez les traqueurs et les scripts à bloquer.</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Choisissez les traqueurs et les scripts à bloquer.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Ce qui est bloqué par la protection personnalisée contre le pistage</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1155,7 +1166,7 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Empêche le chargement des publicités, vidéos et autres contenus dorigine externe au site et contenant du code de pistage. Peut affecter certaines fonctionnalités du site.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s bloque des traqueurs sur ce site quand le bouclier est violet. Appuyez dessus pour voir lesquels.</string>
<string name="etp_onboarding_cfr_message">Quand le bouclier est violet, cest que %s a bloqué des traqueurs sur le site visité. Appuyez pour en savoir plus.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Les protections sont activées pour ce site</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -97,6 +97,8 @@
<string name="browser_menu_add_to_homescreen">Tafoegje oan startskerm</string>
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">Ynstallearje</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">Syngronisearre ljepblêden</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">Sykje op side</string>
<!-- Browser menu button that creates a private tab -->
@ -105,8 +107,6 @@
<string name="browser_menu_new_tab">Nij ljepblêd</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Yn kolleksje bewarje</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Websiteprobleem melde</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Diele</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -120,8 +120,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Mooglik makke troch %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Lêzerwerjefte</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Lêzerwerjefte slute</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Iepenje yn app</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -292,6 +294,8 @@
<string name="preferences_sync_bookmarks">Blêdwizers</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">Oanmeldingen</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs">Ljepblêden</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">Ofmelde</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -423,6 +427,8 @@
<string name="library_desktop_bookmarks_unfiled">Oare blêdwizers</string>
<!-- Option in Library to open History page -->
<string name="library_history">Skiednis</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">Syngronisearre ljepblêden</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">Lêslist</string>
<!-- Menu Item Label for Search in Library -->
@ -443,6 +449,24 @@
<string name="tabs_header_private_tabs_title">Priveeljepblêden</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Ljepblêd tafoegje</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Priveeljepblêd tafoegje</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Privee</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Iepen ljeplêden</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Yn kolleksje bewarje</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Alle ljepblêden diele</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Alle ljepblêden slute</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nij ljepblêd</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Nei startside</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Ljepblêdmodus wikselje</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Ljepblêd út kolleksje fuortsmite</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -706,6 +730,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Bewarje</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Werjaan</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Kolleksjes %d</string>
@ -936,18 +963,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Oanmelden mislearre</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Beskermje josels</string>
<string name="onboarding_tracking_protection_header_2">Automatyske privacy</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s helpt foar te kommen dat websites jo online folgje.</string>
<string name="onboarding_tracking_protection_description_2">Privacy- en befeiligingsynstellingen blokkearje trackers, malware en bedriuwen dy\'t jo folgje.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standert</string>
<string name="onboarding_tracking_protection_standard_button_2">Standert (standert)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Blokkearret minder trackers, mar stiet ta dat siden normaal laden wurde</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Blokkearret minder trackers. Siden wurde normaal laden.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Strang (oanrekommandearre)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Strang</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Blokkearret mear trackers foar bettere beskerming en prestaasjes, mar kin derfoar soargje dat guon websites net goed wurkje</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Blokkearret mear trackers, advertinsjes en pop-ups. Siden wurden flugger laden, mar guon funksjes wurkje mooglik net.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1036,31 +1065,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Mear ynfo</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standert</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standert (oanrekommandearre)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standert (standert)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Balansearre foar beskerming en prestaasjes.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Siden wurde normaal laden, mar der wurde minder trackers blokkearre.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Blokkearret minder trackers. Siden wurde normaal laden.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Wat wurdt blokkearre troch standert beskerming tsjin folgjen</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Strang</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Strang (standert)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Sterkere beskerming tsjin folgjen en fluggere prestaasjes, mar guon websites wurkje mooglik net goed.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Strang (oanrekommandearre)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Strangere beskerming, mar kin derfoar soargje dat guon websites of ynhâld net wurkje.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Blokkearret mear trackers, advertinsjes en pop-ups. Siden wurden flugger laden, mar guon funksjes wurkje mooglik net.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Wat wurdt blokkearre troch strange beskerming tsjin folgjen</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Oanpast</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Kies hokker trackers en scripts jo blokkearje wolle</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Kies hokker trackers en scripts jo blokkearje wolle.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Wat wurdt blokkearre troch oanpaste beskerming tsjin folgjen</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1111,7 +1130,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Foarkomt dat eksterne advertinsjes, fideos en oare ynhâld dy\'t folchkoade befettet laden wurde. Kin ynfloed hawwe op de funksjonaliteit fan guon websites.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s blokkearret trackers op dizze website as it skildsje pears is. Tik dêrop om te sjen wat er blokkearre is.</string>
<string name="etp_onboarding_cfr_message">Elke kear as it skyld pears is, hat %s trackers op in website blokkearre. Tik foar mear ynfo.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Beskermingen foar dizze website stean OAN</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
@ -1394,4 +1413,15 @@
<string name="voice_search_content_description">Sprutsen sykopdracht</string>
<!-- Voice search prompt description displayed after the user presses the voice search button -->
<string name="voice_search_explainer">No sprekke</string>
<!-- Synced Tabs -->
<!-- Text displayed when user is not logged into a Firefox Account -->
<string name="synced_tabs_connect_to_sync_account">Ferbine mei in Firefox-account.</string>
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">In oar apparaat ferbine.</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">Graach opnij autentisearje.</string>
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
<string name="synced_tabs_enable_tab_syncing">Skeakelje it syngronisearjen fan ljepblêden yn.</string>
</resources>

View File

@ -109,8 +109,6 @@
<string name="browser_menu_new_tab">Tendayke pyahu</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Eñongatu mbyatyhápe</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Emomarandu tenda jejavy</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Moherakuã</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -124,8 +122,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Omboguatáva %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Moñeẽrã rechaha</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Moñeẽrã rechahágui ñesẽ</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Embojuruja tembipurui</string>
@ -456,6 +456,24 @@
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Embojuaju tendayke</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Embojuaju tendayke ñemigua</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Ñemigua</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Embojuruja tendayke</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Eñongatu atyhápe</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Emoherakuã opaite tendayke</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Emboty opaite tendayke</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Tendayke pyahu</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Eho ñepyrũhápe</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Embojopyru tendayke ayvu</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Embogue tendayke mbyatypyregua</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -726,6 +744,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Ñongatu</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Hecha</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Ñembyatyha %d</string>
@ -961,20 +982,13 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Tembiapo ñepyrũ ojavy</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Eñemoãke ndetevoi</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s nepytyvõ emboyke hag̃ua ñanduti renda nde rapykuehóvo.</string>
<string name="onboarding_tracking_protection_header_2">Ñemigua ijeheguíva</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Ypykue</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Ojokoive tapykuehoha hákatu omoneĩ kuatiarogue henyhẽvo hekopete</string>
<string name="onboarding_tracking_protection_standard_button_2">Ypyguaite (ijypygua)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Mbaretépe (jeroviaháva)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Mbaretépe</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Ejokove tapykuehoha eñemoãve ha apopykuaave hag̃ua, hákatu ikatu avei oimeraẽva tenda nahenyhẽi hekopete</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1063,31 +1077,17 @@
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Kuaave</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Ypykue</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Ypykue (jeroviaháva)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Oñembojoja ñemoã ha apopykuaa.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Kuatiarogue henyhẽta tapiaguáicha, hákatu ojoko saivéta tapykuehohápe.</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Ypyguaite (ijypygua)</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Mbae umi ojokóva tapykuehoha moãha ypyguáva renondépe</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Mbaretépe</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Mbaretépe (Ijypykuéva)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Ñemoã tapykuehoha iporãvéva renondépe ha avei apopykuaave, háhatu ikatu heta tenda nombapoporãmoãi.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Mbaretépe (jeroviaháva)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Ñemoãve, hákatu ikatu ndahetái tenda térã tetepy nombaapovéi.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Mbae umi ojokóva tapykuehoha moãha imbaretéva</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Mombaepyre</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Eiporavo mbae tapykuehoha ha jehekaha ejokose.</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Eiporavo mbae tapykuehoha ha jehekaha ejokose.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Mbae umi ojokóva tapykuehoha moãha ñemombaepyre</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1138,8 +1138,6 @@
<string name="etp_tracking_content_title">Tapykueho retepy</string>
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Ejoko ñemurã ñemyanyhẽ okayguáva, taãngamýi ha tetepy oguerekóva ayvu rapykuehoha. Ikatu ombyai ñanduti renda rembiapoite.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Taãnga pytãũvo %s ojokohína tapykuehoha ko tendápe. Eiporavo ehecha hag̃ua mbaetépa ojoko.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Umi ñemoã oñemyandýma ko tendápe g̃uarã</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

View File

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- App name for private browsing mode, only the "Private" portion should be localized. -->
<string name="app_name_private_2">निजी Firefox पूर्वावलोकन</string>
<!-- App name for private browsing mode, only the "Private" portion should be localized. -->
<string name="app_name_private_3">Firefox Preview (निजी मोड)</string>
<!-- Home Fragment -->
<!-- Content description (not visible, for screen readers etc.): "Three dot" menu button. -->
<string name="content_description_menu">अधिक विकल्प</string>
@ -19,6 +15,9 @@
<!-- No Open Tabs Message Description -->
<string name="no_open_tabs_description">आपके खुले टैब यहां दिखाए जाएंगे।</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">%1$s को Mozilla द्वारा निर्मित किया गया है।</string>
<!-- Private Browsing -->
<!-- Title for private session option -->
<string name="private_browsing_title">आप निजी सत्र में हैं।</string>
@ -26,7 +25,7 @@
<!-- Delete session button to erase your history in a private session -->
<string name="private_browsing_delete_session">सत्र मिटाएं</string>
<!-- Private mode shortcut "contextual feature recommender" (CFR) -->
<!-- Private mode shortcut "contextual feature recommendation" (CFR) -->
<!-- Text for the main message -->
<string name="cfr_message">अपने होम स्क्रीन से निजी टैब खोलने के लिए एक शॉर्टकट जोड़ें।</string>
<!-- Text for the positive button -->
@ -34,6 +33,9 @@
<!-- Text for the negative button -->
<string name="cfr_neg_button_text">नहीं धन्यवाद</string>
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">अभी नहीं</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">नया टैब</string>
@ -85,8 +87,6 @@
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">संग्रहण में सहेजें</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">साइट समस्या की रिपोर्ट करें</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">साझा करें</string>
@ -102,7 +102,7 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">%1$s द्वारा संचालित</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">पाठक विचार</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">ऐप में खोलें</string>
@ -274,6 +274,8 @@
<string name="preferences_sync_bookmarks">बुकमार्क</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">लॉगिन</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs">टैब</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">साइन आउट करें</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -292,10 +294,11 @@
<string name="sync_last_synced_summary">पिछला सिंक: %s</string>
<!-- Label summary showing never synced -->
<string name="sync_never_synced_summary">पिछला सिंक: कभी नहीं हुआ</string>
<!-- Text for displaying the default device name.
The first parameter is the application name, the second is the device manufacturer name
and the third is the device model. -->
<string name="default_device_name">%s पर %s %s</string>
<string name="default_device_name_2">%2$s %3$s पर %1$s</string>
<!-- Send Tab -->
<!-- Name of the "receive tabs" notification channel. Displayed in the "App notifications" system settings for the app -->
@ -361,9 +364,6 @@
<!-- Preference for removing FxA account -->
<string name="preferences_sync_remove_account">खाता मिटायें</string>
<!-- Pairing Feature strings -->
<!-- Instructions on how to access pairing -->
<string name="pair_instructions"><![CDATA[अपने कंप्यूटर पर अपना QR कोड प्राप्त करने के लिए Firefox में <b> firefox.com/pair </ b> पर जाएं।]]></string>
<!-- Button to open camera for pairing -->
<string name="pair_open_camera">कैमरा खोले</string>
<!-- Button to cancel pairing -->
@ -409,8 +409,6 @@
<string name="library_reading_list">पठन सूची</string>
<!-- Menu Item Label for Search in Library -->
<string name="library_search">खोजें</string>
<!-- Library Page Title -->
<string name="library_title">लाइब्रे‌री</string>
<!-- Settings Page Title -->
<string name="settings_title">सेटिंग</string>
@ -428,6 +426,16 @@
<string name="tabs_header_private_tabs_title">निजी टैब</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">टैब जोड़ें</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">निजी टैब जोड़ें</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">सभी टैब साझा करें</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">सभी टैब बंद करें</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">नया टैब</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">मुख्य पृष्ठ पर जाएं</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
<string name="close_tab">टैब बंद करें</string>
@ -469,6 +477,10 @@
<string name="history_delete_all">इतिहास मिटाएं</string>
<!-- Text for the dialog to confirm clearing all history -->
<string name="history_delete_all_dialog">क्या आप वाकई अपना इतिहास मिटाना चाहते हैं?</string>
<!-- Text for the snackbar to confirm that multiple browsing history items has been deleted -->
<string name="history_delete_multiple_items_snackbar">इतिहास मिटा दिया गया</string>
<!-- Text for the snackbar to confirm that a single browsing history item has been deleted. The first parameter is the shortened URL of the deleted history item. -->
<string name="history_delete_single_item_snackbar">%1$s मिटाया गया</string>
<!-- Text for positive action to delete history in deleting history dialog -->
<string name="history_clear_dialog">साफ करें</string>
<!-- History overflow menu copy button -->
@ -523,6 +535,8 @@
<string name="bookmark_edit">बुकमार्क संपादित करें</string>
<!-- Screen title for selecting a bookmarks folder -->
<string name="bookmark_select_folder">फ़ोल्डर चुनें</string>
<!-- Snackbar title shown after a folder has been deleted. This first parameter is the name of the deleted folder -->
<string name="bookmark_delete_folder_snackbar">%1$s मिटाया गया</string>
<!-- Screen title for adding a bookmarks folder -->
<string name="bookmark_add_folder">फ़ोल्डर जोड़ें</string>
<!-- deprecated: Snackbar title shown after a bookmark has been created. -->
@ -576,9 +590,9 @@
<!-- Bookmark snackbar message on deletion
The first parameter is the host part of the URL of the bookmark deleted, if any -->
<string name="bookmark_deletion_snackbar_message">%1$s मिटाया गया</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
<string name="bookmark_deletion_multiple_snackbar_message">चयनित बुकमार्क मिटा रहे है</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
<string name="bookmark_deletion_multiple_snackbar_message_2">बुकमार्क मिटा दिए गए</string>
<!-- Bookmark undo button for deletion snackbar action -->
<string name="bookmark_undo_deletion">पूर्ववत करें</string>
@ -793,13 +807,10 @@
<!-- Title for Accessibility Text Size Scaling Preference -->
<string name="preference_accessibility_font_size_title">फ़ॉन्ट आकार</string>
<!-- Title for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size">स्वतः फ़ॉन्ट आकार</string>
<!-- Title for the Delete browsing data preference -->
<string name="preferences_delete_browsing_data">ब्राउज़िंग डेटा मिटाएं</string>
<!-- Title for the tabs item in Delete browsing data -->
<string name="preferences_delete_browsing_data_tabs_title">खुले टैब</string>
<string name="preferences_delete_browsing_data_tabs_title_2">टैब खोलें</string>
<!-- Subtitle for the tabs item in Delete browsing data, parameter will be replaced with the number of open tabs -->
<string name="preferences_delete_browsing_data_tabs_subtitle">%d टैब</string>
<!-- Title for the data and history items in Delete browsing data -->
@ -841,6 +852,12 @@
<!-- Text for the snackbar to show the user that the deletion of browsing data is in progress -->
<string name="deleting_browsing_data_in_progress">ब्राउज़िंग डेटा मिटा रहे हैं…</string>
<!-- Tips -->
<!-- text for firefox preview moving tip header "Firefox Preview" and "Firefox Nightly" are intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header">Firefox Preview अब Firefox Nightly है</string>
<!-- text for firefox preview moving tip button. "Mozilla Firefox Browser" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_button">Mozilla Firefox ब्राउज़र प्राप्त करें</string>
<!-- Onboarding -->
<!-- Text for onboarding welcome message
The first parameter is the name of the app (e.g. Firefox Preview) -->
@ -869,15 +886,6 @@
<string name="onboarding_firefox_account_sync_is_on">सिंक चालू है</string>
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">लॉगिन करने में असफल</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">अपनी रक्षा कीजिये</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s वेबसाइटों को आपको ऑनलाइन ट्रैक करने से रोकने में मदद करता है।</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">मानक</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">कुछ ट्रैकर्स को ब्लॉक करता है लेकिन पृष्ठों को अक्सर लोड करने की अनुमति देता है</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">सख़्त (अनुशंसित)</string>
<!-- text for the toolbar position card header
@ -898,6 +906,9 @@
<!-- Text for the button to read the privacy notice -->
<string name="onboarding_privacy_notice_read_button">हमारी गोपनीयता सूचना पढ़ें</string>
<!-- Content description (not visible, for screen readers etc.): Close onboarding screen -->
<string name="onboarding_close">बंद करें</string>
<!-- text for the button to finish onboarding -->
<string name="onboarding_finish">ब्राउजिंग शुरू करें</string>
@ -948,22 +959,10 @@
<string name="preference_enhanced_tracking_protection_explanation_title">पीछा किये बिना ब्राउज़ करें</string>
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">अधिक जानें</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">मानक</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">मानक (अनुशंसित)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">पृष्ठ सामान्यत लोड होंगे, लेकिन कुछ ट्रैकर्स को ब्लॉक करता हैं।</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">मानक ट्रैकिंग सुरक्षा द्वारा क्या ब्लॉक किया गया</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">सख़्त</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">सख़्त (डिफ़ॉल्ट)</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">सख़्त (अनुशंसित)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">मजबूत सुरक्षा, लेकिन कुछ साइटों या सामग्री को नष्ट करने का कारण हो सकता है।</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">सख्त ट्रैकिंग सुरक्षा द्वारा क्या ब्लॉक किया गया</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
@ -1064,6 +1063,8 @@
<string name="preferences_passwords_saved_logins_enter_pin">अपना PIN पुनः दर्ज करें</string>
<!-- Learn more link that will link to a page with more information displayed when a connection is insecure and we detect the user is entering a password -->
<string name="logins_insecure_connection_warning_learn_more">अधिक जानें</string>
<!-- Prompt message displayed when Fenix detects a user has entered a password and user decides if Fenix should save it. The first parameter is the name of the application (For example: Fenix) -->
<string name="logins_doorhanger_save">आप चाहते हैं कि %s इस लॉगिन को सहेजे?</string>
<!-- Positive confirmation that Fenix should save the new or updated login -->
<string name="logins_doorhanger_save_confirmation">सहेजें</string>
<!-- Negative confirmation that Fenix should not save the new or updated login -->
@ -1135,6 +1136,8 @@
<!--Text on list of migrated items (e.g. Settings, History, etc.)-->
<string name="migration_text_passwords">पासवर्ड</string>
<!-- Heading for the instructions to allow a permission -->
<string name="phone_feature_blocked_intro">इसे अनुमति देने के लिए:</string>
<!-- First step for the allowing a permission -->
<string name="phone_feature_blocked_step_settings">1. Android सेटिंग में जाएं</string>
@ -1155,8 +1158,14 @@
<string name="bookmark_deletion_confirmation">क्या आप वाकई इस बुकमार्क को हटाना चाहते हैं?</string>
<!-- Login overflow menu delete button -->
<string name="login_menu_delete_button">हटाएं</string>
<!-- Login overflow menu edit button -->
<string name="login_menu_edit_button">संपादित करें</string>
<!-- Message in delete confirmation dialog for logins -->
<string name="login_deletion_confirmation">क्या आप वाकई इस लॉगिन को हटाना चाहते हैं?</string>
<!-- Positive action of a dialog asking to delete -->
<string name="dialog_delete_positive">हटाएं</string>
</resources>
<!-- The page title for editing a saved login. -->
<string name="edit">संपादित करें</string>
</resources>

View File

@ -106,8 +106,6 @@
<string name="browser_menu_new_tab">Nowy rajtark</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection_2">Do zběrki składować</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Sydłowy problem zdźělić</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Dźělić</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -121,8 +119,10 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Spěchowany wot %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">Čitanski napohlad</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Čitanski napohlad začinić</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">W nałoženju wočinić</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
@ -450,6 +450,24 @@
<string name="tabs_header_private_tabs_title">Priwatne rajtarki</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Rajtark přidać</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Priwatny rajtark přidać</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Priwatny</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Wočinjene rajtarki</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Do zběrki składować</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Wšě rajtarki dźělić</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Wšě rajtarki začinić</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Nowy rajtark</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">K startowej wobrazowce</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Rejtarkowy modus přepinać</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Rajtark ze zběrki wotstronić</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
@ -715,6 +733,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Składować</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Pokazać</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Zběrka %d</string>
@ -945,20 +966,20 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Přizjewjenje njeje so poradźiło</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Škitajće so</string>
<string name="onboarding_tracking_protection_header_2">Awtomatiska priwatnosć</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">%s tomu zadźěwa, zo websydła wam online slěduja.</string>
<string name="onboarding_tracking_protection_description_2">Nastajenja priwatnosće a wěstoty přesćěhowaki, škódnu softwaru a předewzaća blokuja, kotrež wam slěduja.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Standard</string>
<string name="onboarding_tracking_protection_standard_button_2">Standard</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Blokuje mjenje přesćěhowakow, ale zmóžnja stronam so normalnje začitać</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Blokuje mjenje přesćěhowakow. Strony so normalnje začitaja.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Striktny (doporučeny)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Striktny</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Blokuje wjace přesćěhowakow za lěpši škit a wukon, ale móže zawinować, zo někotre sydła prawje njefunguja</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Blokuje wjace přesćěhowakow, wabjenja a wuskakowacych woknow. Strony so spěšnišo začitaja, ale někotre funkcije snano njefunguja.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -1046,31 +1067,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Dalše informacije</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Standard</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Standard (doporučeny)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Standard</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Wuwaženy za škit a wukon.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Strony so normalnje začitaja, ale blokuje so mjenje přesćěhowakow.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Blokuje mjenje přesćěhowakow. Strony so normalnje začitaja.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Što so přez standardny slědowanski škit blokuje?</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Striktny</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Striktny (standard)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Sylniši slědowanski škit a spěšniši wukon, ale někotre sydła snano porjadnje njefunguja.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Striktny (doporučeny)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Mócniši škit, ale móže zawinować, zo někotre sydła abo wobsa hižo njefunguja.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Blokuje wjace přesćěhowakow, wabjenja a wuskakowacych woknow. Strony so spěšnišo začitaja, ale někotre funkcije snano njefunguja.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Što so přez striktny slědowanski škit blokuje?</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Swójski</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Wubjerće, kotre přesćěhowaki a skripty maja so blokować</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Wubjerće, kotre přesćěhowaki a skripty maja so blokować.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Što so přez swójski slědowanski škit blokuje?</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1120,7 +1131,7 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Zadźěwa začitanju wabjenja, widejow a druheho wobsaha, kotrež slědowanski kod wobsahuja. Móže někotrym funkcijam websydłow wadźić.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">%s přesćěhowaki na tutym sydle blokuje, hdyž tarč je wioletna. Podótkńće so toho, zo byšće widźał, što so blokuje.</string>
<string name="etp_onboarding_cfr_message">Kóždy raz, hdyž tarč je wioletna, je %s přesćěhowaki na sydle zablokował. Podótkńće za dalše informacije.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Škit je zmóžnjeny za tute sydło</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->

Some files were not shown because too many files have changed in this diff Show More