<?xml version="1.0" ?>
<!DOCTYPE translationbundle>
<translationbundle lang="en-GB">
<translation id="101438888985615157">Rotate screen by 180 degrees</translation>
<translation id="1016912092715201525">Configures the default browser checks in <ph name="PRODUCT_NAME" /> and prevents users from changing them.

      If you enable this setting, <ph name="PRODUCT_NAME" /> will always check on start-up whether it is the default browser and automatically register itself if possible.

      If this setting is disabled, <ph name="PRODUCT_NAME" /> will never check if it is the default browser and will disable user controls for setting this option.

      If this setting is not set, <ph name="PRODUCT_NAME" /> will allow the user to control whether it is the default browser and whether user notifications should be shown when it isn't.

      Note for administrators of <ph name="MS_WIN_NAME" />: Enabling this setting will only work for machines running Windows 7. For versions of Windows starting with Windows 8, you must deploy a 'default application associations' file that makes <ph name="PRODUCT_NAME" /> the handler for the <ph name="HHTPS_PROTOCOL" /> and <ph name="HTTP_PROTOCOL" /> protocols (and, optionally, the <ph name="FTP_PROTOCOL" /> protocol and file formats such as <ph name="HTML_EXTENSION" />, <ph name="HTM_EXTENSION" />, <ph name="PDF_EXTENSION" />, <ph name="SVG_EXTENSION" />, <ph name="WEBP_EXTENSION" />, etc…). See <ph name="SUPPORT_URL" /> for more information.</translation>
<translation id="1017967144265860778">Power management on the login screen</translation>
<translation id="1019101089073227242">Set user data directory</translation>
<translation id="1022361784792428773">Extension IDs the user should be prevented from installing (or * for all)</translation>
<translation id="102492767056134033">Set default state of the on-screen keyboard on the login screen</translation>
<translation id="1027000705181149370">Specifies whether authentication cookies set by a SAML IdP during login should be transferred to the user's profile.

      When a user authenticates via a SAML IdP during login, cookies set by the IdP are written to a temporary profile at first. These cookies can be transferred to the user's profile to carry forward the authentication state.

      When this policy is set to true, cookies set by the IdP are transferred to the user's profile every time they authenticate against the SAML IdP during login.

      When this policy is set to false or unset, cookies set by the IdP are transferred to the user's profile during their first login on a device only.

      This policy affects users whose domain matches the device's enrolment domain only. For all other users, cookies set by the IdP are transferred to the user's profile during their first login on the device only.</translation>
<translation id="1030120600562044329">Enables anonymous reporting of usage and crash-related data about <ph name="PRODUCT_NAME" /> to Google, and prevents users from changing this setting.

      If this setting is enabled, anonymous reporting of usage and crash-related
      data is sent to Google.  If it is disabled, this information is not sent
      to Google.  In both cases, users cannot change or override the setting.
      If this policy is left not set, the setting will be what the user chose
      upon installation/first run.

      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.
      (For Chrome OS, see DeviceMetricsReportingEnabled.)</translation>
<translation id="1035385378988781231">This policy controls whether the Network File Shares feature for <ph name="PRODUCT_NAME" /> will use NTLM for authentication.

      When this policy is set to True, NTLM will be used for authentication to SMB shares if necessary.
      When this policy is set to False, NTLM authentication to SMB shares will be disabled.

      If the policy is left not set, the default is disabled for enterprise-managed users and enabled for non-managed users.</translation>
<translation id="1040446814317236570">Enable PAC URL stripping (for https://)</translation>
<translation id="1044878202534415707">Report hardware statistics such as CPU/RAM usage.

      If the policy is set to false, the statistics will not be reported.
      If set to true or left unset, statistics will be reported.</translation>
<translation id="1046484220783400299">Enable deprecated web platform features for a limited time</translation>
<translation id="1047128214168693844">Do not allow any site to track the users' physical location</translation>
<translation id="1049138910114524876">Configures the locale which is enforced on the <ph name="PRODUCT_OS_NAME" /> sign-in screen.

      If this policy is set, the sign-in screen will always be displayed in the locale which is given by the first value of this policy (the policy is defined as a list for forward compatibility).  If this policy is not set or is set to an empty list, the sign-in screen will be displayed in the locale of the last user session.  If this policy is set to a value which is not a valid locale, the sign-in screen will be displayed in a fallback locale (currently, en-US).</translation>
<translation id="1062011392452772310">Enable remote attestation for the device</translation>
<translation id="1062407476771304334">Replace</translation>
<translation id="1079801999187584280">Disallow usage of the Developer Tools</translation>
<translation id="1093082332347834239">If this setting is enabled, the remote assistance host will be run in a process with <ph name="UIACCESS_PERMISSION_NAME" /> permissions. This will allow remote users to interact with elevated windows on the local user's desktop.

          If this setting is disabled or not configured, the remote assistance host will run in the user's context and remote users cannot interact with elevated windows on the desktop.</translation>
<translation id="1096105751829466145">Default search provider</translation>
<translation id="1099282607296956954">Enable Site Isolation for every site</translation>
<translation id="1100570158310952027">
      The policy specifies a list of origins (URLs) or hostname patterns (such
      as '*.example.com') for which security restrictions on insecure origins
      will not apply.

      The intent is to allow organisations to set whitelist origins for legacy
      applications that cannot deploy TLS, or to set up a staging server for
      internal web development so that their developers can test out features
      requiring secure contexts without having to deploy TLS on the staging
      server. This policy will also prevent the origin from being labelled
      'Not Secure' in the omnibox.

      Setting a list of URLs in this policy has the same effect as setting the
      command-line flag '--unsafely-treat-insecure-origin-as-secure' to a
      comma-separated list of the same URLs. If the policy is set, it will
      override the command-line flag.

      This policy will override UnsafelyTreatInsecureOriginAsSecure, if present.

      For more information on secure contexts, see
      https://www.w3.org/TR/secure-contexts/.
      </translation>
<translation id="1107764601871839136">Specifies the lifetime (in hours) of the Group Policy Object (GPO) cache. Instead of re-downloading GPOs on every policy fetch, the system may reuse cached GPOs as long as their version does not change. This policy specifies the maximum duration for which cached GPOs may be reused before they are re-downloaded. Rebooting and logging out clears the cache.

      If the policy is unset, cached GPOs may be reused for up to 25 hours.

      If the policy is set to 0, GPO caching is turned off. Note that this increases server load since GPOs are re-downloaded on every policy fetch, even if they did not change.</translation>
<translation id="1117535567637097036">The protocol handlers set via this policy are not used when handling Android intents.</translation>
<translation id="1118093128235245168">Allow sites to ask the user to grant access to a connected USB device</translation>
<translation id="1128903365609589950">Configures the directory that <ph name="PRODUCT_NAME" /> will use for storing cached files on the disk.

      If you set this policy, <ph name="PRODUCT_NAME" /> will use the provided directory regardless of whether the user has specified the '--disk-cache-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a volume's root directory or to a directory used for other purposes, because <ph name="PRODUCT_NAME" /> manages its contents.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default cache directory will be used and the user will be able to override it with the '--disk-cache-dir' command line flag.</translation>
<translation id="113521240853905588">Configures the languages that can be used as the preferred languages by <ph name="PRODUCT_OS_NAME" />.

      If this policy is set, the user can only add one of the languages listed in this policy to the list of preferred languages. If this policy is not set or set to an empty list, user can specify any languages as preferred. If this policy is set to a list with invalid values, all invalid values will be ignored. If a user previously added some languages that are not allowed by this policy, to the list of preferred languages, they will be removed. If the user had previously configured <ph name="PRODUCT_OS_NAME" /> to be displayed in one of the languages not allowed by this policy, the display language will be switched to an allowed UI language next time the user signs in. Otherwise, <ph name="PRODUCT_OS_NAME" /> will switch to the first valid value specified by this policy, or to a fallback locale (currently en-US), if this policy only contains invalid entries.</translation>
<translation id="1135264353752122851">Configures which keyboard layouts are allowed for <ph name="PRODUCT_OS_NAME" /> user sessions.

      If this policy is set, the user can only select one of the input methods specified by this policy. If this policy is not set or set to an empty list, the user can select all supported input methods. If the current input method is not allowed by this policy, the input method will be switched to the hardware keyboard layout (if allowed) or the first valid entry in this list. All invalid or unsupported input methods in this list will be ignored.</translation>
<translation id="1138294736309071213">This policy is active in retail mode only.

      Determines the duration before the screen saver is shown on the sign-in screen for devices in retail mode.

      The policy value should be specified in milliseconds.</translation>
<translation id="1151353063931113432">Allow images on these sites</translation>
<translation id="1152117524387175066">Report the state of the device's dev switch at boot.

      If the policy is set to false, the state of the dev switch will not be reported.</translation>
<translation id="1160479894929412407">Allow QUIC protocol</translation>
<translation id="1160939557934457296">Disable proceeding from the Safe Browsing warning page</translation>
<translation id="1189817621108632689">Allows you to set a list of URL patterns that specify sites which are not allowed to display images.

          If this policy is left not set, the global default value will be used for all sites, either from the 'DefaultImagesSetting' policy if it is set, or from the user's personal configuration. 

          Note: This policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.</translation>
<translation id="1198465924256827162">How frequently device status uploads are sent, in milliseconds.

      If this policy is unset, the default frequency is 3 hours. The minimum
      allowed frequency is 60 seconds.</translation>
<translation id="1204263402976895730">Enabled enterprise printers</translation>
<translation id="1219695476179627719">Specifies whether the device should roll back to the version set by <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> if it's already running a later version.

      Default is RollbackDisabled.</translation>
<translation id="1221359380862872747">Load specified URLs on demo login</translation>
<translation id="1223789468190631420">Safe Browsing enable state for trusted sources</translation>
<translation id="122899932962115297">A whitelist controlling which quick unlock modes the user can configure and use to unlock the lock screen.

          This value is a list of strings; valid list entries are: 'all', 'PIN', 'FINGERPRINT'. Adding 'all' to the list means that every quick unlock mode is available to the user, including ones implemented in the future. Otherwise, only the quick unlock modes present in the list will be available.

          For example, to allow every quick unlock mode, use ['all']. To allow only PIN unlock, use ['PIN']. To allow PIN and fingerprint, use ['PIN', 'FINGERPRINT']. To disable all quick unlock modes, use [].

          By default, no quick unlock modes are available for managed devices.</translation>
<translation id="123081309365616809">Enable casting content to the device</translation>
<translation id="1231349879329465225">Allows enabling or disabling Fast Transition.
      This applies to all users, and to all interfaces on the device.
      In order for Fast Transition to be used, both this setting and the per-network ONC property need to be enabled.
      Once set, Fast Transition persists until the policy is changed to disable it.

      If this policy is not set or set to false, Fast Transition is not used.
      If set to true, Fast Transition is used when the wireless access point supports it.</translation>
<translation id="1243570869342663665">Control SafeSites adult content filtering.</translation>
<translation id="1257550411839719984">Set default download directory</translation>
<translation id="1265053460044691532">Limit the time for which a user authenticated via SAML can log in offline</translation>
<translation id="1291880496936992484">Warning: RC4 will be completely removed from <ph name="PRODUCT_NAME" /> after version 52 (around September 2016) and this policy will stop working then.

      If the policy is not set, or is set to false, then RC4 cipher suites in TLS will not be enabled. Otherwise it may be set to true to retain compatibility with an outdated server. This is a stopgap measure and the server should be reconfigured.</translation>
<translation id="1297182715641689552">Use a .pac proxy script</translation>
<translation id="1304973015437969093">Extension/App IDs and update URLs to be silently installed</translation>
<translation id="1307415922184340052">Send username and filename to native printers server with every print job. The default is not to send.</translation>
<translation id="1307454923744766368">Origins or hostname patterns for which restrictions on
      insecure origins should not apply</translation>
<translation id="1313457536529613143">Specifies the percentage by which the screen dim delay is scaled when user activity is observed while the screen is dimmed or soon after the screen has been turned off.

          If this policy is set, it specifies the percentage by which the screen dim delay is scaled when user activity is observed while the screen is dimmed or soon after the screen has been turned off. When the dim delay is scaled, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.

          If this policy is unset, a default scale factor is used.

          The scale factor must be 100% or more.</translation>
<translation id="131353325527891113">Show usernames on login screen</translation>
<translation id="1327466551276625742">Enable network configuration prompt when offline</translation>
<translation id="1330145147221172764">Enable on-screen keyboard</translation>
<translation id="13356285923490863">Policy Name</translation>
<translation id="1352174694615491349">This policy allows HTTP/2 connection coalescing when client certificates are in use. In order to coalesce, both the hostname of the potential new connection and the hostname of an existing connection must match one or more patterns described by this policy. The policy is a list of hosts using the URLBlacklist filter format: 'example.com' matches 'example.com' and all subdomains (e.g. 'sub.example.com'), while '.example.net' matches exactly 'example.net'.

      Coalescing requests to different hosts over connections that use client certificates can create security and privacy issues, as the ambient authority will be conveyed to all requests, even if the user did not explicitly authorise this. This policy is temporary and will be removed in a future release. See https://crbug.com/855690.

      If this policy is left unset, then the default behaviour of not allowing any HTTP/2 connection coalescing on connections using client certificates will be used.</translation>
<translation id="1353966721814789986">Startup pages:</translation>
<translation id="1354424209129232709">Maximum:</translation>
<translation id="1359553908012294236">If this policy is set to true or not configured, <ph name="PRODUCT_NAME" /> will enable guest logins. Guest logins are <ph name="PRODUCT_NAME" /> profiles where all windows are in incognito mode.

      If this policy is set to false, <ph name="PRODUCT_NAME" /> will not allow guest profiles to be started.</translation>
<translation id="1363275621236827384">Enable queries to Quirks Server for hardware profiles</translation>
<translation id="1384459581748403878">Reference: <ph name="REFERENCE_URL" /></translation>
<translation id="1387596372902085462">Whether to enable trust in Symantec Corporation's Legacy PKI Infrastructure</translation>
<translation id="1393485621820363363">Enabled enterprise device printers</translation>
<translation id="1397855852561539316">Default search provider suggest URL</translation>
<translation id="1413936351612032792">Report information about usage of Linux apps</translation>
<translation id="142346659686073702">Allow unaffiliated users to use Crostini</translation>
<translation id="1426410128494586442">Yes</translation>
<translation id="1427655258943162134">Address or URL of proxy server</translation>
<translation id="1431272318313028342">Enables <ph name="PRODUCT_NAME" />'s Safe Browsing feature and prevents users from changing this setting.

      If you enable this setting, Safe Browsing is always active.

      If you disable this setting, Safe Browsing is never active.

      If you enable or disable this setting, users cannot change or override the 'Enable phishing and malware protection' setting in <ph name="PRODUCT_NAME" />.

      If this policy is left not set, this will be enabled but the user will be able to change it.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.

      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="1435659902881071157">Device-level network configuration</translation>
<translation id="1438739959477268107">Default key generation setting</translation>
<translation id="1454846751303307294">Allows you to set a list of url patterns that specify sites which are not allowed to run JavaScript.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultJavaScriptSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" /> clients):</translation>
<translation id="1464848559468748897">Control the user behaviour in a multi-profile session on <ph name="PRODUCT_OS_NAME" /> devices.

      If this policy is set to 'Multi-ProfileUserBehaviourUnrestricted', the user can be either the primary or secondary user in a multi-profile session.

      If this policy is set to 'Multi-ProfileUserBehaviourMustBePrimary', the user can only be the primary user in a multi-profile session.

      If this policy is set to 'Multi-ProfileUserBehaviourNotAllowed', the user cannot be part of a multi-profile session.

      If you set this setting, users cannot change or override it.

      If the setting is changed while the user is signed into a multi-profile session, all users in the session will be checked against their corresponding settings. The session will be closed if any one of the users is no longer allowed to be in the session.

      If the policy is left not set, the default value 'Multi-ProfileUserBehaviourMustBePrimary' applies for enterprise-managed users and 'Multi-ProfileUserBehaviourUnrestricted' will be used for non-managed users.</translation>
<translation id="1465619815762735808">Click to play</translation>
<translation id="1468307069016535757">Set the default state of the high contrast mode accessibility feature on the login screen.

          If this policy is set to true, high contrast mode will be enabled when the login screen is shown.

          If this policy is set to false, high contrast mode will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling high contrast mode. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, high contrast mode is disabled when the login screen is first shown. Users can enable or disable high contrast mode at any time and its status on the login screen is persisted between users.</translation>
<translation id="1468707346106619889">If this policy is set to true, Unified Desktop is allowed and
      enabled by default, which allows applications to span multiple displays.
      The user may disable Unified Desktop for individual displays by unticking
      it in the display settings.

      If this policy is set to false or unset, Unified Desktop will be
      disabled. In this case, the user cannot enable the feature.</translation>
<translation id="1474273443907024088">Disable TLS False Start</translation>
<translation id="1477934438414550161">TLS 1.2</translation>
<translation id="1484146587843605071"><ph name="PRODUCT_NAME" /> will bypass any proxy for the list of hosts given here.

          This policy only takes effect if you have selected manual proxy settings at 'Choose how to specify proxy server settings'.

          You should leave this policy unset if you have selected any other mode for setting proxy policies.

          For more detailed examples, visit:
          <ph name="PROXY_HELP_URL" />.</translation>
<translation id="1502843533062797703">Enable third-party software injection blocking</translation>
<translation id="1504431521196476721">Remote Attestation</translation>
<translation id="1507957856411744193">If this policy is set to true, <ph name="PRODUCT_NAME" /> will connect to Cast devices on all IP addresses, not just RFC1918/RFC4193 private addresses.

          If this policy is set to false, <ph name="PRODUCT_NAME" /> will connect to Cast devices on RFC1918/RFC4193 private addresses only.

          If this policy is not set, <ph name="PRODUCT_NAME" /> will connect to Cast devices on RFC1918/RFC4193 private addresses only, unless the CastAllowAllIPs feature is enabled.

          If the policy 'EnableMediaRouter' is set to false, then this policy's value would have no effect.</translation>
<translation id="1509692106376861764">This policy has been retired as of <ph name="PRODUCT_NAME" /> version 29.</translation>
<translation id="1514888685242892912">Enable <ph name="PRODUCT_NAME" /></translation>
<translation id="1522425503138261032">Allow sites to track the users' physical location</translation>
<translation id="1523774894176285446">Alternative browser to launch for configured websites.</translation>
<translation id="152657506688053119">List of alternative URLs for the default search provider</translation>
<translation id="1530812829012954197">Always render the following URL patterns in the host browser</translation>
<translation id="1541170838458414064">Restrict printing page size</translation>
<translation id="1553684822621013552">When this policy is set to true, ARC will be enabled for the user
      (subject to additional policy settings checks – ARC will still be
      unavailable if either ephemeral mode or multiple sign-in is enabled
      in the current user session).

      If this setting is disabled or not configured then enterprise users are
      unable to use ARC.</translation>
<translation id="1559980755219453326">This policy controls whether to report extensions and plug-in information.

      When this policy is left unset or set to True, extension and plug-in data are gathered.
      When this policy is set to False, extensions and plug-in data are not gathered.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="1561424797596341174">Policy overrides for Debug builds of the remote access host</translation>
<translation id="1561967320164410511">U2F plus extensions for individual attestation</translation>
<translation id="1574554504290354326">This setting is deprecated – use SafeBrowsingExtendedReportingEnabled instead. Enabling or disabling SafeBrowsingExtendedReportingEnabled is equivalent to setting SafeBrowsingExtendedReportingOptInAllowed to False.

      Setting this policy to false stops users from choosing to send some system information and page content to Google servers. If this setting is true or not configured, then users will be allowed to send some system information and page content to Safe Browsing to help detect dangerous apps and sites.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.</translation>
<translation id="1583248206450240930">Use <ph name="PRODUCT_FRAME_NAME" /> by default</translation>
<translation id="1599424828227887013">Enable Site Isolation for specified origins on Android devices</translation>
<translation id="1608755754295374538">URLs that will be granted access to audio capture devices without prompt</translation>
<translation id="1615221548356595305">Allow coalescing of HTTP/2 connections for these hosts even when client certificates are used</translation>
<translation id="1617235075406854669">Enable deleting browser and download history</translation>
<translation id="163200210584085447">Patterns in this list will be matched against the security
      origin of the requesting URL.  If a match is found, access to video
      capture devices will be granted on SAML login pages.  If no match is
      found, access will be automatically denied.  Wildcard patterns are not
      allowed.</translation>
<translation id="1634989431648355062">Allow the <ph name="FLASH_PLUGIN_NAME" /> plug-in on these sites</translation>
<translation id="1655229863189977773">Set disk cache size in bytes</translation>
<translation id="166427968280387991">Proxy server</translation>
<translation id="1668836044817793277">Whether to allow the auto launched with zero delay kiosk app to control <ph name="PRODUCT_OS_NAME" /> version.

      This policy controls whether to allow the auto launched with zero delay kiosk app to control <ph name="PRODUCT_OS_NAME" /> version by declaring a required_platform_version in its manifest and use it as the auto update target version prefix.

      If the policy is set to true, the value of required_platform_version manifest key of the auto launched with zero delay kiosk app is used as auto update target version prefix.

      If the policy is not configured or set to false, the required_platform_version manifest key is ignored and auto update proceeds as normal.

      Warning: It is not recommended to delegate control of the <ph name="PRODUCT_OS_NAME" /> version to a kiosk app as it may prevent the device from receiving software updates and critical security fixes. Delegating control of the <ph name="PRODUCT_OS_NAME" /> version might leave users at risk.</translation>
<translation id="1675002386741412210">Supported on:</translation>
<translation id="1689963000958717134">Allows pushing network configuration to be applied for all users of a <ph name="PRODUCT_OS_NAME" /> device. The network configuration is a JSON-formatted string as defined by the Open Network Configuration format described at <ph name="ONC_SPEC_URL" /></translation>
<translation id="1708496595873025510">Set the restriction on the fetching of the Variations seed</translation>
<translation id="1717817358640580294">If unset, should Chrome Clean-Up detect unwanted software, it may report metadata about the scan to Google, in accordance with policy set by SafeBrowsingExtendedReportingEnabled. Chrome Clean-Up will then ask the user if they wish to clean up the unwanted software. The user can choose to share results of the clean up with Google to assist with future unwanted software detection. These results contain file metadata, automatically installed extensions and registry keys as described by the Chrome Privacy Whitepaper.

      If disabled, should Chrome Clean-Up detect unwanted software, it will not report metadata about the scan to Google, overriding any policy set by SafeBrowsingExtendedReportingEnabled. Chrome Clean-Up will ask the user if they wish to clean up the unwanted software.  Results of the clean up will not be reported to Google and the user will not have the option to do so.

      If enabled, should Chrome Clean-Up detect unwanted software, it may report metadata about the scan to Google, in accordance with policy set by SafeBrowsingExtendedReportingEnabled. Chrome Clean-Up will ask the user if they wish to clean up the unwanted software.  Results of the clean up will be reported to Google and the user will not have the option to prevent it.

      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="172374442286684480">Allow all sites to set local data.</translation>
<translation id="1734716591049455502">Configure remote access options</translation>
<translation id="1736269219679256369">Allow proceeding from the SSL warning page</translation>
<translation id="1745780278307622857">Identify if <ph name="PRODUCT_NAME" /> can allow download without Safe Browsing checks when it's from a trusted source.

      When False, downloaded files will not be sent to be analysed by Safe Browsing when it's from a trusted source.

      When not set (or set to True), downloaded files are sent to be analysed by Safe Browsing, even when it's from a trusted source.

      Note that these restrictions apply to downloads triggered from web page content, as well as the 'download link…' context menu option. These restrictions do not apply to the save/download of the currently displayed page, nor does it apply to saving as PDF from the printing options.

      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="1749815929501097806">Sets the Terms of Service that the user must accept before starting a device-local account session.

      If this policy is set, <ph name="PRODUCT_OS_NAME" /> will download the Terms of Service and present them to the user whenever a device-local account session is starting. The user will only be allowed into the session after accepting the Terms of Service.

      If this policy is not set, no Terms of Service are shown.

      The policy should be set to a URL from which <ph name="PRODUCT_OS_NAME" /> can download the Terms of Service. The Terms of Service must be plain text, served as MIME type text/plain. No markup is allowed.</translation>
<translation id="1750315445671978749">Block all downloads</translation>
<translation id="1781356041596378058">This policy also controls access to Android Developer Options. If you set this policy to true, users cannot access Developer Options. If you set this policy to false or leave it unset, users can access Developer Options by tapping seven times on the build number in the Android settings app.</translation>
<translation id="1797233582739332495">Show a recurring prompt to the user indicating that a relaunch is required</translation>
<translation id="1798559516913615713">GPO cache lifetime</translation>
<translation id="1803646570632580723">List of pinned apps to show in the launcher</translation>
<translation id="1808715480127969042">Block cookies on these sites</translation>
<translation id="1810261428246410396">Allow Instant Tethering to be used.</translation>
<translation id="1817685358399181673">This policy specifies the <ph name="PLUGIN_VM_NAME" /> image for a user. The policy is set by specifying the URL from which the device can download the image and a SHA-256 hash used to verify the integrity of the download.

      The policy should be specified as a string that expresses the URL and hash in the JSON format.</translation>
<translation id="1827523283178827583">Use fixed proxy servers</translation>
<translation id="1831495419375964631">This policy is a URL that points to an XML file in the same format as Internet Explorer's <ph name="IEEM_SITELIST_POLICY" /> policy. This loads rules from an XML file, without sharing those rules with Internet Explorer.

      When this policy is left unset, or not set to a valid URL, <ph name="PRODUCT_NAME" /> does not use it as a source of rules for switching browsers.

      When this policy is set to a valid URL, <ph name="PRODUCT_NAME" /> downloads the site list from that URL, and applies the rules as if they had been configured with the <ph name="SITELIST_POLICY_NAME" /> policy.

      For more information on Internet Explorer's <ph name="IEEM_SITELIST_POLICY" /> policy: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
<translation id="1839060937202387559">Report hardware statistics and identifiers for storage devices.

      If the policy is set to false, the statistics will not be reported.
      If set to true or left unset, statistics will be reported.</translation>
<translation id="1843117931376765605">Refresh rate for user policy</translation>
<translation id="1844620919405873871">Configures quick unlock related policies.</translation>
<translation id="1847960418907100918">Specifies the parameters used when doing instant search with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {searchTerms} in above example, it will be replaced with real search terms data.

          This policy is optional. If not set, instant search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="1852294065645015766">Allow media auto-play</translation>
<translation id="1859859319036806634">Warning: The TLS version fallback will be removed from <ph name="PRODUCT_NAME" /> after version 52 (around September 2016) and this policy will stop working then.

      When a TLS handshake fails, <ph name="PRODUCT_NAME" /> would previously retry the connection with a lesser version of TLS in order to work around bugs in HTTPS servers. This setting configures the version at which this fallback process will stop. If a server performs version negotiation correctly (i.e. without breaking the connection) then this setting doesn't apply. Regardless, the resulting connection must still comply with SSLVersionMin.

      If this policy is not configured or if it is set to "tls1.2" then <ph name="PRODUCT_NAME" /> no longer performs this fallback. Note that this does not disable support for older TLS versions, only whether <ph name="PRODUCT_NAME" /> will work around buggy servers which cannot negotiate versions correctly.

      Otherwise, if compatibility with a buggy server must be maintained, this policy may be set to "tls1.1". This is a stopgap measure and the server should be rapidly fixed.</translation>
<translation id="1864269674877167562">If this policy is set to a blank string or not configured, <ph name="PRODUCT_OS_NAME" /> will not show an auto-complete option during user sign-in flow.
      If this policy is set to a string representing a domain name, <ph name="PRODUCT_OS_NAME" /> will show an auto-complete option during user sign-in allowing the user to type in only their user name without the domain name extension. The user will be able to overwrite this domain name extension.</translation>
<translation id="1864382791685519617">Enables network prediction in <ph name="PRODUCT_NAME" /> and prevents users from changing this setting.

      This controls DNS pre-fetching, TCP and SSL pre-connection and pre-rendering of web pages.

      If you set this policy, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

      If this policy is left not set, network prediction will be enabled but the user will be able to change it.</translation>
<translation id="1865417998205858223">Key Permissions</translation>
<translation id="186719019195685253">Action to take when the idle delay is reached while running on AC power</translation>
<translation id="187819629719252111">Allows access to local files on the machine by allowing <ph name="PRODUCT_NAME" /> to display file selection dialogues.

      If you enable this setting, users can open file selection dialogues as normal.

      If you disable this setting, whenever the user performs an action which would provoke a file selection dialogue (like importing bookmarks, uploading files, saving links, etc.) a message is displayed instead and the user is assumed to have clicked Cancel on the file selection dialogue.

      If this setting is not set, users can open file selection dialogues as normal.</translation>
<translation id="1885782360784839335">Enable showing full-tab promotional content</translation>
<translation id="1888871729456797026">The enrolment token of cloud policy on desktop</translation>
<translation id="1897365952389968758">Allow all sites to run JavaScript (recommended)</translation>
<translation id="1906888171268104594">Controls whether usage metrics and diagnostic data, including crash reports, are reported back to Google.

      If set to true, <ph name="PRODUCT_OS_NAME" /> will report usage metrics and diagnostic data.

      If set to false, metrics and diagnostic data reporting will be disabled.

      If not configured, metrics and diagnostic data reporting will be disabled on unmanaged devices, and enabled on managed devices.</translation>
<translation id="1907431809333268751">Configure the list of enterprise login URLs (HTTP and HTTPS schemes only). Fingerprint of password will be captured on these URLs and used for password reuse detection.
      In order for <ph name="PRODUCT_NAME" /> to correctly capture password fingerprints, please make sure that your login pages follow the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms.

      If this setting is enabled, then password protection service will capture fingerprint of password on these URLs for password reuse detection purpose.
      If this setting is disabled or not set, then password protection service will only capture password fingerprint on https://accounts.google.com.
      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="1920046221095339924">Allow managed session on device</translation>
<translation id="1929709556673267855">Provides configurations for enterprise printers bound to devices.

      This policy allows you to provide printer configurations to <ph name="PRODUCT_OS_NAME" /> devices.  The format is the same as the NativePrinters dictionary, with an additional required 'id' or 'guid' field per printer for whitelisting or blacklisting.

      The size of the file must not exceed 5 MB and must be encoded in JSON.  It is estimated that a file containing approximately 21,000 printers will encode as a 5 MB file. The cryptographic hash is used to verify the integrity of the download.

      The file is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      If this policy is set, <ph name="PRODUCT_OS_NAME" /> will download the file for printer configurations and make printers available in accordance with <ph name="DEVICE_PRINTERS_ACCESS_MODE" />, <ph name="DEVICE_PRINTERS_WHITELIST" /> and <ph name="DEVICE_PRINTERS_BLACKLIST" />.

      This policy has no effect on whether users can configure printers on individual devices. It is intended to be supplementary to the configuration of printers by individual users.

      This policy is additive to the <ph name="BULK_PRINTERS_POLICY" />.

      If this policy is unset, there will be no device printers and the other <ph name="DEVICE_PRINTERS_POLICY_PATTERN" /> policies will be ignored.
      </translation>
<translation id="193259052151668190">Whitelist of USB detachable devices</translation>
<translation id="1933378685401357864">Wallpaper image</translation>
<translation id="1956493342242507974">Configure power management on the log-in screen in <ph name="PRODUCT_OS_NAME" />.

      This policy lets you configure how <ph name="PRODUCT_OS_NAME" /> behaves when there is no user activity for some amount of time while the log-in screen is being shown. The policy controls multiple settings. For their individual semantics and value ranges, see the corresponding policies that control power management within a session. The only deviations from these policies are:
      * The actions to take on idle or lid close cannot be to end the session.
      * The default action taken on idle when running on AC power is to shut down.

      If a setting is left unspecified, a default value is used.

      If this policy is unset, defaults are used for all settings.</translation>
<translation id="1958138414749279167">Enables <ph name="PRODUCT_NAME" />'s AutoFill feature and allows users to auto-complete address information in web forms using previously stored information.

      If this setting is disabled, AutoFill will never suggest, or fill address information, nor will it save additional address information that the user might submit while browsing the web.

      If this setting is enabled or has no value, the user will be able to control AutoFill for addresses in the UI.</translation>
<translation id="1960840544413786116">Whether to allow certificates issued by local trust anchors that are missing the subjectAlternativeName extension</translation>
<translation id="1962273523772270623">Allow collection of WebRTC event logs from Google services</translation>
<translation id="1964634611280150550">Incognito mode disabled.</translation>
<translation id="1964802606569741174">This policy has no effect on the Android YouTube app. If Safety Mode on YouTube should be enforced, installation of the Android YouTube app should be disallowed.</translation>
<translation id="1969212217917526199">Overrides policies on Debug builds of the remote access host.

          The value is parsed as a JSON dictionary of policy name to policy value mappings.</translation>
<translation id="1969808853498848952">Always runs plug-ins that require authorisation (deprecated)</translation>
<translation id="1988371335297483117">Auto-update payloads on <ph name="PRODUCT_OS_NAME" /> can be downloaded via HTTP instead of HTTPS. This allows transparent HTTP caching of HTTP downloads.

      If this policy is set to true, <ph name="PRODUCT_OS_NAME" /> will attempt to download auto-update payloads via HTTP. If the policy is set to false or not set, HTTPS will be used for downloading auto-update payloads.</translation>
<translation id="199764499252435679">Enable component updates in <ph name="PRODUCT_NAME" /></translation>
<translation id="2006530844219044261">Power management</translation>
<translation id="201557587962247231">Frequency of device status report uploads</translation>
<translation id="2017301949684549118">URLs for web apps to be silently installed.</translation>
<translation id="2018836497795982119">Specifies the period in milliseconds at which the device management service is queried for user policy information.

      Setting this policy overrides the default value of 3 hours. Valid values for this policy are in the range from 1,800,000 (30 minutes) to 86,400,000 (1 day). Any values not in this range will be clamped to the respective boundary. If the platform supports policy notifications, the refresh delay will be set to 24 hours because it is expected that policy notifications will force a refresh automatically whenever policy changes.

      Leaving this policy not set will make <ph name="PRODUCT_NAME" /> use the default value of 3 hours.

      Note that if the platform supports policy notifications, the refresh delay will be set to 24 hours (ignoring all defaults and the value of this policy) because it is expected that policy notifications will force a refresh automatically whenever policy changes, making more frequent refreshes unnecessary.</translation>
<translation id="2024476116966025075">Configure the required domain name for remote access clients</translation>
<translation id="2030905906517501646">Default search provider keyword</translation>
<translation id="203096360153626918">This policy has no effect on the Android apps. They will be able to enter full screen mode even if this policy is set to <ph name="FALSE" />.</translation>
<translation id="2043770014371753404">Disabled enterprise printers</translation>
<translation id="2057317273526988987">Allow access to a list of URLs</translation>
<translation id="206623763829450685">Specifies which HTTP authentication schemes are supported by <ph name="PRODUCT_NAME" />.

          Possible values are 'basic', 'digest', 'ntlm' and 'negotiate'. Separate multiple values with commas.

          If this policy is left unset, all four schemes will be used.</translation>
<translation id="2067011586099792101">Block access to sites outside of content packs</translation>
<translation id="2073552873076775140">Allow sign-in to <ph name="PRODUCT_NAME" /></translation>
<translation id="2077129598763517140">Use hardware acceleration when available</translation>
<translation id="2077273864382355561">Screen off delay when running on battery power</translation>
<translation id="2082205219176343977">Configure minimum allowed Chrome version for the device.</translation>
<translation id="209586405398070749">Stable channel</translation>
<translation id="2098658257603918882">Enable reporting of usage and crash-related data</translation>
<translation id="2104418465060359056">Report Extensions and Plug-in information</translation>
<translation id="2107601598727098402">
        This policy is deprecated in M72. Please use CloudManagementEnrollmentToken instead.
        </translation>
<translation id="2111016292707172233">Enables the availability of Tap to Search in <ph name="PRODUCT_NAME" />'s content view.

      If you enable this setting, Tap to Search will be available to the user and they can choose to turn the feature on or off.

      If you disable this setting, Tap to Search will be disabled completely.

      If this policy is left not set, it is equivalent to being enabled, see description above.</translation>
<translation id="2113068765175018713">Limit device uptime by automatically rebooting</translation>
<translation id="2116790137063002724">This policy controls whether to report information that can be used to identify users, such as OS login, <ph name="PRODUCT_NAME" /> Profile login, <ph name="PRODUCT_NAME" /> Profile name, <ph name="PRODUCT_NAME" /> Profile path and <ph name="PRODUCT_NAME" /> executable path.

      When this policy is left unset or set to True, information that can be used to identify users is gathered.
      When this policy is set to False, information that can be used to identify users is not gathered.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="2127599828444728326">Allow notifications on these sites</translation>
<translation id="2131902621292742709">Screen dim delay when running on battery power</translation>
<translation id="2132732175597591362">Controls the whitelist of URL patterns on which auto-play will always be enabled.

      If auto-play is enabled then videos containing audio content can play automatically (without user consent) <ph name="PRODUCT_NAME" />.

      A URL pattern has to be formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format.

      If the Auto-PlayAllowed policy is set to True, then this policy will have no effect.

      If the Auto-PlayAllowed policy is set to False, then any URL patterns set in this policy will still be allowed to play.

      Note that if <ph name="PRODUCT_NAME" /> is running and this policy changes, it will only be applied to newly opened tabs. Therefore, some tabs might still observe the previous behaviour.</translation>
<translation id="2134437727173969994">Permit locking the screen</translation>
<translation id="2137064848866899664">If this policy is set, each display is rotated to the
      specified orientation on every reboot and the first time that it is connected
      after the policy value has changed. Users may change the display
      rotation via the settings page after logging in, but their
      setting will be overridden by the policy value at the next reboot.

      This policy applies to both the primary and all secondary displays.

      If the policy is not set, the default value is 0 degrees and the user is
      free to change it. In this case, the default value is not reapplied at
      restart.</translation>
<translation id="214901426630414675">Restrict printing duplex mode</translation>
<translation id="2149330464730004005">Enable colour printing</translation>
<translation id="2156132677421487971">Configure policies for <ph name="PRODUCT_NAME" />, a feature that allows users to send the contents of tabs, sites or the desktop from the browser to remote displays and sound systems.</translation>
<translation id="2166472654199325139">Do not filter sites for adult content</translation>
<translation id="2168397434410358693">Idle delay when running on AC power</translation>
<translation id="2170233653554726857">Enable WPAD optimisation</translation>
<translation id="2176565653304920879">When this policy is set, automatic time zone detection flow will be in one of the following ways depending on the value of the setting:

      If set to TimezoneAutomaticDetectionUsersDecide, users would be able to control automatic time zone detection using normal controls in chrome://settings.

      If set to TimezoneAutomaticDetectionDisabled, automatic time zone controls in chrome://settings will be disabled. Automatic time zone detection will always be off.

      If set to TimezoneAutomaticDetectionIPOnly, time zone controls in chrome://settings will be disabled. Automatic time zone detection will always be on. Time zone detection will use IP-only method to resolve location.

      If set to TimezoneAutomaticDetectionSendWiFiAccessPoints, time zone controls in chrome://settings will be disabled. Automatic time zone detection will always be on. The list of visible Wi-Fi access points will always be sent to Geolocation API server for fine-grained time zone detection.

      If set to TimezoneAutomaticDetectionSendAllLocationInfo, time zone controls in chrome://settings will be disabled. Automatic time zone detection will always be on. Location information (such as Wi-Fi access points, reachable mobile masts, GPS) will be sent to a server for fine-grained time zone detection.

      If this policy is not set, it will behave as if TimezoneAutomaticDetectionUsersDecide is set.

      If SystemTimezone policy is set, it overrides this policy. In this case automatic time zone detection is completely disabled.</translation>
<translation id="2178899310296064282">Enforce at least Moderate Restricted Mode on YouTube</translation>
<translation id="2182291258410176649">User decides whether to enable backup and restore</translation>
<translation id="2183294522275408937">This setting controls how often the lock screen will request the password to be entered in order to continue using quick unlock. Each time the lock screen is entered, if the last password entry was more than this setting, the quick unlock will not be available on entering the lock screen. Should the user stay on the lock screen past this period of time, a password will be requested next time the user enters the wrong code, or re-enters the lock screen, whichever comes first.

          If this setting is configured, users using quick unlock will be requested to enter their passwords on the lock screen depending on this setting.

          If this setting is not configured, users using quick unlock will be requested to enter their password on the lock screen every day.</translation>
<translation id="2194470398825717446">This policy is deprecated in M61, please use EcryptfsMigrationStrategy instead.

      Specifies how a device should behave that shipped with ecryptfs and needs to transition to ext4 encryption.

      If you set this policy to 'DisallowArc', Android apps will be disabled for all users on the device (including those that have ext4 encryption already) and no migration from ecryptfs to ext4 encryption will be offered to any users.

      If you set this policy to 'AllowMigration', users with ecryptfs home directories will be offered to migrate these to ext4 encryption as necessary (currently when Android N becomes available on the device).

      This policy does not apply to kiosk apps – these are migrated automatically. If this policy is left not set, the device will behave as if 'DisallowArc' was chosen.</translation>
<translation id="2195032660890227692">This policy was removed in <ph name="PRODUCT_NAME" /> 68 and replaced by <ph name="ARC_BR_POLICY_NAME" />.</translation>
<translation id="2201555246697292490">Configure native messaging whitelist</translation>
<translation id="2204753382813641270">Control shelf auto-hiding</translation>
<translation id="2208976000652006649">Parameters for search URL which uses POST</translation>
<translation id="2214880135980649323">When this policy is set to enabled, extensions installed by enterprise policy are allowed to use the Enterprise Hardware Platform API.
      When this policy is set to disabled or not set, no extensions are allowed to use the Enterprise Hardware Platform API.
      This policy also applies to component extensions such as the Hangout Services extension.</translation>
<translation id="2223598546285729819">Default notification settings</translation>
<translation id="2231817271680715693">Import browsing history from default browser on first run</translation>
<translation id="2236488539271255289">Do not allow any site to set local data</translation>
<translation id="2240879329269430151">Allows you to set whether websites are allowed to show pop-ups. Showing pop-ups can be either allowed for all websites or denied for all websites.

          If this policy is left unset, 'BlockPop-ups' will be used and the user will be able to change it.</translation>
<translation id="2269319728625047531">Enable displaying Sync Consent during sign-in</translation>
<translation id="2274864612594831715">This policy configures enabling the virtual keyboard as an input device on ChromeOS. Users cannot override this policy.

      If the policy is set to true, the on-screen virtual keyboard will always be enabled.

      If set to false, the on-screen virtual keyboard will always be disabled.

      If you set this policy, users cannot change or override it. However, users will still be able to enable/disable an accessibility on-screen keyboard which takes precedence over the virtual keyboard controlled by this policy. See the |VirtualKeyboardEnabled| policy for controlling the accessibility on-screen keyboard.

      If this policy is left unset, the on-screen keyboard is disabled initially but can be enabled by the user anytime. Heuristic rules may also be used to decide when to display the keyboard.</translation>
<translation id="228659285074633994">Specifies the length of time without user input after which a warning dialogue is shown when running on AC power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> shows a warning dialogue telling the user that the idle action is about to be taken.

          When this policy is unset, no warning dialogue is shown.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.</translation>
<translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> can use a Google web service to help resolve spelling errors. If this setting is enabled, then this service is always used. If this setting is disabled, then this service is never used.

      Spell checking can still be performed using a downloaded dictionary; this policy only controls the usage of the online service.

      If this setting is not configured then users can choose whether the spell checking service should be used or not.</translation>
<translation id="2294382669900758280">Video playing in Android apps is not taken into consideration, even if this policy is set to <ph name="TRUE" />.</translation>
<translation id="2298647742290373702">Configure the default New Tab page in <ph name="PRODUCT_NAME" />.</translation>
<translation id="2299220924812062390">Specify a list of enabled plug-ins</translation>
<translation id="2303795211377219696">Enable AutoFill for credit cards</translation>
<translation id="2309390639296060546">Default geolocation setting</translation>
<translation id="2312134445771258233">Allows you to configure the pages that are loaded on start-up.

The contents of the list 'URLs to open at start-up' are ignored unless you select 'Open a list of URLs' in 'Action on start-up'.</translation>
<translation id="2327252517317514801">Define domains allowed to access G Suite</translation>
<translation id="237494535617297575">Allows you to set a list of url patterns that specify sites which are allowed to display notifications.

          If this policy is left unset, the global default value will be used for all sites either from the 'DefaultNotificationsSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="2386362615870139244">Allow screen wake locks</translation>
<translation id="2411817661175306360">Password protection warning is off</translation>
<translation id="2411919772666155530">Block notifications from these sites</translation>
<translation id="2418507228189425036">Disables saving browser history in <ph name="PRODUCT_NAME" /> and prevents users from changing this setting.

      If this setting is enabled, browsing history is not saved. This setting also disables tab syncing.

      If this setting is disabled or not set, browsing history is saved.</translation>
<translation id="2426782419955104525">Enables <ph name="PRODUCT_NAME" />'s Instant feature and prevents users from changing this setting.

      If you enable this setting, <ph name="PRODUCT_NAME" /> Instant is enabled.

      If you disable this setting, <ph name="PRODUCT_NAME" /> Instant is disabled.

      If you enable or disable this setting, users cannot change or override this setting.

      If this setting is left unset, the user can decide to use this function or not.

      This setting has been removed from <ph name="PRODUCT_NAME" /> 29 and higher versions.</translation>
<translation id="2433412232489478893">This policy controls whether the Network File Shares feature for <ph name="PRODUCT_NAME" /> is allowed for a user.

      When this policy is not configured or set to True, users will be able to use Network File Shares.

      When this policy is set to False, users will be unable to use Network File Shares.</translation>
<translation id="2438609638493026652">Enables reporting of key events during Android app installation to Google. Events are captured only for apps whose installation was triggered via policy.

      If the policy is set to true, events will be logged.
      If the policy is set to false or unset, events will not be logged.</translation>
<translation id="244317009688098048">Enable bailout keyboard shortcut for auto-login.

      If this policy is unset or set to True and a device-local account is configured for zero-delay auto-login, <ph name="PRODUCT_OS_NAME" /> will honour the keyboard shortcut Ctrl+Alt+S for bypassing auto-login and showing the login screen.

      If this policy is set to False, zero-delay auto-login (if configured) cannot be bypassed.</translation>
<translation id="2463365186486772703">Application locale</translation>
<translation id="2466131534462628618">Captive portal authentication ignores proxy</translation>
<translation id="2482676533225429905">Native Messaging</translation>
<translation id="2483146640187052324">Predict network actions on any network connection</translation>
<translation id="2484208301968418871">This policy controls the application of the SafeSites URL filter.
      This filter uses the Google Safe Search API to classify URLs as pornographic or not.

      When this policy is not configured or set to 'Do not filter sites for adult content', sites will not be filtered.

      When this policy is set to 'Filter top-level sites for adult content', sites classified as pornographic will be filtered.</translation>
<translation id="2486371469462493753">Disables enforcing Certificate Transparency requirements to the listed URLs.

      This policy allows certificates for the hostnames in the specified URLs to not be disclosed via Certificate Transparency. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used, but makes it harder to detect miss-isued certificates for those hosts.

      A URL pattern is formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format. However, because certificates are valid for a given hostname independent of the scheme, port or path, only the hostname portion of the URL is considered. Wildcard hosts are not supported.

      If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.</translation>
<translation id="2488010520405124654">Enable network configuration prompt when offline.

      If this policy is unset or set to True and a device-local account is configured for zero-delay auto-login and the device does not have access to the Internet, <ph name="PRODUCT_OS_NAME" /> will show a network configuration prompt.

      If this policy is set to False, an error message will be displayed instead of the network configuration prompt.</translation>
<translation id="2498238926436517902">Always auto-hide the shelf</translation>
<translation id="2514328368635166290">Specifies the favourite icon URL of the default search provider.

          This policy is optional. If not set, no icon will be present for the search provider.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="2516600974234263142">Enables printing in <ph name="PRODUCT_NAME" /> and prevents users from changing this setting.

      If this setting is enabled or not configured, users can print.

      If this setting is disabled, users cannot print from <ph name="PRODUCT_NAME" />. Printing is disabled in the wrench menu, extensions, JavaScript applications etc. It is still possible to print from plugins that bypass <ph name="PRODUCT_NAME" /> while printing. For example, certain Flash applications have the print option in their context menu, which is not covered by this policy.</translation>
<translation id="2518231489509538392">Allow playing audio</translation>
<translation id="2521581787935130926">Show the apps shortcut in the bookmark bar</translation>
<translation id="2529659024053332711">Allows you to specify the behaviour on start-up.

          If you choose 'Open new tab page' the new tab page will always be opened when you start <ph name="PRODUCT_NAME" />.

          If you choose 'Restore the last session', the URLs that were open last time <ph name="PRODUCT_NAME" /> was closed will be re-opened and the browsing session will be restored as it was left.
          Choosing this option disables some settings that rely on sessions or that perform actions on exit (such as Clear browsing data on exit or session-only cookies).

          If you choose 'Open a list of URLs', the list of 'URLs to open on start-up' will be opened when a user starts <ph name="PRODUCT_NAME" />.

          If you enable this setting, users cannot change or override it in <ph name="PRODUCT_NAME" />.

          Disabling this setting is equivalent to leaving it not configured. The user will still be able to change it in <ph name="PRODUCT_NAME" />.

          This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="2529880111512635313">Configure the list of force-installed apps and extensions</translation>
<translation id="253135976343875019">Idle warning delay when running on AC power</translation>
<translation id="2536525645274582300">User decides whether to enable Google Location services</translation>
<translation id="254653220329944566">Enables <ph name="PRODUCT_NAME" /> cloud reporting</translation>
<translation id="2548572254685798999">Report Safe Browsing information</translation>
<translation id="2550593661567988768">Simplex printing only</translation>
<translation id="2552966063069741410">Timezone</translation>
<translation id="2562339630163277285">Specifies the URL of the search engine used to provide instant results. The URL should contain the string <ph name="SEARCH_TERM_MARKER" />, which will be replaced at query time by the text the user has entered so far.

          This policy is optional. If not set, no instant search results will be provided.

          Google's instant results URL can be specified as: <ph name="GOOGLE_INSTANT_SEARCH_URL" />.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="2569647487017692047">If this policy is set to false, <ph name="PRODUCT_OS_NAME" /> will disable Bluetooth and the user cannot enable it back.

      If this policy is set to true or left unset, the user will be able to enable or disable Bluetooth as they wish.

      If this policy is set, the user cannot change or override it.

      After enabling Bluetooth, the user must log out and log back in for the changes to take effect (no need for this when disabling Bluetooth).</translation>
<translation id="2571066091915960923">Enable or disable the data compression proxy and prevent users from changing this setting.

      If you enable or disable this setting, users cannot change or override this setting.

      If this policy is left not set, the data compression proxy feature will be available for the user to choose whether to use it or not.</translation>
<translation id="2587719089023392205">Set <ph name="PRODUCT_NAME" /> as Default Browser</translation>
<translation id="2592091433672667839">Duration of inactivity before the screen saver is shown on the sign-in screen in retail mode</translation>
<translation id="2596260130957832043">Controls whether NTLMv2 is enabled.

          All recent versions of Samba and Windows servers support NTLMv2. This should only be disabled for backwards compatibility and reduces the security of authentication.

          If this policy is not set, the default is true and NTLMv2 is enabled.</translation>
<translation id="2604182581880595781">Configure Network File Shares-related policies.</translation>
<translation id="2623014935069176671">Wait for initial user activity</translation>
<translation id="262740370354162807">Enable submission of documents to <ph name="CLOUD_PRINT_NAME" /></translation>
<translation id="2627554163382448569">Provides configurations for enterprise printers.

      This policy allows you to provide printer configurations to <ph name="PRODUCT_OS_NAME" /> devices. The format is the same as the NativePrinters dictionary, with an additional required 'id' or 'guid' field per printer for whitelisting or blacklisting.

      The size of the file must not exceed 5 MB and must be encoded in JSON. It is estimated that a file containing approximately 21,000 printers will encode as a 5 MB file. The cryptographic hash is used to verify the integrity of the download.

      The file is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      If this policy is set, <ph name="PRODUCT_OS_NAME" /> will download the file for printer configurations and make printers available in accordance with <ph name="BULK_PRINTERS_ACCESS_MODE" />, <ph name="BULK_PRINTERS_WHITELIST" /> and <ph name="BULK_PRINTERS_BLACKLIST" />.

      If you set this policy, users cannot change or override it.

      This policy has no effect on whether users can configure printers on individual devices. It is intended to be supplementary to the configuration of printers by individual users.
      </translation>
<translation id="2633084400146331575">Enable spoken feedback</translation>
<translation id="2646290749315461919">Allows you to set whether websites are allowed to track the users' physical location. Tracking the users' physical location can be allowed by default, denied by default or the user can be asked every time a website requests the physical location.

          If this policy is left not set, 'AskGeolocation' will be used and the user will be able to change it.</translation>
<translation id="2647069081229792812">Enable or disable bookmark editing</translation>
<translation id="2650049181907741121">Action to take when the user closes the lid</translation>
<translation id="2655233147335439767">Specifies the URL of the search engine used when doing a default search. The URL should contain the string '<ph name="SEARCH_TERM_MARKER" />', which will be replaced at query time by the terms the user is searching for.

          Google's search URL can be specified as: <ph name="GOOGLE_SEARCH_URL" />.

          This option must be set when the 'DefaultSearchProviderEnabled' policy is enabled and will only be respected if this is the case.</translation>
<translation id="2659019163577049044">If this setting is enabled, users will be allowed to set up their devices to sync SMS messages between their phones and Chromebooks. Note that if this policy is allowed, users must explicitly opt into this feature by completing a setup flow. Once the setup flow is complete, users will be able to send and receive SMS messages on their Chromebooks.

      If this setting is disabled, users will not be allowed to set up SMS syncing.

      If this policy is left not set, the default is not allowed for managed users and allowed for non-managed users.</translation>
<translation id="2660846099862559570">Never use a proxy</translation>
<translation id="2663739737868438950">
      This policy applies to the sign-in screen. Please see also the <ph name="SITE_PER_PROCESS_POLICY_NAME" /> policy which applies to the user session. It is recommended to set both policies to the same value. If the values don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.
      You might want to look at the IsolateOrigins policy setting to get the best of both worlds, isolation and limited impact for users, by using IsolateOrigins with a list of the sites that you want to isolate. This setting, SitePerProcess, isolates all sites.
      If the policy is enabled, each site will run in its own process.
      If the policy is disabled, both IsolateOrigins and SitePerProcess features will be disabled. Users will still be able to enable SitePerProcess manually, via command line flags.
      If the policy is not configured, the user will be able to change this setting.
      </translation>
<translation id="2672012807430078509">Controls enabling NTLM as an authentication protocol for SMB mounts</translation>
<translation id="267596348720209223">Specifies the character encodings supported by the search provider. Encodings are code page names like UTF-8, GB2312, and ISO-8859-1. They are tried in the order provided.

          This policy is optional. If not set, the default will be used which is UTF-8.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="268577405881275241">Enable the data compression proxy feature</translation>
<translation id="2693108589792503178">Configure the change password URL.</translation>
<translation id="2731627323327011390">Disable usage of <ph name="PRODUCT_OS_NAME" /> certificates to ARC-apps</translation>
<translation id="2742843273354638707">Hide the Chrome Web Store app and footer link from the New Tab Page and <ph name="PRODUCT_OS_NAME" /> app launcher.

      When this policy is set to true, the icons are hidden.

      When this policy is set to false or is not configured, the icons are visible.</translation>
<translation id="2744751866269053547">Register protocol handlers</translation>
<translation id="2746016768603629042">This policy is deprecated, please use DefaultJavaScriptSetting instead.

      Can be used to disable JavaScript in <ph name="PRODUCT_NAME" />.

      If this setting is disabled, web pages cannot use JavaScript and the user cannot change that setting.

      If this setting is enabled or not set, web pages can use JavaScript but the user can change that setting.</translation>
<translation id="2753637905605932878">Restrict the range of local UDP ports used by WebRTC</translation>
<translation id="2755385841634849932">This policy controls the availability of Android backup and restore.

      When this policy is not configured or set to <ph name="BR_DISABLED" />, Android backup and restore is disabled and cannot be enabled by the user.

      When this policy is set to <ph name="BR_UNDER_USER_CONTROL" />, the user is asked to choose whether they want to use Android backup and restore. If the user enables backup and restore, Android app data is uploaded to Android backup servers and restored from them upon app re-installations for compatible apps.</translation>
<translation id="2757054304033424106">Types of extensions/apps that are allowed to be installed</translation>
<translation id="2759224876420453487">Control the user behaviour in a multiprofile session</translation>
<translation id="2761483219396643566">Idle warning delay when running on battery power</translation>
<translation id="2762164719979766599">Specifies the list of device-local accounts to be shown on the login screen.

      Every list entry specifies an identifier, which is used internally to tell the different device-local accounts apart.</translation>
<translation id="2769952903507981510">Configure the required domain name for remote access hosts</translation>
<translation id="2787173078141616821">Report information about status of Android</translation>
<translation id="2799297758492717491">Allow media auto-play on a whitelist of URL patterns</translation>
<translation id="2801230735743888564">Allow users to play dinosaur easter egg game when device is offline.

      If this policy is set to False, users will not be able to play the dinosaur Easter egg game when device is offline. If this setting is set to True, users are allowed to play the dinosaur game. If this policy is not set, users are not allowed to play the dinosaur Easter egg game on enrolled Chrome OS, but are allowed to play it under other circumstances.</translation>
<translation id="2802085784857530815">Allows you to control if users can access non-enterprise printers

      If the policy is set to True, or not set at all, users will be able to add, configure and print using their own native printers.

      If the policy is set to False, users will not be able to add and configure their own native printers. They will also not be able to print using any previously configured native printers.
      </translation>
<translation id="2805707493867224476">Allow all sites to show pop-ups</translation>
<translation id="2808013382476173118">Enables usage of STUN servers when remote clients are trying to establish a connection to this machine.

          If this setting is enabled, then remote clients can discover and connect to this machine even if they are separated by a firewall.

          If this setting is disabled and outgoing UDP connections are filtered by the firewall, then this machine will only allow connections from client machines within the local network.

          If this policy is not set, the setting will be enabled.</translation>
<translation id="2813281962735757923">This policy controls the time frames during which the <ph name="PRODUCT_OS_NAME" /> device is not allowed to check for updates automatically.
      When this policy is set to a non-empty list of time intervals:
      Devices will not be able to check for updates automatically during the specified time intervals. Devices that require a rollback or are below the minimum <ph name="PRODUCT_OS_NAME" /> version will not be affected by this policy due to potential security issues. Furthermore, this policy will not block update checks requested by users or administrators.
      When this policy is unset or contains no time intervals:
      No automatic update checks will be blocked by this policy, but they may be blocked by other policies. This feature is only enabled on Chrome devices configured as auto-launch kiosks. Other devices will not be restricted by this policy.</translation>
<translation id="2823870601012066791">Windows registry location for <ph name="PRODUCT_OS_NAME" /> clients:</translation>
<translation id="2824715612115726353">Enable Incognito mode</translation>
<translation id="2838830882081735096">Disallow data migration and ARC</translation>
<translation id="2839294585867804686">Network File Shares settings</translation>
<translation id="2840269525054388612">Specifies the printers which a user can use.

      This policy is only used if <ph name="PRINTERS_WHITELIST" /> is chosen for <ph name="DEVICE_PRINTERS_ACCESS_MODE" />

      If this policy is used, only the printers with ids matching the values in this policy are available to the user. The ids must correspond to the 'id' or 'guid' fields in the file specified in <ph name="DEVICE_PRINTERS_POLICY" />.
      </translation>
<translation id="285480231336205327">Enable high contrast mode</translation>
<translation id="2854919890879212089">Causes <ph name="PRODUCT_NAME" /> to use the system default printer as the default choice in Print Preview instead of the most recently used printer.

      If you disable this setting or do not set a value, Print Preview will use the most recently used printer as the default destination choice.

      If you enable this setting, Print Preview will use the OS system default printer as the default destination choice.</translation>
<translation id="2856674246949497058">Roll back and stay on target version if OS version is newer than target. Do a powerwash during the process.</translation>
<translation id="2872961005593481000">Shut down</translation>
<translation id="2873651257716068683">Overrides default printing page size. If the page size is unavailable, this policy is ignored.</translation>
<translation id="2874209944580848064">Note for <ph name="PRODUCT_OS_NAME" /> devices supporting Android apps:</translation>
<translation id="2877225735001246144">Disable CNAME lookup when negotiating Kerberos authentication</translation>
<translation id="2890645751406497668">Automatically grant permission to these sites to connect to USB devices with the given vendor and product IDs.</translation>
<translation id="2892414556511568464">Restricts printing duplex mode. Unset policy and empty set are treated as no restriction.</translation>
<translation id="2893546967669465276">Send system logs to the management server</translation>
<translation id="2899002520262095963">Android apps can use the network configurations and CA certificates set via this policy, but do not have access to some configuration options.</translation>
<translation id="290002216614278247">Allows you to lock the user's session based on the client time or the usage quota of the day.

          The |time_window_limit| specifies a daily window in which the user's session should be locked. We only support one rule for each day of the week, therefore the |entries| array may vary from 0 to 7 in size. |starts_at| and |ends_at| are the beginning and the end of the window limit, when |ends_at| is smaller than |starts_at| it means that the |time_limit_window| ends on the following day. |last_updated_millis| is the UTC timestamp for the last time that this entry was updated; it is sent as a string because the timestamp wouldn't fit in an integer.

          The |time_usage_limit| specifies a daily screen quota, so when the user reaches it, the user's session is locked. There is a property for each day of the week, and it should be set only if there is an active quota for that day. |usage_quota_mins| is the amount of time that the managed device can be used in a day and |reset_at| is the time when the usage quota is renewed. The default value for |reset_at| is midnight ({'hour': 0, 'minute': 0}). |last_updated_millis| is the UTC timestamp for the last time that this entry was updated; it is sent as a string because the timestamp wouldn't fit in an integer.

          |overrides| is provided to invalidate temporarily one or more of the previous rules.
          * If neither time_window_limit nor time_usage_limit is active, |LOCK| can be used to lock the device.
          * |LOCK| temporarily locks a user session until the next time_window_limit or time_usage_limit starts.
          * |UNLOCK| unlocks a user's session locked by time_window_limit or time_usage_limit.
          |created_time_millis| is the UTC timestamp for the override creation; it is sent as a String because the timestamp wouldn't fit in an integer. It is used to determine whether this override should still be applied. If the current active time limit feature (time usage limit or time window limit) started after the override was created, it should not take action. Also, if the override was created before the last change of the active time_window_limit or time_usage_window, it should not be applied.

          Multiple overrides may be sent; the newest valid entry is the one that is going to be applied.</translation>
<translation id="2905984450136807296">Authentication data cache lifetime</translation>
<translation id="2906874737073861391">List of AppPack extensions</translation>
<translation id="2907992746861405243">Controls which printers from the <ph name="BULK_PRINTERS_POLICY" /> are available to users.

      Designates which access policy is used for bulk printer configuration. If <ph name="PRINTERS_ALLOW_ALL" /> is selected, all printers are shown. If <ph name="PRINTERS_BLACKLIST" /> is selected, <ph name="BULK_PRINTERS_BLACKLIST" /> is used to restrict access to the specified printers. If <ph name="PRINTERS_WHITELIST" /> is selected, <ph name="BULK_PRINTERS_WHITELIST" /> designates only those printers which are selectable.

      If this policy is not set, <ph name="PRINTERS_ALLOW_ALL" /> is assumed.
      </translation>
<translation id="2908277604670530363">Maximum number of concurrent connections to the proxy server</translation>
<translation id="2952347049958405264">Restrictions:</translation>
<translation id="2956777931324644324">This policy has been retired as of <ph name="PRODUCT_NAME" /> version 36.

      Specifies whether the TLS domain-bound certificates extension should be enabled.

      This setting is used to enable the TLS domain-bound certificates extension for testing.  This experimental setting will be removed in the future.</translation>
<translation id="2957506574938329824">Do not allow any site to request access to Bluetooth devices via the Web Bluetooth API</translation>
<translation id="2957513448235202597">Account type for <ph name="HTTP_NEGOTIATE" /> authentication</translation>
<translation id="2959898425599642200">Proxy bypass rules</translation>
<translation id="2960128438010718932">The staging schedule for applying a new update</translation>
<translation id="2960691910306063964">Enable or disable PIN-less authentication for remote access hosts</translation>
<translation id="2976002782221275500">Specifies the length of time without user input after which the screen is dimmed when running on battery power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> dims the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME" /> does not dim the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the screen off delay (if set) and the idle delay.</translation>
<translation id="2987155890997901449">Enable ARC</translation>
<translation id="2987227569419001736">Control use of the Web Bluetooth API</translation>
<translation id="3016255526521614822">Whitelist note-taking apps allowed on the <ph name="PRODUCT_OS_NAME" /> lock screen</translation>
<translation id="3021562480854470924">Number of milestones roll-back is allowed</translation>
<translation id="3023572080620427845">URL of an XML file that contains URLs to load in an alternative browser.</translation>
<translation id="3030000825273123558">Enable metrics reporting</translation>
<translation id="3034580675120919256">Allows you to set whether websites are allowed to run JavaScript. Running JavaScript can be either allowed for all websites or denied for all websites.

          If this policy is left unset, 'AllowJavaScript' will be used and the user will be able to change it.</translation>
<translation id="3038323923255997294">Continue running background apps when <ph name="PRODUCT_NAME" /> is closed</translation>
<translation id="3046192273793919231">Send network packets to the management server to monitor online status</translation>
<translation id="3047732214002457234">Control how Chrome Cleanup reports data to Google</translation>
<translation id="304775240152542058">This policy controls command-line parameters to launch to the alternative browser.

      When this policy is left unset, only the URL is passed as a command-line parameter.

      When this policy is set to a list of strings, each string is passed to the alternative browser as a separate command-line parameters. On Windows, the parameters are joined with spaces. On Mac OS X and Linux, a parameter may contain spaces and still be treated as a single parameter.

      If an element contains ${url}, it gets replaced with the URL of the page to open.

      If no element contains ${url}, the URL is appended at the end of the command line.

      Environment variables are expanded. On Windows, %ABC% is replaced with the value of the ABC environment variable. On Mac OS X and Linux, ${ABC} is replaced with the value of the ABC environment variable.</translation>
<translation id="3048744057455266684">If this policy is set and a search URL suggested from the omnibox contains this parameter in the query string or in the fragment identifier, then the suggestion will show the search terms and search provider instead of the raw search URL.

          This policy is optional. If not set, no search term replacement will be performed.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="306887062252197004">This policy allows users of the WebDriver feature to override
      policies which can interfere with its operation.

      Currently this policy disables SitePerProcess and IsolateOrigins policies.

      If the policy is enabled, WebDriver will be able to override incompatible
      policies.
      If the policy is disabled or not configured, WebDriver will not be allowed
      to override incompatible policies.</translation>
<translation id="3069958900488014740">Allows you to turn off WPAD (Web Proxy Auto-Discovery) optimisation in <ph name="PRODUCT_NAME" />.

      If this policy is set to false, WPAD optimisation is disabled causing <ph name="PRODUCT_NAME" /> to wait longer for DNS-based WPAD servers. If the policy is not set or is enabled, WPAD optimisation is enabled.

      Independent of whether or how this policy is set, the WPAD optimisation setting cannot be changed by users.</translation>
<translation id="3072045631333522102">Screen saver to be used on the sign-in screen in retail mode</translation>
<translation id="3072847235228302527">Set the Terms of Service for a device-local account</translation>
<translation id="3077183141551274418">Enables or disables tab lifecycles</translation>
<translation id="3086995894968271156">Configure the cast receiver in <ph name="PRODUCT_NAME" />.</translation>
<translation id="3088796212846734853">Allows you to set a list of URL patterns that specify sites which are allowed to display images.

          If this policy is left not set, the global default value will be used for all sites, either from the 'DefaultImagesSetting' policy if it is set, or from the user's personal configuration.

          Note: This policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.</translation>
<translation id="3096595567015595053">List of enabled plug-ins</translation>
<translation id="3101501961102569744">Choose how to specify proxy server settings</translation>
<translation id="3101709781009526431">Date and time</translation>
<translation id="3117676313396757089">Warning: DHE will be completely removed from <ph name="PRODUCT_NAME" /> after version 57 (around March 2017) and this policy will stop working then.

      If the policy is not set, or is set to false, then DHE cipher suites in TLS will not be enabled. Otherwise it may be set to true to enable DHE cipher suites and retain compatibility with an outdated server. This is a stopgap measure and the server should be reconfigured.

      Servers are encouraged to migrate to ECDHE cipher suites. If these are unavailable, ensure a cipher suite using RSA key exchange is enabled.</translation>
<translation id="3117706142826400449">If disabled, prevents Chrome Clean-Up from scanning the system for unwanted software and performing clean ups. Manually triggering Chrome Clean-Up from chrome://settings/cleanup is disabled.

      If enabled or unset, Chrome Clean-Up periodically scans the system for unwanted software and should any be found, will ask the user if they wish to remove it. Manually triggering Chrome Clean-Up from chrome://settings is enabled.

      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="3165808775394012744">These policies are included here to make them easy to remove.</translation>
<translation id="316778957754360075">This setting has been retired as of <ph name="PRODUCT_NAME" /> version 29. The recommended way to set up organisation-hosted extension/app collections is to include the site hosting the CRX packages in ExtensionInstallSources and put direct download links to the packages on a web page. A launcher for that web page can be created using the ExtensionInstallForcelist policy.</translation>
<translation id="3171369832001535378">Device network hostname template</translation>
<translation id="3185009703220253572">since version <ph name="SINCE_VERSION" /></translation>
<translation id="3187220842205194486">Android apps cannot get access to corporate keys. This policy has no effect on them.</translation>
<translation id="3201273385265130876">Allows you to specify the proxy server used by <ph name="PRODUCT_NAME" /> and prevents users from changing proxy settings.

          If you choose to never use a proxy server and always connect directly, all other options are ignored.

          If you choose to use system proxy settings, all other options are ignored.

          If you choose to auto detect the proxy server, all other options are ignored.

          If you choose fixed server proxy mode, you can specify further options in 'Address or URL of proxy server' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps.

          If you choose to use a .pac proxy script, you must specify the URL to the script in 'URL to a proxy .pac file'.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL" />.

          If you enable this setting, <ph name="PRODUCT_NAME" /> and ARC-apps ignore all proxy-related options specified from the command line.

          Leaving this policy unset will allow the users to choose the proxy settings on their own.</translation>
<translation id="3205825995289802549">Maximise the first browser window on first run</translation>
<translation id="3211426942294667684">Browser sign in settings</translation>
<translation id="3214164532079860003">This policy forces the home page to be imported from the current default browser if enabled.

      If disabled, the home page is not imported.

      If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
<translation id="3219421230122020860">Incognito mode available.</translation>
<translation id="3220624000494482595">If the kiosk app is an Android app, it will have no control over the <ph name="PRODUCT_OS_NAME" /> version, even if this policy is set to <ph name="TRUE" />.</translation>
<translation id="3236046242843493070">URL patterns to allow extension, app, and user script installs from</translation>
<translation id="3240609035816615922">Printer configuration access policy.</translation>
<translation id="3243309373265599239">Specifies the length of time without user input after which the screen is dimmed when running on AC power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> dims the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME" /> does not dim the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal to the screen off delay (if set) and the idle delay.</translation>
<translation id="3251500716404598358">Configure policies to switch between browsers.

      Configured websites will automatically open in a different browser from <ph name="PRODUCT_NAME" />.</translation>
<translation id="3264793472749429012">Default search provider encodings</translation>
<translation id="3273221114520206906">Default JavaScript setting</translation>
<translation id="3284094172359247914">Control use of the WebUSB API</translation>
<translation id="3288595667065905535">Release channel</translation>
<translation id="3292147213643666827">Enables <ph name="PRODUCT_NAME" /> to act as a proxy between <ph name="CLOUD_PRINT_NAME" /> and legacy printers connected to the machine.

      If this setting is enabled or not configured, users can enable the cloud print proxy by authentication with their Google account.

      If this setting is disabled, users cannot enable the proxy, and the machine will not be allowed to share it's printers with <ph name="CLOUD_PRINT_NAME" />.</translation>
<translation id="3307746730474515290">Controls which app/extension types are allowed to be installed and limits runtime access.

          This setting white-lists the allowed types of extension/apps that can be installed in <ph name="PRODUCT_NAME" /> and which hosts they can interact with. The value is a list of strings, each of which should be one of the following: 'extension', 'theme', 'user_script', 'hosted_app', 'legacy_packaged_app', 'platform_app'. See the <ph name="PRODUCT_NAME" /> extensions documentation for more information on these types.

          Note that this policy also affects extensions and apps to be force-installed via ExtensionInstallForcelist.

          If this setting is configured, extensions/apps which have a type that is not on the list will not be installed.

          If this setting is left non-configured, no restrictions on the acceptable extension/app types are enforced.</translation>
<translation id="3322771899429619102">Allows you to set a list of URL patterns that specify sites which are allowed to use key generation. If a URL pattern is in 'KeygenBlockedForUrls', that overrides these exceptions.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set or the user's personal configuration otherwise.</translation>
<translation id="332771718998993005">Determine the name advertised as a <ph name="PRODUCT_NAME" /> destination.

          If this policy is set to a non-empty string, that string will be used as the name of the <ph name="PRODUCT_NAME" /> destination. Otherwise, the destination name will be the device name. If this policy is not set, the destination name will be the device name, and the owner of the device (or a user from the domain managing the device) will be allowed to change it. The name is limited to 24 characters.</translation>
<translation id="3335468714959531450">Allows you to set a list of URL patterns that specify sites which are allowed to set cookies.

          If this policy is left not set, the global default value will be used for all sites, either from the 'DefaultCookiesSetting' policy if it is set, or from the user's personal configuration.

          Also see policies 'CookiesBlockedForUrls' and 'CookiesSessionOnlyForUrls'. Note: There must be no conflicting URL patterns between these three policies – it is not specified as to which policy takes precedence.</translation>
<translation id="3373364525435227558">Sets one or more recommended locales for a managed session, allowing users to easily choose one of these locales.

      The user can choose a locale and a keyboard layout before starting a managed session. By default, all locales supported by <ph name="PRODUCT_OS_NAME" /> are listed in alphabetic order. You can use this policy to move a set of recommended locales to the top of the list.

      If this policy is not set, the current UI locale will be pre-selected.

      If this policy is set, the recommended locales will be moved to the top of the list and will be visually separated from all other locales. The recommended locales will be listed in the order in which they appear in the policy. The first recommended locale will be pre-selected.

      If there is more than one recommended locale, it is assumed that users will want to select from these locales. Locale and keyboard layout selection will be prominently offered when starting a managed session. Otherwise, it is assumed that most users will want to use the pre-selected locale. Locale and keyboard layout selection will be less prominently offered when starting a managed session.

      When this policy is set and automatic login is enabled (see the |DeviceLocalAccountAutoLoginId| and |DeviceLocalAccountAutoLoginDelay| policies), the automatically started managed session will use the first recommended locale and the most popular keyboard layout matching this locale.

      The pre-selected keyboard layout will always be the most popular layout matching the pre-selected locale.

      This policy can only be set as recommended. You can use this policy to move a set of recommended locales to the top but users are always allowed to choose any locale supported by <ph name="PRODUCT_OS_NAME" /> for their session.
      </translation>
<translation id="3381968327636295719">Use the host browser by default</translation>
<translation id="3388153794103186066">Allows you to set a list of URLs that specify which sites will automatically be granted permission to access a USB device with the given vendor and product IDs. Each item in the list must contain both devices and URLs in order for the policy to be valid. Each item in devices can contain a vendor ID and product ID field. Any ID that is omitted is treated as a wildcard with one exception, and that exception is that a product ID cannot be specified without a vendor ID also being specified. Otherwise, the policy will not be valid and will be ignored.

        The USB permission model uses the URL of the requesting site ('requesting URL') and the URL of the top-level frame site ('embedding URL') to grant permission to the requesting URL to access the USB device. The requesting URL may be different from the embedding URL when the requesting site is loaded in an iframe. Therefore, the 'urls' field can contain up to two URL strings delimited by a comma to specify the requesting and embedding URL respectively. If only one URL is specified, then access to the corresponding USB devices will be granted when the requesting site's URL matches this URL regardless of embedding status. The URLs in 'urls' must be valid URLs, otherwise the policy will be ignored.

        If this policy is left not set, the global default value will be used for all sites either from the 'DefaultWebUsbGuardSetting' policy if it is set, or the user's personal configuration otherwise.

        URL patterns in this policy should not clash with the ones configured via WebUsbBlockedForUrls. If there is a clash, this policy will take precedence over WebUsbBlockedForUrls and WebUsbAskForUrls.</translation>
<translation id="3414260318408232239">If this policy is not configured then <ph name="PRODUCT_NAME" /> uses a default minimum version which is TLS 1.0.

      Otherwise it may be set to one of the following values: 'tls1', 'tls1.1' or 'tls1.2'. When set, <ph name="PRODUCT_NAME" /> will not use SSL/TLS versions less than the specified version. An unrecognised value will be ignored.</translation>
<translation id="3417418267404583991">If this policy is set to true or not configured, <ph name="PRODUCT_OS_NAME" /> will enable guest logins. Guest logins are anonymous user sessions and do not require a password.

      If this policy is set to false, <ph name="PRODUCT_OS_NAME" /> will not allow guest sessions to be started.</translation>
<translation id="3418871497193485241">Enforces a minimum Restricted Mode on YouTube and prevents users from
      picking a less restricted mode.

      If this setting is set to Strict, Strict Restricted Mode on YouTube is always active.

      If this setting is set to Moderate, the user may only pick Moderate Restricted Mode
      and Strict Restricted Mode on YouTube, but cannot disable Restricted Mode.

      If this setting is set to Off or no value is set, Restricted Mode on YouTube is not enforced by <ph name="PRODUCT_NAME" />. However, external policies such as YouTube policies might still enforce Restricted Mode.</translation>
<translation id="3428247105888806363">Enable network prediction.</translation>
<translation id="3437924696598384725">Allow the user to manage VPN connections</translation>
<translation id="3449886121729668969">Configures the proxy settings for <ph name="PRODUCT_NAME" />. These proxy settings will be available for ARC-apps too.

      This policy isn't ready for usage yet, please don't use it.</translation>
<translation id="3459509316159669723">Printing</translation>
<translation id="3460784402832014830">Specifies the URL that a search engine uses to provide a new tab page.

          This policy is optional. If not set, no new tab page will be provided.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="3461279434465463233">Report power status</translation>
<translation id="346731943813722404">Specifies whether power management delays and the session length limit should only start running after the first user activity has been observed in a session.

          If this policy is set to True, power management delays and the session length limit do not start running until after the first user activity has been observed in a session.

          If this policy is set to False or left unset, power management delays and the session length limit start running immediately on session start.</translation>
<translation id="3478024346823118645">Wipe user data on sign-out</translation>
<translation id="348495353354674884">Enable virtual keyboard</translation>
<translation id="3487623755010328395">
        If this policy is set, <ph name="PRODUCT_NAME" /> will try to register itself and apply associated cloud policy for all profiles.

        The value of this policy is an Enrolment token that can be retrieved from the Google Admin console.</translation>
<translation id="3496296378755072552">Password manager</translation>
<translation id="3500732098526756068">Allows you to control the triggering of password protection warning. Password protection alerts users when they reuse their protected password on potentially suspicious sites.

      You can use 'PasswordProtectionLoginURLs' and 'PasswordProtectionChangePasswordURL' policies to configure which password to protect.

      If this policy is set to 'PasswordProtectionWarningOff', no password protection warning will be shown.
      If this policy is set to 'PasswordProtectionWarningOnPasswordReuse', password protection warning will be shown when the user reuses their protected password on a non-whitelisted site.
      If this policy is set to 'PasswordProtectionWarningOnPhishingReuse', password protection warning will be shown when the user reuses their protected password on a phishing site.
      If this policy is left unset, password protection service will only protect Google passwords but the user will be able to change this setting.</translation>
<translation id="3502555714327823858">Allow all duplex modes</translation>
<translation id="350443680860256679">Configure ARC</translation>
<translation id="3504791027627803580">Specifies the URL of the search engine used to provide image search. Search requests will be sent using the GET method. If the DefaultSearchProviderImageURLPostParams policy is set then image search requests will use the POST method instead.

          This policy is optional. If not set, no image search will be used.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="350797926066071931">Enable Translate</translation>
<translation id="3512226956150568738">If the client device model already supported ARC before migration to ext4 was necessary to run ARC and if the ArcEnabled policy is set to true, this option will behave as AskUser (value 3). In all other cases (if the device model did not support ARC before, or if ArcEnabled policy is set to false), this value is equivalent to DisallowArc (value 0).</translation>
<translation id="3524204464536655762">Do not allow any site to request access to USB devices via the WebUSB API</translation>
<translation id="3526752951628474302">Monochrome printing only</translation>
<translation id="3528000905991875314">Enable alternate error pages</translation>
<translation id="3545457887306538845">Allows you to control where Developer Tools can be used.

      If this policy is set to 'DeveloperToolsDisallowedForForceInstalledExtensions' (value 0, which is the default value), the Developer Tools and the JavaScript console can be accessed in general, but they cannot be accessed in the context of extensions installed by enterprise policy.
      If this policy is set to 'DeveloperToolsAllowed' (value 1), the Developer Tools and the JavaScript console can be accessed and used in all contexts, including the context of extensions installed by enterprise policy.
      If this policy is set to 'DeveloperToolsDisallowed' (value 2), the Developer Tools cannot be accessed and website elements can no longer be inspected. Any keyboard shortcuts and any menu or context menu entries to open the Developer Tools or the JavaScript Console will be disabled.</translation>
<translation id="3547954654003013442">Proxy settings</translation>
<translation id="355118380775352753">Websites to open in alternative browser</translation>
<translation id="3577251398714997599">Ads setting for sites with intrusive ads</translation>
<translation id="3591527072193107424">Enable the Legacy Browser Support feature.</translation>
<translation id="3591584750136265240">Configure the login authentication behaviour</translation>
<translation id="3624171042292187668">
      You might want to look at the IsolateOrigins policy setting to get the best of both worlds, isolation and limited impact for users, by using IsolateOrigins with a list of the sites that you want to isolate. This setting, SitePerProcess, isolates all sites.
      If the policy is enabled, each site will run in its own process.
      If the policy is disabled, then both IsolateOrigins and SitePerProcess features will be disabled. Users will still be able to enable SitePerProcess manually, via command line flags.
      If the policy is not configured, the user will be able to change this setting.
      On <ph name="PRODUCT_OS_NAME" />, it is recommended to also set the <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME" /> device policy to the same value. If the values specified by the two policies don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.

      NOTE: This policy does not apply on Android. To enable SitePerProcess on Android, use the SitePerProcessAndroid policy setting.
      </translation>
<translation id="3627678165642179114">Enable or disable spell checking web service</translation>
<translation id="3628480121685794414">Enable simplex printing</translation>
<translation id="3646859102161347133">Set screen magnifier type</translation>
<translation id="3653237928288822292">Default search provider icon</translation>
<translation id="3660510274595679517">
        If this policy is set to true, cloud management enrolment is mandatory and blocks Chrome launch process if failed.

        If this policy is left unset or set to false, cloud management enrolment is optional and does not block Chrome launch process if failed.

        This policy is used by machine scope cloud policy enrolment on desktop and can be set by Registry or GPO on Windows, plist on Mac and JSON policy file on Linux.</translation>
<translation id="3660562134618097814">Transfer SAML IdP cookies during login</translation>
<translation id="3702647575225525306"><ph name="POLICY_NAME" /> (The single-line field is deprecated and will be removed in the future. Please start using the multi-line text box below.)</translation>
<translation id="3709266154059827597">Configure extension installation blacklist</translation>
<translation id="3711895659073496551">Suspend</translation>
<translation id="3715569262675717862">Authentication based on client certificates</translation>
<translation id="3736879847913515635">Enable add person in user manager</translation>
<translation id="3738723882663496016">This policy specifies <ph name="PLUGIN_VM_NAME" /> licence key for this device.</translation>
<translation id="3748900290998155147">Specifies whether wake locks are allowed. Wake locks can be requested by extensions via the power management extension API and by ARC apps.

          If this policy is set to true or left not set, wake locks will be honoured for power management.

          If this policy is set to false, wake lock requests will be ignored.</translation>
<translation id="3750220015372671395">Block key generation on these sites</translation>
<translation id="3756011779061588474">Block developer mode</translation>
<translation id="3758089716224084329">Allows you to specify the proxy server used by <ph name="PRODUCT_NAME" /> and prevents users from changing proxy settings.

      If you choose to never use a proxy server and always connect directly, all other options are ignored.

      If you choose to auto detect the proxy server, all other options are ignored.

      For detailed examples, visit:
      <ph name="PROXY_HELP_URL" />.

      If you enable this setting, <ph name="PRODUCT_NAME" /> and ARC-apps, ignore all proxy-related options specified from the command line.

      Leaving these policies unset will allow the users to choose the proxy settings on their own.</translation>
<translation id="3758249152301468420">Disable Developer Tools</translation>
<translation id="3764248359515129699">Disables enforcing Certificate Transparency requirements for a list of Legacy Certificate Authorities.

      This policy allows disabling Certificate Transparency disclosure requirements for certificate chains that contain certificates with one of the specified subjectPublicKeyInfo hashes. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used for Enterprise hosts.

      In order for Certificate Transparency enforcement to be disabled when this policy is set, the hash must be of a subjectPublicKeyInfo appearing in a CA certificate that is recognised as a Legacy Certificate Authority (CA). A Legacy CA is a CA that has been publicly trusted by one or more operating systems supported by <ph name="PRODUCT_NAME" />, but is not trusted by the Android Open Source Project or <ph name="PRODUCT_OS_NAME" />.

      A subjectPublicKeyInfo hash is specified by concatenating the hash algorithm name, the '/' character and the Base64 encoding of that hash algorithm applied to the DER-encoded subjectPublicKeyInfo of the specified certificate. This Base64 encoding is the same format as an SPKI Fingerprint, as defined in RFC 7469, Section 2.4. Unrecognised hash algorithms are ignored. The only supported hash algorithm at this time is 'sha256'.

      If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.</translation>
<translation id="3765260570442823273">Duration of the idle log-out warning message</translation>
<translation id="377044054160169374">Abusive Experience Intervention Enforce</translation>
<translation id="3780152581321609624">Include non-standard port in Kerberos SPN</translation>
<translation id="3780319008680229708">If this policy is set to true, the Cast toolbar icon will always be shown on the toolbar or the overflow menu and users will not be able to remove it.

          If this policy is set to false or is not set, users will be able to pin or remove the icon via its contextual menu.

          If the policy "EnableMediaRouter" is set to false, then this policy's value would have no effect and the toolbar icon would not be shown.</translation>
<translation id="3788662722837364290">Power management settings when the user becomes idle</translation>
<translation id="3790085888761753785">If this setting is enabled, users will be allowed to sign into their account with Smart Lock. This is more permissive than usual Smart Lock behaviour which only allows users to unlock their screen.

      If this setting is disabled, users will not be allowed to use Smart Lock Sign-in.

      If this policy is left not set, the default is not allowed for enterprise-managed users and allowed for non-managed users.</translation>
<translation id="379602782757302612">Allows you to specify which extensions the users can NOT install. Extensions already installed will be disabled if blacklisted, without a way for the user to enable them. Once a disabled, blacklisted extension is removed, it will automatically get re-enabled.

          A blacklist value of '*' means all extensions are blacklisted unless they are explicitly listed in the whitelist.

          If this policy is left 'not set' the user can install any extension in <ph name="PRODUCT_NAME" />.</translation>
<translation id="3800626789999016379">Configures the directory that <ph name="PRODUCT_NAME" /> will use for downloading files.

      If you set this policy, <ph name="PRODUCT_NAME" /> will use the provided directory regardless of whether the user has specified one or enabled the flag to be prompted for download location every time.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default download directory will be used and the user will be able to change it.</translation>
<translation id="3805659594028420438">Enable TLS domain-bound certificates extension (deprecated)</translation>
<translation id="3808945828600697669">Specify a list of disabled plug-ins</translation>
<translation id="3811562426301733860">Allow ads on all sites</translation>
<translation id="3816312845600780067">Enable bailout keyboard shortcut for auto-login</translation>
<translation id="3820526221169548563">Enable the on-screen keyboard accessibility feature.

          If this policy is set to true, the on-screen keyboard will always be enabled.

          If this policy is set to false, the on-screen keyboard will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, the on-screen keyboard is disabled initially but can be enabled by the user at any time.</translation>
<translation id="382476126209906314">Configure the TalkGadget prefix for remote access hosts</translation>
<translation id="3831376478177535007">When this setting is enabled, <ph name="PRODUCT_NAME" /> allows certificates issued by Symantec Corporation's Legacy PKI operations to be trusted if they otherwise successfully validate and chain to a recognised CA certificate.

      Note that this policy depends on the operating system still recognising certificates from Symantec's legacy infrastructure. If an OS update changes the OS handling of such certificates, this policy no longer has effect. Further, this policy is intended as a temporary workaround to give enterprises more time to transition away from legacy Symantec certificates. This policy will be removed on or around 1 January 2019.

      If this policy is not set, or it is set to false, then <ph name="PRODUCT_NAME" /> follows the publicly announced deprecation schedule.

      See https://g.co/chrome/symantecpkicerts for more details on this deprecation.</translation>
<translation id="383466854578875212">Allows you to specify which native messaging hosts are not subject to the blacklist.

          A blacklist value of * means that all native messaging hosts are blacklisted and only native messaging hosts listed in the whitelist will be loaded.

          By default, all native messaging hosts are whitelisted, but if all native messaging hosts have been blacklisted by policy, the whitelist can be used to override that policy.</translation>
<translation id="384743459174066962">Allows you to set a list of url patterns that specify sites which are not allowed to open pop-ups.

          If this policy is left unset, the global default value will be used for all sites either from the 'DefaultPop-upsSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="3851039766298741586">Report information about the active kiosk session, such as
      application ID and version.

      If the policy is set to false, the kiosk session information will not be
      reported. If set to true or left unset, kiosk session information will be
      reported.</translation>
<translation id="3858658082795336534">Default printing duplex mode</translation>
<translation id="3859780406608282662">Add a parameter to the fetching of the Variations seed in <ph name="PRODUCT_OS_NAME" />.

      If specified, will add a query parameter called 'restrict' to the URL used to fetch the Variations seed. The value of the parameter will be the value specified in this policy.

      If not specified, will not modify the Variations seed URL.</translation>
<translation id="3863409707075047163">Minimum SSL version enabled</translation>
<translation id="3864020628639910082">Specifies the URL of the search engine used to provide search suggestions. The URL should contain the string '<ph name="SEARCH_TERM_MARKER" />', which will be replaced at query time by the text the user has entered so far.

          This policy is optional. If not set, no suggest URL will be used.

          Google's suggest URL can be specified as: <ph name="GOOGLE_SUGGEST_SEARCH_URL" />.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="3864129983143201415">Configure the allowed languages in a user session</translation>
<translation id="3866249974567520381">Description</translation>
<translation id="3868347814555911633">This policy is active in retail mode only.

      Lists extensions that are automatically installed for the Demo user, for devices in retail mode. These extensions are saved in the device and can be installed while offline, after the installation.

      Each list entry contains a dictionary that must include the extension ID in the 'extension-id' field, and its update URL in the 'update-url' field.</translation>
<translation id="3874773863217952418">Enable Tap to Search</translation>
<translation id="3877517141460819966">Integrated second factor authentication mode</translation>
<translation id="3879208481373875102">Configure list of force-installed web apps</translation>
<translation id="388237772682176890">This policy is deprecated in M53 and removed in M54, because SPDY/3.1 support is removed.

      Disables use of the SPDY protocol in <ph name="PRODUCT_NAME" />.

      If this policy is enabled the SPDY protocol will not be available in <ph name="PRODUCT_NAME" />.

      Setting this policy to disabled will allow the usage of SPDY.

      If this policy is left unset, SPDY will be available.</translation>
<translation id="3890999316834333174">Quick unlock policies</translation>
<translation id="3891357445869647828">Enable JavaScript</translation>
<translation id="3895557476567727016">Configures the default directory that <ph name="PRODUCT_NAME" /> will use for downloading files.

      If you set this policy, it will change the default directory that <ph name="PRODUCT_NAME" /> downloads files to. This policy is not mandatory, so the user will be able to change the directory.

      If you do not set this policy, <ph name="PRODUCT_NAME" /> will use its usual default directory (platform-specific).

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.</translation>
<translation id="3904459740090265495">This policy controls the sign-in behaviour of the browser. It allows you to specify if the user can sign in to <ph name="PRODUCT_NAME" /> with their account and use account-related services such as Chrome Sync.

      If the policy is set to 'Disable browser sign-in', the user cannot sign in to the browser and use account-based services. In this case browser-level features such as Chrome Sync cannot be used and will be unavailable. If the user was signed in and the policy is set 'Disabled', they will be signed out the next time that they run Chrome but their local profile data such as bookmarks, passwords, etc. will stay preserved. The user will still be able to sign in to and use Google web services such as Gmail.

      If the policy is set to 'Enable browser sign-in', the user is allowed to sign in to the browser and is automatically signed in to the browser when signed in to Google web services such as Gmail. Being signed in to the browser means that the user's account information will be kept by the browser. However, it does not mean that Chrome Sync will be turned on per default; the user must separately opt in to use this feature. Enabling this policy will prevent the user from turning off the setting that allows browser sign-in. To control the availability of Chrome Sync, use the 'SyncDisabled' policy.

      If the policy is set to 'Force browser sign-in', the user is presented with an account selection dialogue and has to choose and sign in to an account to use the browser. This ensures that for managed accounts the policies associated with the account are applied and enforced. By default this turns on Chrome Sync for the account, except for the case when sync was disabled by the domain admin or via the 'SyncDisabled' policy. The default value of BrowserGuestModeEnabled will be set to false. Note: Existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help centre article: https://support.google.com/chrome/a/answer/7572556.

      If this policy is not set then the user can decide if they want to enable the browser sign-in option and use it as they see fit.</translation>
<translation id="3911737181201537215">This policy has no effect on the logging done by Android.</translation>
<translation id="391531815696899618">Disables Google Drive syncing in the <ph name="PRODUCT_OS_NAME" /> Files app when set to True. In that case, no data is uploaded to Google Drive.

          If not set or set to False, then users will be able to transfer files to Google Drive.</translation>
<translation id="3915395663995367577">URL to a proxy .pac file</translation>
<translation id="3925377537407648234">Set display resolution and scale factor</translation>
<translation id="3939893074578116847">Send network packets to the management server to monitor online status, to allow
      the server to detect if the device is offline.

      If this policy is set to true, monitoring network packets (so-called <ph name="HEARTBEATS_TERM" />) will be sent.
      If set to false or unset, no packets will be sent.</translation>
<translation id="3950239119790560549">Update Time Restrictions</translation>
<translation id="3956686688560604829">Use Internet Explorer's SiteList policy for Legacy Browser Support.</translation>
<translation id="3958586912393694012">Allow Smart Lock to be used</translation>
<translation id="3963602271515417124">If true, remote attestation is allowed for the device and a certificate will automatically be generated and uploaded to the Device Management Server.

          If it is set to false, or if it is not set, no certificate will be generated and calls to the enterprise.platformKeys extension API will fail.</translation>
<translation id="3965339130942650562">Timeout until idle user log-out is executed</translation>
<translation id="3973371701361892765">Never auto-hide the shelf</translation>
<translation id="3984028218719007910">Determines whether <ph name="PRODUCT_OS_NAME" /> keeps local account data after logout. If set to true, no persistent accounts are kept by <ph name="PRODUCT_OS_NAME" /> and all data from the user session will be discarded after logout. If this policy is set to false or not configured, the device may keep (encrypted) local user data.</translation>
<translation id="398475542699441679">This policy controls whether to enable Legacy Browser Support.

      When this policy is left unset, or is set to false, Chrome will not attempt to launch designated URLs in an alternative browser.

      When this policy is set to true, Chrome will attempt to launch some URLs in an alternative browser (such as Internet Explorer). This feature is configured using the policies in the <ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" /> group.

      This feature is a replacement for the <ph name="LEGACY_BROWSER_SUPPORT_EXTENSION_NAME" /> extension. Configuration from the extension will carry over to this feature, but it is strongly advisable to use the Chrome policies instead. This ensures better compatibility in the future.</translation>
<translation id="3997519162482760140">URLs that will be granted access to video capture devices on SAML login pages</translation>
<translation id="4001275826058808087">IT admins for enterprise devices can use this flag to control whether to allow users to redeem offers through Chrome OS Registration.

      If this policy is set to true or left not set, users will be able to redeem offers through Chrome OS Registration.

      If this policy is set to false, user will not be able to redeem offers.</translation>
<translation id="4008507541867797979">If this policy is set to true or not configured, <ph name="PRODUCT_OS_NAME" /> will show existing users on the login screen and allow to pick one.

      If this policy is set to false, <ph name="PRODUCT_OS_NAME" /> will not show existing users on the login screen. The normal sign-in screen (prompting for the user email and password or phone) or the SAML interstitial screen (if enabled via the <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> policy) will be shown, unless a Managed Session is configured. When a Managed Session is configured, only the Managed Session accounts will be shown, allowing to pick one of them.

      Note that this policy does not affect whether the device keeps or discards the local user data.</translation>
<translation id="4010738624545340900">Allow invocation of file selection dialogues</translation>
<translation id="4012737788880122133">Disables automatic updates when set to True.

      <ph name="PRODUCT_OS_NAME" /> devices automatically check for updates when this setting is not configured or set to False.

      Warning: It is recommended to keep auto-updates enabled so that users receive software updates and critical security fixes. Turning off auto-updates might leave users at risk.</translation>
<translation id="4020682745012723568">Cookies transferred to the user's profile are not accessible to Android apps.</translation>
<translation id="402759845255257575">Do not allow any site to run JavaScript</translation>
<translation id="4027608872760987929">Enable the default search provider</translation>
<translation id="4039085364173654945">Controls whether third-party sub-content on a page is allowed to pop up an HTTP Basic Auth dialogue box.

          Typically this is disabled as a phishing defence. If this policy is not set, this is disabled and third-party sub-content will not be allowed to pop up a HTTP Basic Auth dialogue box.</translation>
<translation id="4056910949759281379">Disable SPDY protocol</translation>
<translation id="4059515172917655545">This policy controls the availability of Google Location services.

      When this policy is not configured or set to <ph name="GLS_DISABLED" />, Google Location services are disabled and cannot be facilitated by the user.

      When this policy is set to <ph name="GLS_UNDER_USER_CONTROL" />, the user is asked to choose whether they want to use Google Location services. This will allow Android apps to use the services to query the device location, and will also enable submitting of anonymous location data to Google.

      Note: When the <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME" /> policy is set to <ph name="BLOCK_GEOLOCATION_SETTING" />, this policy is ignored and Google Location services are always disabled.</translation>
<translation id="408029843066770167">Allow queries to a Google time service</translation>
<translation id="408076456549153854">Enable browser sign-in</translation>
<translation id="4088589230932595924">Incognito mode forced.</translation>
<translation id="4088983553732356374">Allows you to set whether websites are allowed to set local data. Setting local data can be either allowed for all websites or denied for all websites.

          If this policy is set to 'Keep cookies for the duration of the session' then cookies will be cleared when the session closes. Note that if <ph name="PRODUCT_NAME" /> is running in 'background mode', the session may not close when the last window is closed. Please see the 'BackgroundModeEnabled' policy for more information about configuring this behaviour.

          If this policy is left not set, 'AllowCookies' will be used and the user will be able to change it.</translation>
<translation id="4103289232974211388">Redirect to SAML IdP after user confirmation</translation>
<translation id="410478022164847452">Specifies the length of time without user input after which the idle action is taken when running on AC power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> takes the idle action, which can be configured separately.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds.</translation>
<translation id="4105989332710272578">Disable Certificate Transparency enforcement for a list of URLs</translation>
<translation id="4121350739760194865">Prevent app promotions from appearing on the new tab page</translation>
<translation id="412697421478384751">Enable users to set weak PINs for the lock screen PIN</translation>
<translation id="4138655880188755661">Time Limit</translation>
<translation id="4150201353443180367">Display</translation>
<translation id="4157003184375321727">Report OS and firmware version</translation>
<translation id="4157594634940419685">Allow access to native CUPS printers</translation>
<translation id="4183229833636799228">Default <ph name="FLASH_PLUGIN_NAME" /> setting</translation>
<translation id="4192388905594723944">URL for validating remote access client authentication token</translation>
<translation id="4203389617541558220">Limit the device uptime by scheduling automatic reboots.

      When this policy is set, it specifies the length of device uptime after which an automatic reboot is scheduled.

      When this policy is not set, the device uptime is not limited.

      If you set this policy, users cannot change or override it.

      An automatic reboot is scheduled at the selected time but may be delayed on the device by up to 24 hours if a user is currently using the device.

      Note: Currently, automatic reboots are only enabled while the login screen is being shown or a Kiosk app session is in progress. This will change in the future and the policy will always apply, regardless of whether a session of any particular type is in progress or not.

      The policy value should be specified in seconds. Values are clamped to be at least 3600 (one hour).</translation>
<translation id="4203879074082863035">Only printers in the whitelist are shown to users</translation>
<translation id="420512303455129789">A dictionary mapping URLs to a boolean flag specifying whether access to the host should be allowed (true) or blocked (false).

          This policy is for internal use by <ph name="PRODUCT_NAME" /> itself.</translation>
<translation id="4224610387358583899">Screen lock delays</translation>
<translation id="423797045246308574">Allows you to set a list of URL patterns that specify sites which are not allowed to use key generation. If a URL pattern is in 'KeygenAllowedForUrls', this policy overrides these exceptions.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set or the user's personal configuration otherwise.</translation>
<translation id="4239720644496144453">The cache is not used for Android apps. If multiple users install the same Android app, it will be downloaded anew for each user.</translation>
<translation id="4243336580717651045">Enable URL-keyed anonymised data collection in <ph name="PRODUCT_NAME" /> and prevents users from changing this setting.

      URL-keyed anonymised data collection sends URLs of pages that the user visits to Google to make searches and browsing better.

      If you enable this policy, URL-keyed anonymised data collection is always active.

      If you disable this policy, URL-keyed anonymised data collection is never active.

      If this policy is left not set, URL-keyed anonymised data collection will be enabled but the user will be able to change it.</translation>
<translation id="4250680216510889253">No</translation>
<translation id="4261820385751181068">Device sign-in screen locale</translation>
<translation id="427220754384423013">Specifies the printers which a user can use.

      This policy is only used if <ph name="PRINTERS_WHITELIST" /> is chosen for <ph name="BULK_PRINTERS_ACCESS_MODE" />.

      If this policy is used, only the printers with ids matching the values in this policy are available to the user. The ids must correspond to the 'id' or 'guid' fields in the file specified in <ph name="BULK_PRINTERS_POLICY" />.
      </translation>
<translation id="427632463972968153">Specifies the parameters used when doing image search with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {imageThumbnail} in above example, it will be replaced with real image thumbnail data.

          This policy is optional. If not set, image search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="4285674129118156176">Allow unaffiliated users to use ARC</translation>
<translation id="4298509794364745131">Specifies list of apps that can be enabled as a note-taking app on the <ph name="PRODUCT_OS_NAME" /> lock screen.

      If the preferred note-taking app is enabled on the lock screen, the lock screen will contain UI element for launching the preferred note taking app.
      When launched, the app will be able to create an app window on top of the lock screen and create data items (notes) in the lock screen context. The app will be able to import created notes to the primary user session, when the session is unlocked. Currently, only Chrome note-taking apps are supported on the lock screen.

      If the policy is set, the user will be allowed to enable an app on the lock screen only if the app's extension ID is contained in the policy list value.
      As a consequence, setting this policy to an empty list will disable note-taking on the lock screen entirely.
      Note that the policy containing an app ID does not necessarily mean that the user will be able to enable the app as a note-taking app on the lock screen - for example, on Chrome 61, the set of available apps is additionally restricted by the platform.

      If the policy is left unset, there will be no restrictions on the set of apps the user can enable on the lock screen imposed by the policy.</translation>
<translation id="4309640770189628899">Whether DHE cipher suites in TLS are enabled</translation>
<translation id="4322842393287974810">Allow the auto launched with zero delay kiosk app to control <ph name="PRODUCT_OS_NAME" /> version</translation>
<translation id="4325690621216251241">Add a logout button to the system tray</translation>
<translation id="4332177773549877617">Log events for Android app installs</translation>
<translation id="4346674324214534449">Allows you to set whether ads should be blocked on sites with intrusive ads.

      If this policy is set to 2, ads will be blocked on sites with intrusive ads.
      However, this behaviour will not trigger if SafeBrowsingEnabled policy is set to False.
      If this policy is set to 1, ads will not be blocked on sites with intrusive ads.
      If this policy is left not set, 2 will be used.</translation>
<translation id="4347908978527632940">If true and the user is a supervised user, then other Android apps can query the user's web restrictions through a content provider.

          If false or unset, then the content provider returns no information.</translation>
<translation id="435461861920493948">Contains a list of patterns which are used to control the visiblity of accounts in <ph name="PRODUCT_NAME" />.

      Each Google account on the device will be compared to patterns stored in this policy to determine the account visibility in <ph name="PRODUCT_NAME" />. The account will be visible if its name matches any pattern on the list. Otherwise, the account will be hidden.

      Use the wildcard character '*' to match zero or more arbitrary characters. The escape character is '\', so to match actual '*' or '\' characters, put a '\' in front of them.

      If this policy is not set, all Google accounts on the device will be visible in <ph name="PRODUCT_NAME" />.</translation>
<translation id="436581050240847513">Report device network interfaces</translation>
<translation id="4372704773119750918">Do not allow enterprise user to be part of multiprofile (primary or secondary)</translation>
<translation id="4377599627073874279">Allow all sites to show all images</translation>
<translation id="437791893267799639">Policy unset, disallow data migration and ARC</translation>
<translation id="4389091865841123886">Configure the remote attestation with TPM mechanism.</translation>
<translation id="4408428864159735559">List of pre-configured network file shares.</translation>
<translation id="4410236409016356088">Enable throttling network bandwidth</translation>
<translation id="441217499641439905">Disable Google Drive over mobile connections in the <ph name="PRODUCT_OS_NAME" /> Files app</translation>
<translation id="4418726081189202489">Setting this policy to false stops <ph name="PRODUCT_NAME" /> from occasionally sending queries to a Google server to retrieve an accurate timestamp. These queries will be enabled if this policy is set to True or is not set.</translation>
<translation id="4423597592074154136">Manually specify proxy settings</translation>
<translation id="4429220551923452215">Enables or disables the apps shortcut in the bookmark bar.

      If this policy is not set then the user can choose to show or hide the apps shortcut from the bookmark bar context menu.

      If this policy is configured then the user can't change it, and the apps shortcut is always shown or never shown.</translation>
<translation id="4432762137771104529">Enable Safe Browsing Extended Reporting</translation>
<translation id="443454694385851356">Legacy (insecure)</translation>
<translation id="443665821428652897">Clear site data on browser shutdown (deprecated)</translation>
<translation id="4439132805807595336">Enable this device to run PluginVm.

      If the policy is set to false or left unset, <ph name="PLUGIN_VM_NAME" /> is not enabled for the device. If set to true, <ph name="PLUGIN_VM_NAME" /> is enabled for the device as long as other settings also allow it. <ph name="PLUGIN_VM_ALLOWED_POLICY_NAME" /> needs to be true, <ph name="PLUGIN_VM_LICENSE_KEY_POLICY_NAME" /> and <ph name="PLUGIN_VM_IMAGE_POLICY_NAME" /> need to be set for <ph name="PLUGIN_VM_NAME" /> to be allowed to run.</translation>
<translation id="4439336120285389675">Specify a list of deprecated web platform features to re-enable temporarily.

      This policy gives administrators the ability to re-enable deprecated web platform features for a limited time. Features are identified by a string tag and the features corresponding to the tags included in the list specified by this policy will get re-enabled.

      If this policy is left not set or the list is empty or does not match one of the supported string tags, all deprecated web platform features will remain disabled.

      While the policy itself is supported on the above platforms, the feature that it is enabling may be available on fewer platforms. Not all deprecated Web Platform features can be re-enabled. Only the ones explicitly listed below can be for a limited period of time, which is different per feature. The general format of the string tag will be [DeprecatedFeatureName]_EffectiveUntil[yyyymmdd]. As reference, you can find the intent behind the Web Platform feature changes at https://bit.ly/blinkintents.
      </translation>
<translation id="4442582539341804154">Enable lock when the device become idle or suspended</translation>
<translation id="4449545651113180484">Rotate screen clockwise by 270 degrees</translation>
<translation id="4454820008017317557">Show the <ph name="PRODUCT_NAME" /> toolbar icon</translation>
<translation id="4467952432486360968">Block third-party cookies</translation>
<translation id="4474167089968829729">Enable saving passwords to the password manager</translation>
<translation id="4476769083125004742">If this policy is set to <ph name="BLOCK_GEOLOCATION_SETTING" />, Android apps cannot access location information. If you set this policy to any other value or leave it unset, the user is asked to consent when an Android app wants to access location information.</translation>
<translation id="4480694116501920047">Force SafeSearch</translation>
<translation id="4482640907922304445">Shows the Home button on <ph name="PRODUCT_NAME" />'s toolbar.

      If you enable this setting, the Home button is always shown.

      If you disable this setting, the Home button is never shown.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

      Leaving this policy unset will allow the user to choose whether to show the home button.</translation>
<translation id="4483649828988077221">Disable Auto Update</translation>
<translation id="4485425108474077672">Configure the New Tab page URL</translation>
<translation id="4492287494009043413">Disable taking screenshots</translation>
<translation id="449423975179525290">Configure <ph name="PLUGIN_VM_NAME" />-related policies.</translation>
<translation id="450537894712826981">Configures the cache size that <ph name="PRODUCT_NAME" /> will use for storing cached media files on the disk.

      If you set this policy, <ph name="PRODUCT_NAME" /> will use the provided cache size regardless of whether the user has specified the '--media-cache-size' flag or not. The value specified in this policy is not a hard boundary but rather a suggestion to the caching system, any value below a few megabytes is too small and will be rounded up to a sane minimum.

      If the value of this policy is 0, the default cache size will be used but the user will not be able to change it.

      If this policy is not set, the default size will be used and the user will be able to override it with the --media-cache-size flag.</translation>
<translation id="4508686775017063528">If this policy is set to true or is not set, <ph name="PRODUCT_NAME" /> will be enabled, and users will be able to launch it from the app menu, page context menus, media controls on Cast-enabled websites and (if shown), the cast toolbar icon.

          If this policy set to false, <ph name="PRODUCT_NAME" /> will be disabled.</translation>
<translation id="4515404363392014383">Enable Safe Browsing for trusted sources</translation>
<translation id="4518251772179446575">Ask whenever a site wants to track the users' physical location</translation>
<translation id="4519046672992331730">Enables search suggestions in <ph name="PRODUCT_NAME" />'s omnibox and prevents users from changing this setting.

      If you enable this setting, search suggestions are used.

      If you disable this setting, search suggestions are never used.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

      If this policy is left not set, this will be enabled but the user will be able to change it.</translation>
<translation id="4531706050939927436">Android apps can be force-installed from the Google Admin console using Google Play. They do not use this policy.</translation>
<translation id="4534500438517478692">Android restriction name:</translation>
<translation id="4541530620466526913">Device-local accounts</translation>
<translation id="4544079461524242527">Configures extension management settings for <ph name="PRODUCT_NAME" />.

          This policy controls multiple settings, including settings controlled by any existing extension-related policies. This policy will override any legacy policies if both are set.

          This policy maps an extension ID or an update URL to its configuration. With an extension ID, configuration will be applied to the specified extension only. A default configuration can be set for the special ID <ph name="DEFAULT_SCOPE" />, which will apply to all extensions that don't have a custom configuration set in this policy. With an update URL, configuration will be applied to all extensions with the exact update URL stated in manifest of this extension, as described at <ph name="LINK_TO_EXTENSION_DOC1" />.

          For a full description of possible settings and structure of this policy please visit https://www.chromium.org/administrators/policy-list-3/extension-settings-full
          </translation>
<translation id="4554651132977135445">User policy loopback processing mode</translation>
<translation id="4554841826517980623">This policy controls whether the Network File Shares feature for <ph name="PRODUCT_NAME" /> should use the <ph name="NETBIOS_PROTOCOL" /> to discover shares on the network.
      When this policy is set to True, share discovery will use the <ph name="NETBIOS_PROTOCOL" /> protocol to discover shares on the network.
      When this policy is set to False, share discovery will not use the <ph name="NETBIOS_PROTOCOL" /> protocol to discover shares.
      If the policy is left not set, the default is disabled for enterprise-managed users and enabled for non-managed users.</translation>
<translation id="4555850956567117258">Enable remote attestation for the user</translation>
<translation id="4557134566541205630">Default search provider new tab page URL</translation>
<translation id="4567137030726189378">Allow usage of the Developer Tools</translation>
<translation id="4600786265870346112">Enable large cursor</translation>
<translation id="4604931264910482931">Configure native messaging blacklist</translation>
<translation id="4613508646038788144">If the policy is set to false then third-party software will be allowed to inject executable code into Chrome's processes. If the policy is unset or set to true then third-party software will be prevented from injecting executable code into Chrome's processes.</translation>
<translation id="4617338332148204752">Skip the meta tag check in <ph name="PRODUCT_FRAME_NAME" /></translation>
<translation id="4625915093043961294">Configure extension installation whitelist</translation>
<translation id="4632343302005518762">Allow <ph name="PRODUCT_FRAME_NAME" /> to handle the listed content types</translation>
<translation id="4632566332417930481">Disallow usage of the Developer Tools on extensions installed by enterprise policy; allow usage of the Developer Tools in other contexts</translation>
<translation id="4633786464238689684">Changes the default behaviour of the top row keys to function keys.

          If this policy is set to true, the keyboard's top row of keys will produce function key commands by default. The search key has to be pressed to revert their behaviour back to media keys.

          If this policy is set to false or left unset, the keyboard will produce media key commands by default and function key commands when the search key is held.</translation>
<translation id="4639407427807680016">Names of the native messaging hosts to be exempt from the blacklist</translation>
<translation id="4650759511838826572">Disable URL protocol schemes</translation>
<translation id="465099050592230505">Enterprise web store URL (deprecated)</translation>
<translation id="4665897631924472251">Extension management settings</translation>
<translation id="4668325077104657568">Default images setting</translation>
<translation id="4670865688564083639">Minimum:</translation>
<translation id="4671708336564240458">Allows you to set whether sites with abusive experiences should be prevented from opening new windows or tabs.

      If this policy is set to True, sites with abusive experiences will be prevented from opening new windows or tabs.
      However, this behaviour will not trigger if SafeBrowsingEnabled policy is set to False.
      If this policy is set to False, sites with abusive experiences will be allowed to open new windows or tabs.
      If this policy is left not set, True will be used.</translation>
<translation id="467236746355332046">Supported features:</translation>
<translation id="4674167212832291997">Customise the list of URL patterns that should always be rendered by <ph name="PRODUCT_FRAME_NAME" />.

          If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy.

          For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
<translation id="467449052039111439">Open a list of URLs</translation>
<translation id="4674871290487541952">Allow insecure algorithms in integrity checks on extension updates and installations</translation>
<translation id="4680936297850947973">Deprecated in M68. Use DefaultPopupsSetting instead.

      For a full explanation, see https://www.chromestatus.com/features/5675755719622656.
      If this policy is enabled, sites will be allowed to simultaneously navigate and open new windows/tabs.
      If this policy is disabled or not set, sites will be disallowed from simultaneously navigating and opening a new window/tab.</translation>
<translation id="4680961954980851756">Enable AutoFill</translation>
<translation id="4703402283970867140">Enable smart dim model to extend the time until the screen is dimmed</translation>
<translation id="4722122254122249791">Enable Site Isolation for specified origins</translation>
<translation id="4722399051042571387">If false, users will be unable to set PINs which are weak and easy to guess.

          Some example weak PINs: PINs containing only one digit (1111), PINs whose digits are increasing by 1 (1234), PINs whose digits are decreasing by 1 (4321) and PINs which are commonly used.

          By default, users will get a warning, not error, if the PIN is considered weak.</translation>
<translation id="4723829699367336876">Enable firewall traversal from remote access client</translation>
<translation id="4725528134735324213">Enable Android Backup Service</translation>
<translation id="4725801978265372736">Require that the name of the local user and the remote access host owner match</translation>
<translation id="4733471537137819387">Policies related to integrated HTTP authentication.</translation>
<translation id="4744190513568488164">Servers that <ph name="PRODUCT_NAME" /> may delegate to.

          Separate multiple server names with commas. Wildcards (*) are allowed.

          If you leave this policy unset <ph name="PRODUCT_NAME" /> will not delegate user credentials even if a server is detected as Intranet.</translation>
<translation id="4752880493649142945">Client certificate for connecting to RemoteAccessHostTokenValidationUrl</translation>
<translation id="4757671984625088193">If this is set to true or unset, <ph name="PRODUCT_NAME" /> will suggest pages related to the current page.
      These suggestions are fetched remotely from Google servers.

      If this setting is set to false, suggestions will not be fetched or displayed.</translation>
<translation id="4788252609789586009">Enables <ph name="PRODUCT_NAME" />'s Auto-Fill feature and allows users to auto-complete credit card information in web forms using previously stored information.

      If this setting is disabled, Auto-fill will never suggest or fill in credit card information, nor will it save additional credit card information that the user might submit while browsing the web.

      If this setting is enabled or has no value, the user will be able to control Auto-fill for credit cards in the UI.</translation>
<translation id="4791031774429044540">Enable the large cursor accessibility feature.

          If this policy is set to true, the large cursor will always be enabled.

          If this policy is set to false, the large cursor will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, the large cursor is disabled initially but can be enabled by the user at any time.</translation>
<translation id="4802905909524200151">Configure <ph name="TPM_FIRMWARE_UPDATE_TPM" /> firmware update behaviour</translation>
<translation id="4807950475297505572">Least recently used users are removed until there is enough free space</translation>
<translation id="4815725774537609998">This policy is deprecated, use ProxyMode instead.

          Allows you to specify the proxy server used by <ph name="PRODUCT_NAME" /> and prevents users from changing proxy settings.

          If you choose to never use a proxy server and always connect directly, all other options are ignored.

          If you choose to use system proxy settings or auto detect the proxy server, all other options are ignored.

          If you choose manual proxy settings, you can specify further options in 'Address or URL of proxy server', 'URL to a proxy .pac file' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL" />.

          If you enable this setting, <ph name="PRODUCT_NAME" /> ignores all proxy-related options specified from the command line.

          Leaving this policy unset will allow the users to choose the proxy settings on their own.</translation>
<translation id="4816674326202173458">Allow enterprise user to be both primary and secondary  (Default behaviour for non-managed users)</translation>
<translation id="4826326557828204741">Action to take when the idle delay is reached while running on battery power</translation>
<translation id="4834526953114077364">Least recently used users who have not logged in within the last 3 months are removed until there is enough free space</translation>
<translation id="4858735034935305895">Allow fullscreen mode</translation>
<translation id="4861767323695239729">Configure the allowed input methods in a user session</translation>
<translation id="487460824085252184">Migrate automatically, don’t ask for user consent.</translation>
<translation id="4874982543810021567">Block WebUSB on these sites</translation>
<translation id="4876805738539874299">Maximum SSL version enabled</translation>
<translation id="4897928009230106190">Specifies the parameters used when doing suggestion search with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {searchTerms} in above example, it will be replaced with real search terms data.

          This policy is optional. If not set, suggest search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="489803897780524242">Parameter controlling search term placement for the default search provider</translation>
<translation id="4899708173828500852">Enable Safe Browsing</translation>
<translation id="4899802251198446659">Allows you to control whether videos with audio content can play automatically (without user consent) <ph name="PRODUCT_NAME" />.

      If the policy is set to True, <ph name="PRODUCT_NAME" /> is allowed to auto-play media.
      If the policy is set to False, <ph name="PRODUCT_NAME" /> is not allowed to auto-play media. The Auto-PlayWhitelist policy can be used to override this for certain URL patterns.
      By default, <ph name="PRODUCT_NAME" /> is not allowed to auto-play media. The Auto-PlayWhitelist policy can be used to override this for certain URL patterns.

      Note that if <ph name="PRODUCT_NAME" /> is running and this policy changes, it will only be applied to newly opened tabs. Therefore, some tabs might still observe the previous behaviour.
      </translation>
<translation id="4906194810004762807">Refresh rate for Device Policy</translation>
<translation id="4917385247580444890">Strong</translation>
<translation id="4923806312383904642">Allow WebDriver to Override Incompatible Policies</translation>
<translation id="494613465159630803">Cast Receiver</translation>
<translation id="4962262530309732070">If this policy is set to true or not configured, <ph name="PRODUCT_NAME" /> will allow Add Person from the user manager.

      If this policy is set to false, <ph name="PRODUCT_NAME" /> will not allow creation of new profiles from the user manager.</translation>
<translation id="4970855112942626932">Disable browser sign-in</translation>
<translation id="4978405676361550165">If 'OffHours' policy is set, then the specified device policies are ignored (use the default settings of these policies) during the defined time intervals. Device policies are re-applied by Chrome on every event when 'OffHours' period starts or ends. User will be notified and forced to sign out when 'OffHours' time end and device policy settings are changed (e.g. when user is logged in with an unallowed account).</translation>
<translation id="4980635395568992380">Data Types</translation>
<translation id="4983201894483989687">Allow running plug-ins that are outdated</translation>
<translation id="4988291787868618635">Action to take when the idle delay is reached</translation>
<translation id="4995548127349206948">Whether NTLMv2 authentication is enabled.</translation>
<translation id="5047604665028708335">Allow access to sites outside of content packs</translation>
<translation id="5052081091120171147">This policy forces the browsing history to be imported from the current default browser, if enabled. If enabled, this policy also affects the import dialogue.

      If disabled, no browsing history is imported.

      If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
<translation id="5056708224511062314">Screen magnifier disabled</translation>
<translation id="5058573563327660283">Select the strategy used to free up disk space during automatic clean-up (deprecated)</translation>
<translation id="5067143124345820993">Login user white list</translation>
<translation id="5068140065960598044"><ph name="PRODUCT_NAME" /> cloud policy overrides Machine policy.</translation>
<translation id="5076274878326940940">Enables the use of a default search provider.

          If you enable this setting, a default search is performed when the user types text in to the omnibox that is not a URL.

          You can specify the default search provider to be used by setting the rest of the default search policies. If these are left empty, the user can choose the default provider.

          If you disable this setting, no search is performed when the user enters non-URL text in to the omnibox.

          If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

          If this policy is left not set, the default search provider is enabled, and the user will be able to set the search provider list.

          This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="5085647276663819155">Disable Print Preview</translation>
<translation id="5090209345759901501">Extend Flash content setting to all content</translation>
<translation id="5093540029655764852">Specifies the rate (in days) at which a client changes their machine account password. The password is randomly generated by the client and not visible to the user.

      Just like user passwords, machine passwords should be changed regularly. Disabling this policy or setting a high number of days can have a negative impact on security since it gives potential attackers more time to find the machine account password and use it.

      If the policy is unset, the machine account password is changed every 30 days.

      If the policy is set to 0, machine account password change is disabled.

      Note that passwords might get older than the specified number of days if the client has been offline for a longer period of time.</translation>
<translation id="5105313908130842249">Screen lock delay when running on battery power</translation>
<translation id="5108031557082757679">Disabled enterprise device printers</translation>
<translation id="5113732180192599620">This policy controls the list of websites that will never cause a browser switch.

      Note that elements can also be added to this list through the <ph name="USE_IE_SITELIST_POLICY_NAME" /> and <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" /> policies.

      When this policy is left unset, no websites are added to the list.

      When this policy is set, each item is treated as a rule, similar to the <ph name="URL_LIST_POLICY_NAME" /> policy. However, the logic is reversed: rules that match will not open an alternative browser.

      Unlike <ph name="URL_LIST_POLICY_NAME" />, rules apply to both directions. That is, when the Internet Explorer add-in is present and enabled, it also controls whether <ph name="IE_PRODUCT_NAME" /> should open these URLs in <ph name="PRODUCT_NAME" />.</translation>
<translation id="5130288486815037971">Whether RC4 cipher suites in TLS are enabled</translation>
<translation id="5141670636904227950">Set the default screen magnifier type enabled on the login screen</translation>
<translation id="5142301680741828703">Always render the following URL patterns in <ph name="PRODUCT_FRAME_NAME" /></translation>
<translation id="5148753489738115745">Allows you to specify additional parameters that are used when <ph name="PRODUCT_FRAME_NAME" /> launches <ph name="PRODUCT_NAME" />.

          If this policy is not set the default command line will be used.</translation>
<translation id="5159469559091666409">How frequently monitoring network packets are sent, in milliseconds.

      If this policy is unset, the default interval is 3 minutes. The minimum
      interval is 30 seconds and the maximum interval is 24 hours – values
      outside of this range will be clamped to this range.</translation>
<translation id="5163002264923337812">Enable the old web-based sign-in flow</translation>
<translation id="5182055907976889880">Configure Google Drive in <ph name="PRODUCT_OS_NAME" />.</translation>
<translation id="5183383917553127163">Allows you to specify which extensions are not subject to the blacklist.

          A blacklist value of * means all extensions are blacklisted and users can only install extensions listed in the whitelist.

          By default, all extensions are whitelisted, but if all extensions have been blacklisted by policy, the whitelist can be used to override that policy.</translation>
<translation id="519247340330463721">Configure Safe Browsing related policies.</translation>
<translation id="5192837635164433517">Enables the use of alternative error pages that are built into <ph name="PRODUCT_NAME" /> (such as 'page not found') and prevents users from changing this setting.

      If you enable this setting, alternative error pages are used.

      If you disable this setting, alternative error pages are never used.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

      If this policy is left unset, this will be enabled but the user will be able to change it.</translation>
<translation id="5196805177499964601">Block developer mode.

      If this policy is set to True, <ph name="PRODUCT_OS_NAME" /> will prevent the device from booting into developer mode. The system will refuse to boot and show an error screen when the developer switch is turned on.

      If this policy is unset or set to False, developer mode will remain available for the device.</translation>
<translation id="520403427390290017">The tab life cycles feature reclaims CPU and eventually memory associated with running tabs that have not been used in a long period of time, by first throttling them, then freezing them and finally discarding them.

      If the policy is set to false then tab lifecycles are disabled, and all tabs will be left running normally.

      If the policy is set to true or left unspecified then tab life cycles are enabled.</translation>
<translation id="5207823059027350538">Configures the default new tab page URL and prevents users from changing it.

          The new tab page is the page opened when new tabs are created (including the one opened in new windows).

          This policy does not decide which pages are to be opened on start up. Those are controlled by the <ph name="RESTORE_ON_STARTUP_POLICY_NAME" /> policies. Yet this policy does affect the homepage if that is set to open the new tab page, as well as the start-up page if that is set to open the new tab page.

          If the policy is not set or left empty the default new tab page is used.

          This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="5208240613060747912">Allows you to set a list of url patterns that specify sites which are not allowed to display notifications.

          If this policy is left unset the global default value will be used for all sites either from the 'DefaultNotificationsSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="5213038356678567351">Websites that should never trigger a browser switch.</translation>
<translation id="5219844027738217407">For Android apps, this policy affects the microphone only. When this policy is set to true, the microphone is muted for all Android apps, with no exceptions.</translation>
<translation id="5228316810085661003">The device-local account auto-login delay.

      If the |DeviceLocalAccountAutoLoginId| policy is unset, this policy has no effect. Otherwise:

      If this policy is set, it determines the amount of time without user activity that should elapse before automatically logging into the device-local account specified by the |DeviceLocalAccountAutoLoginId| policy.

      If this policy is unset, 0 milliseconds will be used as the timeout.

      This policy is specified in milliseconds.</translation>
<translation id="523505283826916779">Accessibility settings</translation>
<translation id="5247006254130721952">Block dangerous downloads</translation>
<translation id="5248863213023520115">Sets encryption types that are allowed when requesting Kerberos tickets from an <ph name="MS_AD_NAME" /> server.

      If the policy is set to 'All', both the AES encryption types 'aes256-cts-hmac-sha1-96' and 'aes128-cts-hmac-sha1-96' as well as the RC4 encryption type 'rc4-hmac' are allowed. AES encryption takes preference if the server supports both types. Note that RC4 is insecure and the server should be reconfigured if possible to support AES encryption.

      If the policy is set to 'Strong' or if it is unset, only the AES encryption types are allowed.

      If the policy is set to 'Legacy', only the RC4 encryption type is allowed. This option is insecure and should only be needed in very specific circumstances.

      See also https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation>
<translation id="5255162913209987122">Can be Recommended</translation>
<translation id="527237119693897329">Allows you to specify which native messaging hosts should not be loaded.

          A blacklist value of '*' means that all native messaging hosts are blacklisted unless they are explicitly listed in the whitelist.

          If this policy is left not set <ph name="PRODUCT_NAME" /> will load all installed native messaging hosts.</translation>
<translation id="5272684451155669299">If true, the user can use the hardware on Chrome devices to remotely attest its identity to the privacy CA via the <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> using <ph name="CHALLENGE_USER_KEY_FUNCTION" />.

          If it is set to false, or if it is not set, calls to the API will fail with an error code.</translation>
<translation id="5277806246014825877">Enable this user to run Crostini.

      If the policy is set to false, Crostini is not enabled for the user.
      If set to true or left unset, Crostini is enabled for the user as long as other settings also allow it.
      All three policies, VirtualMachinesAllowed, CrostiniAllowed and DeviceUnaffiliatedCrostiniAllowed need to be true when they apply for Crostini to be allowed to run.
      When this policy is changed to false, it applies to starting new Crostini containers but does not shut down containers which are already running.</translation>
<translation id="5283457834853986457">Disable plug-in finder (deprecated)</translation>
<translation id="5288772341821359899">If the policy is set, the UDP port range used by WebRTC is restricted to the specified port interval (endpoints included).

      If the policy is not set, or if it is set to the empty string or an invalid port range, WebRTC is allowed to use any available local UDP port.</translation>
<translation id="5290940294294002042">Specify a list of plug-ins that the user can enable or disable</translation>
<translation id="5304269353650269372">Specifies the length of time without user input after which a warning dialogue is shown when running on battery power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> shows a warning dialogue telling the user that the idle action is about to be taken.

          When this policy is unset, no warning dialogue is shown.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.</translation>
<translation id="5307432759655324440">Incognito mode availability</translation>
<translation id="5318185076587284965">Enable the use of relay servers by the remote access host</translation>
<translation id="5323128137188992869">Allow content to be cast to the device using <ph name="PRODUCT_NAME" />.

          If this policy is set to False, users will not be able to cast content to their device. If this policy is set to True, users are allowed to cast content. If this policy is not set, users are not allowed to cast content to enrolled Chrome OS devices, but can cast to non-enrolled devices.</translation>
<translation id="5329007337159326804">Warning: The max TLS version policy will be entirely removed from <ph name="PRODUCT_NAME" /> around version 75 (around June 2019).

      If this policy is not configured, then <ph name="PRODUCT_NAME" /> uses the default maximum version.

      Otherwise it may be set to one of the following values: 'tls1.2' or 'tls1.3'. When set, <ph name="PRODUCT_NAME" /> will not use SSL/TLS versions greater than the specified version. An unrecognised value will be ignored.</translation>
<translation id="5330684698007383292">Allow <ph name="PRODUCT_FRAME_NAME" /> to handle the following content types</translation>
<translation id="5365476955714838841">Command-line parameters for the alternative browser.</translation>
<translation id="5365946944967967336">Show Home button on the toolbar</translation>
<translation id="5366745336748853475">Allows you to specify a list of URL patterns that specify sites for which a client certificate is automatically selected on the sign-in screen in the frame hosting the SAML flow, if the site requests a certificate. An example usage is to configure a device-wide certificate to be presented to the SAML IdP.

      The value must be an array of stringified JSON dictionaries. Each dictionary must have the form { 'pattern': '$URL_PATTERN, 'filter' : $FILTER }, where $URL_PATTERN is a content setting pattern. $FILTER restricts from which client certificates the browser will automatically select. Independent of the filter, only certificates will be selected that match the server's certificate request. If $FILTER has the form { 'ISSUER': { 'CN': '$ISSUER_CN' } }, additionally only client certificates are selected that are issued by a certificate with the CommonName $ISSUER_CN. If $FILTER is the empty dictionary {}, the selection of client certificates is not additionally restricted.

      If this policy is left not set, no auto-selection will be done for any site.</translation>
<translation id="5366977351895725771">If set to false, supervised-user creation by this user will be disabled. Any existing supervised users will still be available.

          If set to true or not configured, supervised users can be created and managed by this user.</translation>
<translation id="5369937289900051171">Colour printing only</translation>
<translation id="5370279767682621504">Enable HTTP/0.9 support on non-default ports</translation>
<translation id="5378985487213287085">Allows you to set whether websites are allowed to display desktop notifications. Displaying desktop notifications can be allowed by default, denied by default or the user can be asked every time a website wants to show desktop notifications.

          If this policy is left not set, 'AskNotifications' will be used and the user will be able to change it.</translation>
<translation id="538108065117008131">Allow <ph name="PRODUCT_FRAME_NAME" /> to handle the following content types.</translation>
<translation id="5391388690191341203">Device-local account for auto-login</translation>
<translation id="5392172595902933844">Information about the status of Android is sent back to the
      server.

      If the policy is set to false or left unset, no status information is reported.
      If set to true, status information is reported.

      This policy only applies if Android apps are enabled.</translation>
<translation id="5395271912574071439">Enables curtaining of remote access hosts while a connection is in progress.

          If this setting is enabled, then hosts' physical input and output devices are disabled while a remote connection is in progress.

          If this setting is disabled or not set, then both local and remote users can interact with the host when it is being shared.</translation>
<translation id="5396049152026347991">Allow the user to manage VPN connections.

      If this policy is set to false, all <ph name="PRODUCT_NAME" /> user interfaces that would allow the user to disconnect or modify VPN connections are disabled.

      If this policy is unset or set to true, users can disconnect or modify VPN connections as usual.

      If the VPN connection is created via a VPN app, the UI inside the app remains unaffected by this policy. Therefore, the user might still be able to use the app to modify the VPN connection.

      This policy is meant to be used together with the 'Always on VPN' feature, that lets the admin decide to establish a VPN connection on boot.</translation>
<translation id="5405289061476885481">Configures which keyboard layouts are allowed on the <ph name="PRODUCT_OS_NAME" /> sign-in screen.

      If this policy is set to a list of input method identifiers, the given input methods will be available on the sign-in screen. The first given input method will be preselected. While a user pod is focused on the sign-in screen, the user's last used input method will be available in addition to the input methods given by this policy. If this policy is not set, the input methods on the sign-in screen will be derived from the locale in which the sign-in screen is displayed. Values which are not valid input method identifiers will be ignored.</translation>
<translation id="5422643441807528365"><ph name="PLUGIN_VM_NAME" /> licence key</translation>
<translation id="5423001109873148185">This policy forces search engines to be imported from the current default browser, if enabled. If enabled, this policy also affects the import dialogue.

      If disabled, the default search engine is not imported.

      If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
<translation id="5423197884968724595">Android WebView restriction name:</translation>
<translation id="5424147596523390018">Allow all colour modes</translation>
<translation id="5442026853063570579">This policy also controls access to Android Developer Options. If you set this policy to 'DeveloperToolsDisallowed' (value 2), users cannot access Developer Options. If you set this policy to another value or leave it unset, users can access Developer Options by tapping seven times on the build number in the Android settings app.</translation>
<translation id="5447306928176905178">Enable reporting memory info (JS heap size) to page (deprecated)</translation>
<translation id="5457065417344056871">Enable guest mode in browser</translation>
<translation id="5457924070961220141">Allows you to configure the default HTML renderer when <ph name="PRODUCT_FRAME_NAME" /> is installed.
          The default setting used when this policy is left unset is to allow the host browser do the rendering, but you can optionally override this and have <ph name="PRODUCT_FRAME_NAME" /> render HTML pages by default.</translation>
<translation id="5464816904705580310">Configure settings for managed users.</translation>
<translation id="546726650689747237">Screen dim delay when running on AC power</translation>
<translation id="5469143988693423708">User is enabled to run Crostini</translation>
<translation id="5469825884154817306">Block images on these sites</translation>
<translation id="5472668698895343595">This policy controls the list of websites to open in an alternative browser.

      Note that elements can also be added to this list through the <ph name="USE_IE_SITELIST_POLICY_NAME" /> and <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" /> policies.

      When this policy is left unset, no websites are added to the list.

      When this policy is set, each item is treated as a rule for something to open in an alternative browser. <ph name="PRODUCT_NAME" /> uses those rules when choosing if a URL should open in an alternative browser.

      When the Internet Explorer add-in is present and enabled, Internet Explorer switches back to <ph name="PRODUCT_NAME" /> when the rules do not match.

      If rules contradict each other, <ph name="PRODUCT_NAME" /> uses the most specific rule.</translation>
<translation id="5475361623548884387">Enable printing</translation>
<translation id="547601067149622666">Do not allow ads on sites with intrusive ads</translation>
<translation id="5499375345075963939">This policy is active in retail mode only.

      When the value of this policy is set and is not 0 then the currently logged in demo user will be logged out automatically after an inactivity time of the specified duration has elapsed.

      The policy value should be specified in milliseconds.</translation>
<translation id="5511702823008968136">Enable Bookmark Bar</translation>
<translation id="5512418063782665071">Home page URL</translation>
<translation id="551639594034811656">This policy defines a list of percentages that will define the fraction of <ph name="PRODUCT_OS_NAME" /> devices in the OU to update per day starting from the day that the update is first discovered. The discovery time is later than the update published time, since it could be a while after the update publishing until the device checks for updates.

      Each (day, percentage) pair contains which percentage of the fleet has to be updated by the given number of days since the update has been discovered. For example, if we have the pairs [(4, 40), (10, 70), (15, 100)], then 40% of the fleet should have been updated 4 days after seeing the update. 70% should be updated after 10 days, and so on.

      If there is a value defined for this policy, updates will ignore the <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> policy and follow this policy instead.

      If this list is empty, there will be no staging, and updates will be applied according to other device policies.

      This policy does not apply for channel switches.</translation>
<translation id="5526701598901867718">All (insecure)</translation>
<translation id="5529037166721644841">Specifies the period in milliseconds at which the device management service is queried for device policy information.

      Setting this policy overrides the default value of 3 hours. Valid values for this policy are in the range from 1,800,000 (30 minutes) to 86,400,000 (1 day). Any values not in this range will be clamped to the respective boundary.

      Leaving this policy not set will make <ph name="PRODUCT_OS_NAME" /> use the default value of 3 hours.

      Note that if the platform supports policy notifications, the refresh delay will be set to 24 hours (ignoring all defaults and the value of this policy) because it is expected that policy notifications will force a refresh automatically whenever policy changes, making more frequent refreshes unnecessary.</translation>
<translation id="5530347722229944744">Block potentially dangerous downloads</translation>
<translation id="5535973522252703021">Kerberos delegation server whitelist</translation>
<translation id="555077880566103058">Allow all sites to automatically run the <ph name="FLASH_PLUGIN_NAME" /> plug-in</translation>
<translation id="5559079916187891399">This policy has no effect on Android apps.</translation>
<translation id="5560039246134246593">Add a parameter to the fetching of the Variations seed in <ph name="PRODUCT_NAME" />.

      If specified, will add a query parameter called 'restrict' to the URL used to fetch the Variations seed. The value of the parameter will be the value specified in this policy.

      If not specified, will not modify the Variations seed URL.</translation>
<translation id="5561811616825571914">Automatically select client certificates for these sites on the sign-in screen</translation>
<translation id="556941986578702361">Control auto-hiding of the <ph name="PRODUCT_OS_NAME" /> shelf.

      If this policy is set to 'AlwaysAutoHideShelf', the shelf will always auto-hide.

      If this policy is set to 'NeverAutoHideShelf', the shelf never auto-hides.

      If you set this policy, users cannot change or override it.

      If the policy is left not set, users can choose whether the shelf should auto-hide.</translation>
<translation id="557360560705413259">When this setting is enabled, <ph name="PRODUCT_NAME" /> will use the commonName of a server certificate to match a hostname if the certificate is missing a subjectAlternativeName extension, as long as it successfully validates and chains to a locally-installed CA certificates.

      Note that this is not recommended, as this may allow bypassing the nameConstraints extension that restricts the hostnames that a given certificate can be authorised for.

      If this policy is not set, or is set to false, server certificates that lack a subjectAlternativeName extension containing either a DNS name or IP address will not be trusted.</translation>
<translation id="5581292529942108810">Configure Chrome Reporting Extension related policies.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="5584132346604748282">Control Android Google Location services</translation>
<translation id="5586942249556966598">Do nothing</translation>
<translation id="5592242031005200087">
      If the policy is enabled, each of the named origins in a
      comma-separated list will run in its own process. This will also isolate
      origins named by subdomains; e.g. specifying https://example.com/ will
      also cause https://foo.example.com/ to be isolated as part of the
      https://example.com/ site.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOriginsAndroid and SitePerProcessAndroid will be disabled. Users will still be able to enable IsolateOrigins manually, via command line flag.
      If the policy is not configured, the user will be able to change this setting.

      NOTE: On Android, Site Isolation is experimental. Support will improve over time, but currently it may cause performance problems.

      NOTE: This policy applies only to Chrome on Android running on devices with strictly more than 1 GB of RAM. To apply the policy on non-Android platforms, use IsolateOrigins.
      </translation>
<translation id="5630352020869108293">Restore the last session</translation>
<translation id="5645779841392247734">Allow cookies on these sites</translation>
<translation id="5689430183304951538">Default printing page size</translation>
<translation id="5693469654327063861">Allow data migration</translation>
<translation id="5694594914843889579">When this policy is set to true, external storage will not be available in the file browser.

      This policy affects all types of storage media. For example: USB flash drives, external hard drives, SD and other memory cards, optical storage, etc. Internal storage is not affected, therefore files saved in the Download folder can still be accessed. Google Drive is also not affected by this policy.

      If this setting is disabled or not configured then users can use all supported types of external storage on their device.</translation>
<translation id="5697306356229823047">Report device users</translation>
<translation id="5699487516670033016">Specifies the lifetime (in hours) of the authentication data cache. The cache is used to speed up sign-in. It contains general data (workgroup name etc.) about affiliated realms, i.e. realms trusted by the machine realm. No user-specific data and no data for unaffiliated realms is cached. Rebooting the device clears the cache.

      If the policy is unset, cached authentication data may be reused for up to 73 hours.

      If the policy is set to 0, authentication data caching is turned off. This can significantly slow down sign-in of affiliated users since realm-specific data has to be fetched on every sign-in.

      Note that realm data is cached even for ephemeral users. The cache should be turned off if tracing the realm of ephemeral users is to be prevented.</translation>
<translation id="570062449808736508">When this policy is set to a non-empty string, the WebView will read URL restrictions from the content provider with the given authority name.</translation>
<translation id="5701714006401683963">If this policy is set to false, managed guest session will behave as documented in https://support.google.com/chrome/a/answer/3017014 – the standard 'Public Session'.

      If this policy is set to true or left unset, managed guest session will take on 'Managed Session' behaviour which lifts many of the restrictions that are in place for regular 'Public Sessions'.

      If this policy is set, the user cannot change or override it.</translation>
<translation id="572155275267014074">Android settings</translation>
<translation id="5722934961007828462">When this setting is enabled, <ph name="PRODUCT_NAME" /> will always perform revocation checking for server certificates that successfully validate and are signed by locally-installed CA certificates.

      If <ph name="PRODUCT_NAME" /> is unable to obtain revocation status information, such certificates will be treated as revoked ('hard-fail').

      If this policy is not set or it is set to false then <ph name="PRODUCT_NAME" /> will use the existing online revocation checking settings.</translation>
<translation id="5728154254076636808">Enable the creation of roaming copies for <ph name="PRODUCT_NAME" /> profile data</translation>
<translation id="5732972008943405952">Import autofill form data from default browser on first run</translation>
<translation id="5765780083710877561">Description:</translation>
<translation id="5770738360657678870">Dev channel (may be unstable)</translation>
<translation id="5774856474228476867">Default search provider search URL</translation>
<translation id="5776485039795852974">Ask every time a site wants to show desktop notifications</translation>
<translation id="5781412041848781654">Specifies which GSSAPI library to use for HTTP authentication. You can set either just a library name or a full path.

          If no setting is provided, <ph name="PRODUCT_NAME" /> will fall back to using a default library name.</translation>
<translation id="5781806558783210276">Specifies the length of time without user input after which the idle action is taken when running on battery power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> takes the idle action, which can be configured separately.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds.</translation>
<translation id="5783009211970309878">Print headers and footers</translation>
<translation id="5809728392451418079">Set the display name for device-local accounts</translation>
<translation id="5814301096961727113">Set the default state of spoken feedback on the login screen</translation>
<translation id="5815129011704381141">Automatically reboot after update</translation>
<translation id="5815353477778354428">Configures the directory that <ph name="PRODUCT_FRAME_NAME" /> will use for storing user data.

      If you set this policy, <ph name="PRODUCT_FRAME_NAME" /> will use the provided directory.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this setting is left not set the default profile directory will be used.</translation>
<translation id="5826047473100157858">Specifies whether the user may open pages in Incognito mode in <ph name="PRODUCT_NAME" />.

      If 'Enabled' is selected or the policy is left unset, pages may be opened in Incognito mode.

      If 'Disabled' is selected, pages may not be opened in Incognito mode.

      If 'Forced' is selected, pages may be opened ONLY in Incognito mode.</translation>
<translation id="582857022372205358">Enable short-edge duplex printing</translation>
<translation id="583091600226586337">
      If the policy is enabled, the user will be asked where to save each file before downloading.
      If the policy is disabled, downloads will start immediately, and the user will not be asked where to save the file.
      If the policy is not configured, the user will be able to change this setting.
      </translation>
<translation id="5832274826894536455">Deprecated policies</translation>
<translation id="5835124959204887277">Specifies URLs and domains for which no prompt will be shown when attestation certificates from Security Keys are requested. Additionally, a signal will be sent to the Security Key indicating that individual attestation may be used. Without this, users will be prompted in Chrome 65+ when sites request attestation of Security Keys.

      URLs (like https://example.com/some/path) will only match as U2F appIDs. Domains (like example.com) only match as webauthn RP IDs. Thus, to cover both U2F and webauthn APIs for a given site, both the appID URL and domain would need to be listed.</translation>
<translation id="5836064773277134605">Restrict the UDP port range used by the remote access host</translation>
<translation id="5861856285460256766">Parent Access Code Configuration</translation>
<translation id="5862253018042179045">Set the default state of the spoken feedback accessibility feature on the login screen.

          If this policy is set to true, spoken feedback will be enabled when the login screen is shown.

          If this policy is set to false, spoken feedback will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling spoken feedback. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, spoken feedback is disabled when the login screen is first shown. Users can enable or disable spoken feedback at any time and its status on the login screen is persisted between users.</translation>
<translation id="5868414965372171132">User-level network configuration</translation>
<translation id="5879014913445067283">Controls Network File Share discovery via <ph name="NETBIOS_NAME" /></translation>
<translation id="5883015257301027298">Default cookies setting</translation>
<translation id="5887414688706570295">Configures the TalkGadget prefix that will be used by remote access hosts and prevents users from changing it.

          If specified, this prefix is prepended to the base TalkGadget name to create a full domain name for the TalkGadget. The base TalkGadget domain name is '.talkgadget.google.com'.

          If this setting is enabled, then hosts will use the custom domain name when accessing the TalkGadget instead of the default domain name.

          If this setting is disabled or not set, then the default TalkGadget domain name ('chromoting-host.talkgadget.google.com') will be used for all hosts.

          Remote access clients are not affected by this policy setting. They will always use 'chromoting-client.talkgadget.google.com' to access the TalkGadget.</translation>
<translation id="5893553533827140852">If this setting is enabled, then gnubby authentication requests will be proxied across a remote host connection.

          If this setting is disabled or not configured, gnubby authentication requests will not be proxied.</translation>
<translation id="5898486742390981550">When multiple users are logged in, only the primary user can use Android apps.</translation>
<translation id="5900196529149231477">
      This policy applies to the sign-in screen. Please see also the <ph name="ISOLATE_ORIGINS_POLICY_NAME" /> policy which applies to the user session. It is recommended to set both policies to the same value. If the values don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.
      If the policy is enabled, each of the named origins in a comma-separated list will run in its own process. This will also isolate origins named by subdomains; e.g. specifying https://example.com/ will also cause https://foo.example.com/ to be isolated as part of the https://example.com/ site.
      If the policy is disabled, both IsolateOrigins and SitePerProcess features will be disabled. Users will still be able to enable IsolateOrigins manually, via command line flags.
      If the policy is not configured, the platform default site isolation settings will be used for the sign-in screen.
      </translation>
<translation id="5901427587865226597">Duplex printing only</translation>
<translation id="5906199912611534122">Allows enabling or disabling network throttling.
      This applies to all users, and to all interfaces on the device. Once set,
      the throttling persists until the policy is changed to disable it.

      If set to false, there is no throttling.
      If set to true, the system is throttled to achieve the provided upload and download rates (in kbits/s).</translation>
<translation id="5921713479449475707">Allow autoupdate downloads via HTTP</translation>
<translation id="5921888683953999946">Set the default state of the large cursor accessibility feature on the login screen.

          If this policy is set to true, the large cursor will be enabled when the login screen is shown.

          If this policy is set to false, the large cursor will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling the large cursor. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, the large cursor is disabled when the login screen is first shown. Users can enable or disable the large cursor at any time and its status on the login screen is persisted between users.</translation>
<translation id="5929855945144989709">Allow devices to run virtual machines on Chrome OS</translation>
<translation id="5932767795525445337">This policy can also be used to pin Android apps.</translation>
<translation id="5936622343001856595">Forces queries in Google Web Search to be done with SafeSearch set to active and prevents users from changing this setting.

      If you enable this setting, SafeSearch in Google Search is always active.

      If you disable this setting or do not set a value, SafeSearch in Google Search is not enforced.</translation>
<translation id="5946082169633555022">Beta channel</translation>
<translation id="5950205771952201658">In light of the fact that soft-fail, online revocation checks provide no effective security benefit, they are disabled by default in <ph name="PRODUCT_NAME" /> version 19 and later. By setting this policy to true, the previous behaviour is restored and online OCSP/CRL checks will be performed.

      If the policy is not set, or is set to false, then <ph name="PRODUCT_NAME" /> will not perform online revocation checks in <ph name="PRODUCT_NAME" /> 19 and later.</translation>
<translation id="5966615072639944554">Extensions allowed to to use the remote attestation API</translation>
<translation id="5983708779415553259">Default behaviour for sites not in any content pack</translation>
<translation id="5997543603646547632">Use 24 hour clock by default</translation>
<translation id="5997846976342452720">Specify whether the plug-in finder should be disabled (deprecated)</translation>
<translation id="6017568866726630990">Show the system print dialogue instead of print preview.

      When this setting is enabled, <ph name="PRODUCT_NAME" /> will open the system print dialogue instead of the built-in print preview when a user requests a page to be printed.

      If this policy is not set or is set to false, print commands trigger the print preview screen.</translation>
<translation id="6022948604095165524">Action on start-up</translation>
<translation id="6023030044732320798">Specifies a set of policies that will be handed over to the ARC runtime. The value must be valid JSON.

      This policy can be used to configure which Android apps are automatically installed on the device:

      {
        "type": "object",
        "properties": {
          "applications": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "packageName": {
                  "description": "Android app identifier, e.g. "com.google.android.gm" for Gmail",
                  "type": "string"
                },
                "installType": {
                  "description": 'Specifies how an app is installed. OPTIONAL: The app is not installed automatically, but the user can install it. This is the default if this policy is not specified. PRELOAD: The app is installed automatically, but the user can uninstall it. FORCE_INSTALLED: The app is installed automatically and the user cannot uninstall it. BLOCKED: The app is blocked and cannot be installed. If the app was installed under a previous policy it will be uninstalled.',
                  "type": "string",
                  "enum": [
                    "OPTIONAL",
                    "PRELOAD",
                    "FORCE_INSTALLED",
                    "BLOCKED"
                  ]
                },
                "defaultPermissionPolicy": {
                  "description": 'Policy for granting permission requests to apps. PERMISSION_POLICY_UNSPECIFIED: Policy not specified. If no policy is specified for a permission at any level, then the `PROMPT` behaviour is used by default. PROMPT: Prompt the user to grant a permission. GRANT: Automatically grant a permission. DENY: Automatically deny a permission.',
                  "type": "string",
                  "enum": [
                    "PERMISSION_POLICY_UNSPECIFIED",
                    "PROMPT",
                    "GRANT",
                    "DENY"
                  ]
                },
                "managedConfiguration": {
                  "description": 'App-specific JSON configuration object with a set of key-value pairs, e.g. '"managedConfiguration": { "key1": value1, "key2": value2 }'. The keys are defined in the app manifest.',
                  "type": "object"
                }
              }
            }
          }
        }
      }

      To pin apps to the launcher, see PinnedLauncherApps.</translation>
<translation id="602728333950205286">Default search provider instant URL</translation>
<translation id="603410445099326293">Parameters for suggest URL which uses POST</translation>
<translation id="6036523166753287175">Enable firewall traversal from remote access host</translation>
<translation id="6070667616071269965">Device sign-in screen keyboard layouts</translation>
<translation id="6074963268421707432">Do not allow any site to show desktop notifications</translation>
<translation id="6074964551275531965">Set the time period for update notifications</translation>
<translation id="6076099373507468537">Defines the list of USB devices that are allowed to be detached from their kernel driver in order to be used through the chrome.usb API directly inside a web application. Entries are pairs of USB Vendor Identifier and Product Identifier to identify a specific hardware.

      If this policy is not configured, the list of a detachable USB devices is empty.</translation>
<translation id="6083631234867522991">Windows (Windows clients):</translation>
<translation id="6091233616732024397">Force users to sign-in to use the browser</translation>
<translation id="6093156968240188330">Allow remote users to interact with elevated windows in remote assistance sessions</translation>
<translation id="6095999036251797924">Specifies the length of time without user input after which the screen is locked when running on AC power or battery.

          When the length of time is set to a value greater than zero, it represents the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> locks the screen.

          When the length of time is set to zero, <ph name="PRODUCT_OS_NAME" /> does not lock the screen when the user becomes idle.

          When the length of time is unset, a default length of time is used.

          The recommended way to lock the screen on idle is to enable screen locking on suspend and have <ph name="PRODUCT_OS_NAME" /> suspend after the idle delay. This policy should only be used when screen locking should occur a significant amount of time sooner than suspend or when suspend on idle is not desired at all.

          The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.</translation>
<translation id="6097601282776163274">Enable URL-keyed anonymised data collection</translation>
<translation id="6099853574908182288">Default printing colour mode</translation>
<translation id="6111936128861357925">Allow Dinosaur Easter Egg Game</translation>
<translation id="6114416803310251055">deprecated</translation>
<translation id="6133088669883929098">Allow all sites to use key generation</translation>
<translation id="6145799962557135888">Allows you to set a list of url patterns that specify sites which are allowed to run JavaScript.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultJavaScriptSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="614662973812186053">This policy also controls Android usage and diagnostic data collection.</translation>
<translation id="6153048425064249648">This policy controls <ph name="PRODUCT_NAME" /> cloud reporting which uploads information about the browser operation to Google Admin console.

      When this policy is left unset or set to False, there is no data collected or uploaded.
      When this policy is set to True, the data is collected and uploaded to Google Admin console.
      To control what data is uploaded, please use policies in the group Chrome Reporting Extension.

      This policy is only effective when the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.

      This policy force installs <ph name="CHROME_REPORTING_EXTENSION_NAME" /> for the reporting and overrides any extension policies related to that extension.</translation>
<translation id="6155247658847899816">When this policy is set, resolution and scale factor of each
      display are set to the specified values. External display settings are
      applied to all connected external displays.

      Values of 'external_width' and 'external_height' should be specified in
      pixels. Values of 'external_scale_percentage' and
      'internal_scale_percentage' should be specified in per cents.

      If 'external_use_native' is set to true, policy will ignore values of
      'external_height' and 'external_width' and set resolution of the external
      displays to their native resolution.

      If 'external_use_native' is false or not provided and either
      'external_height' or 'external_width' is not provided, policy doesn't
      affect the external display settings. If specified resolution or
      scale factor is not supported by some display, policy is not applied to
      that display.

      If 'recommended' flag is set to true, users may change resolution and
      scale factor of any display via the settings page after logging in, but
      their settings will be overridden by the policy value at the next reboot.
      If 'recommended' flag is set to false or not set, users can't change the
      display settings.</translation>
<translation id="6155936611791017817">Set default state of the large cursor on the login screen</translation>
<translation id="6157537876488211233">Comma-separated list of proxy bypass rules</translation>
<translation id="6158324314836466367">Enterprise web store name (deprecated)</translation>
<translation id="6181608880636987460">Allows you to set a list of URL patterns that specify sites which are not allowed to run the <ph name="FLASH_PLUGIN_NAME" /> plug-in.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise.</translation>
<translation id="6190022522129724693"> setting</translation>
<translation id="6190367314942602985">Report user identification information</translation>
<translation id="6197453924249895891">Grants access to corporate keys to extensions.

      Keys are designated for corporate usage if they're generated using the chrome.enterprise.platformKeys API on a managed account. Keys imported or generated in another way are not designated for corporate usage.

      Access to keys designated for corporate usage is solely controlled by this policy. The user can neither grant nor withdraw access to corporate keys to or from extensions.

      By default an extension cannot use a key designated for corporate usage, which is equivalent to setting allowCorporateKeyUsage to false for that extension.

      Only if allowCorporateKeyUsage is set to true for an extension, it can use any platform key marked for corporate usage to sign arbitrary data. This permission should only be granted if the extension is trusted to secure access to the key against attackers.</translation>
<translation id="6208896993204286313">Report <ph name="PRODUCT_NAME" /> policy information</translation>
<translation id="6210259502936598222">Report OS and <ph name="PRODUCT_NAME" /> version information</translation>
<translation id="6211428344788340116">Report device activity times.

      If this setting is not set or set to True, enrolled devices will report time periods when a user is active on the device. If this setting is set to False, device activity times will not be recorded or reported.</translation>
<translation id="6212868225782276239">All printers are shown except those in the blacklist.</translation>
<translation id="6219965209794245435">This policy forces the autofill form data to be imported from the previous default browser if enabled. If enabled, this policy also affects the import dialogue.

      If disabled, the autofill form data is not imported.

      If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
<translation id="6224304369267200483">URLs/domains automatically permitted direct Security Key attestation</translation>
<translation id="6233173491898450179">Set download directory</translation>
<translation id="6244210204546589761">URLs to open on start-up</translation>
<translation id="6258193603492867656">Specifies whether the generated Kerberos SPN should include a non-standard port. If you enable this setting, and a non-standard port (i.e. a port other than 80 or 443) is entered, it will be included in the generated Kerberos SPN. If you disable this setting, the generated Kerberos SPN will not include a port in any case.</translation>
<translation id="6261643884958898336">Report machine identification information</translation>
<translation id="6281043242780654992">Configures policies for Native Messaging. Blacklisted native messaging hosts won't be allowed unless they are whitelisted.</translation>
<translation id="6282799760374509080">Allow or deny audio capture</translation>
<translation id="6284362063448764300">TLS 1.1</translation>
<translation id="6310223829319187614">Enable domain name autocomplete during user sign in</translation>
<translation id="6315673513957120120">Chrome shows a warning page when users navigate to sites that have SSL errors. By default or when this policy is set to true, users are allowed to click through these warning pages.
      Setting this policy to false disallows users to click through any warning page.</translation>
<translation id="6352543686437322588">A device-local account to auto-login after a delay.

      If this policy is set, the specified session will be automatically logged in after a period of time has elapsed at the login screen without user interaction. The device-local account must already be configured (see |DeviceLocalAccounts|).

      If this policy is unset, there will be no auto-login.</translation>
<translation id="6353901068939575220">Specifies the parameters used when searching a URL with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {searchTerms} in above example, it will be replaced with real search terms data.

          This policy is optional. If not set, search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="6367755442345892511">Whether the release channel should be configurable by the user</translation>
<translation id="6368011194414932347">Configure the home page URL</translation>
<translation id="6368403635025849609">Allow JavaScript on these sites</translation>
<translation id="6376659517206731212">Can Be Mandatory</translation>
<translation id="6377355597423503887">This policy is deprecated. Consider using BrowserSignin instead.

      Allows the user to sign in to <ph name="PRODUCT_NAME" />.

      If you set this policy, you can configure whether a user is allowed to sign in to <ph name="PRODUCT_NAME" />. Setting this policy to 'False' will prevent apps and extensions that use the chrome.identity API from functioning, so you may want to use SyncDisabled instead.</translation>
<translation id="6378076389057087301">Specify whether audio activity affects power management</translation>
<translation id="637934607141010488">Report list of device users that have recently logged in.

      If the policy is set to false, the users will not be reported.</translation>
<translation id="6394350458541421998">This policy has been retired as of <ph name="PRODUCT_OS_NAME" /> version 29. Please use the PresentationScreenDimDelayScale policy instead.</translation>
<translation id="6401669939808766804">Log the user out</translation>
<translation id="6406448383934634215">If 'Open a list of URLs' is selected as the start-up action, this allows you to specify the list of URLs that are opened. If left not set, no URL will be opened on start up.

          This policy only works if the 'RestoreOnStartup' policy is set to 'RestoreOnStartupIsURLs'.

          This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="6426205278746959912">You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honour:

          If you choose to never use a proxy server, Android apps are informed that no proxy is configured.

          If you choose to use system proxy settings or a fixed server proxy, Android apps are provided with the http proxy server address and port.

          If you choose to auto detect the proxy server, the script URL "http://wpad/wpad.dat" is provided to Android apps. No other part of the proxy auto-detection protocol is used.

          If you choose to use a .pac proxy script, the script URL is provided to Android apps.</translation>
<translation id="6430366557948788869">Chrome Reporting Extension</translation>
<translation id="6440051664870270040">Allow sites to simultaneously navigate and open pop-ups</translation>
<translation id="6447948611083700881">Backup and restore disabled</translation>
<translation id="645425387487868471">Enable force sign-in for <ph name="PRODUCT_NAME" /></translation>
<translation id="6464074037294098618">Enable AutoFill for addresses</translation>
<translation id="6473623140202114570">Configure the list of domains on which Safe Browsing will not trigger warnings.</translation>
<translation id="6488627892044759800">Configures the type of the default homepage in <ph name="PRODUCT_NAME" /> and prevents users from changing homepage preferences. The homepage can either be set to a URL that you specify, or set to the new tab page.

          If you enable this setting, the new tab page is always used for the homepage, and the homepage URL location is ignored.

          If you disable this setting, the user's homepage will never be the new tab page, unless its URL is set to 'chrome://newtab'.

          If you enable or disable this setting, users cannot change their homepage type in <ph name="PRODUCT_NAME" />.

          Leaving this policy not set will allow the user to choose whether the new tab page is their homepage on their own.

          This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="6491139795995924304">Allow bluetooth on device</translation>
<translation id="6495328383950074966">Configure the list of domains which Safe Browsing will trust. This means:
      Safe Browsing will not check for dangerous resources (e.g. phishing, malware or unwanted software) if their URLs match these domains.
      Safe Browsing's download protection service will not check downloads hosted on these domains.
      Safe Browsing's password protection service will not check for password reuse if the page URL matches these domains.

      If this setting is enabled, then Safe Browsing will trust these domains.
      If this setting is disabled or not set, then default Safe Browsing protection is applied to all resources.
      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="6515357889978918016"><ph name="PLUGIN_VM_NAME" /> image</translation>
<translation id="6520802717075138474">Import search engines from default browser on first run</translation>
<translation id="6525955212636890608">If you enable this setting, all Flash content embedded on websites that have been set to allow Flash in content settings – either by the user or by enterprise policy – will be run, including content from other origins or small content.

      To control which websites are allowed to run Flash, see the 'DefaultPluginsSetting', 'PluginsAllowedForURLs' and 'PluginsBlockedForURLs' policies.

      If this setting is disabled or not set, Flash content from other origins or small content might be blocked.</translation>
<translation id="6532769014584932288">Allow wake locks</translation>
<translation id="653608967792832033">Specifies the length of time without user input after which the screen is locked when running on battery power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> locks the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME" /> does not lock the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The recommended way to lock the screen on idle is to enable screen locking on suspend and have <ph name="PRODUCT_OS_NAME" /> suspend after the idle delay. This policy should only be used when screen locking should occur a significant amount of time sooner than suspend or when suspend on idle is not desired at all.

          The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.</translation>
<translation id="6536600139108165863">Automatic reboot on device shutdown</translation>
<translation id="6539246272469751178">This policy has no effect on Android apps. Android apps always use the default downloads directory and cannot access any files downloaded by <ph name="PRODUCT_OS_NAME" /> into a non-default downloads directory.</translation>
<translation id="654303922206238013">Migration strategy for eCryptfs</translation>
<translation id="6544897973797372144">If this policy is set to True and the ChromeOsReleaseChannel policy is not specified then users of the enrolling domain will be allowed to change the release channel of the device. If this policy is set to false the device will be locked in whatever channel it was last set.

      The user selected channel will be overridden by the ChromeOsReleaseChannel policy, but if the policy channel is more stable than the one that was installed on the device, then the channel will only switch after the version of the more stable channel reaches a higher version number than the one installed on the device.</translation>
<translation id="6553143066970470539">Screen brightness per cent</translation>
<translation id="6559057113164934677">Do not allow any site to access the camera and microphone</translation>
<translation id="6561396069801924653">Show accessibility options in system tray menu</translation>
<translation id="6563458316362153786">Enable 802.11r Fast Transition</translation>
<translation id="6565312346072273043">Set the default state of the on-screen keyboard accessibility feature on the login screen.

          If this policy is set to true, the on-screen keyboard will be enabled when the login screen is shown.

          If this policy is set to false, the on-screen keyboard will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling the on-screen keyboard. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, the on-screen keyboard is disabled when the login screen is first shown. Users can enable or disable the on-screen keyboard any time and its status on the login screen is persisted between users.</translation>
<translation id="6573305661369899995">Set an external source of URL restrictions</translation>
<translation id="6598235178374410284">User avatar image</translation>
<translation id="6603004149426829878">Always send any available location signals to the server while resolving time zone</translation>
<translation id="6628120204569232711">Report storage status</translation>
<translation id="6628646143828354685">Allows you to set whether websites are allowed to get access to nearby Bluetooth devices. Access can be completely blocked, or the user can be asked every time a website wants to get access to nearby Bluetooth devices.

          If this policy is left not set, '3' will be used, and the user will be able to change it.</translation>
<translation id="663685822663765995">Restrict printing colour mode</translation>
<translation id="6641981670621198190">Disable support for 3D graphics APIs</translation>
<translation id="6647965994887675196">If set to true, supervised users can be created and used.

          If set to false or not configured, supervised-user creation and login will be disabled. All existing supervised users will be hidden.

          NOTE: The default behaviour for consumer and enterprise devices differs: on consumer devices, supervised users are enabled by default, but on enterprise devices they are disabled by default.</translation>
<translation id="6649397154027560979">This policy is deprecated, please use URLBlacklist instead.

      Disables the listed protocol schemes in <ph name="PRODUCT_NAME" />.

      URLs using a scheme from this list will not load and can not be navigated to.

      If this policy is left not set or the list is empty all schemes will be accessible in <ph name="PRODUCT_NAME" />.</translation>
<translation id="6652197835259177259">Locally managed users settings</translation>
<translation id="6658245400435704251">Specifies the number of seconds up to which a device may randomly delay its download of an update from the time the update was first pushed out to the server. The device may wait a portion of this time in terms of wall-clock-time and the remaining portion in terms of the number of update checks. In any case, the scatter is upper bounded to a constant amount of time so that a device does not ever get stuck waiting to download an update forever.</translation>
<translation id="6665670272107384733">Set how often user has to enter password to use quick unlock</translation>
<translation id="6681229465468164801">Allows you to set a list of url patterns that specify sites which are prevented from asking the user to grant them access to a USB device.

          If this policy is left not set, the global default value will be used for all sites either from the 'DefaultWebUsbGuardSetting' policy if it is set, or the user's personal configuration otherwise.

          URL patterns in this policy should not clash with ones configured via WebUsbAskForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both.</translation>
<translation id="6689792153960219308">Report hardware status</translation>
<translation id="6698632841807204978">Enable monochrome printing</translation>
<translation id="6699880231565102694">Enable two-factor authentication for remote access hosts</translation>
<translation id="6731757988219967594">Filter top-level sites (but not embedded iframes) for adult content</translation>
<translation id="6734521799274931721">Controls Network File Shares for ChromeOS availability</translation>
<translation id="6735701345096330595">Force enable spellcheck languages</translation>
<translation id="673699536430961464">This setting allows users to switch between Google Accounts within the content area of their browser window after they sign in to their <ph name="PRODUCT_OS_NAME" /> device.

      If this policy is set to false, signing in to a different account from non-Incognito browser content area will not be allowed.

      If this policy is unset or set to true, the default behaviour will be used: signing in to a different account from the browser content area will be allowed, except for child accounts where it will be blocked for non-Incognito content area.

      In case signing in to a different account shouldn't be allowed via the Incognito mode, consider blocking that mode using the IncognitoModeAvailability policy.

      Note that users will be able to access Google services in an unauthenticated state by blocking their cookies.</translation>
<translation id="6738326937072482736">Configures availability and behaviour of <ph name="TPM_FIRMWARE_UPDATE_TPM" /> firmware update functionality.

      Individual settings can be specified in JSON properties:

      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH" />: If set to <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE" />, users will be able to trigger the powerwash flow to install a <ph name="TPM_FIRMWARE_UPDATE_TPM" /> firmware update.

      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: If set to <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" />, users will be able to invoke the <ph name="TPM_FIRMWARE_UPDATE_TPM" /> firmware update flow that preserves device-wide state (including enterprise enrolment), but loses user data. This update flow is available starting from version 68.

      If the policy is not set, <ph name="TPM_FIRMWARE_UPDATE_TPM" /> firmware update functionality will not be available.</translation>
<translation id="6757438632136860443">Allows you to set a list of URL patterns that specify sites which are allowed to run the <ph name="FLASH_PLUGIN_NAME" /> plug-in.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise.</translation>
<translation id="6762235610019366960">Allows you to control the presentation of full-tab promotional and/or educational content in <ph name="PRODUCT_NAME" />.

      If not configured or enabled (set to true), <ph name="PRODUCT_NAME" /> may show full-tab content to users to provide product information.

      If disabled (set to false), <ph name="PRODUCT_NAME" /> will not show full-tab content to users to provide product information.

      This setting controls the presentation of the welcome pages that help users sign in to <ph name="PRODUCT_NAME" />, choose it as their default browser or otherwise inform them of product features.</translation>
<translation id="6766216162565713893">Allow sites to ask the user to grant access to a nearby Bluetooth device</translation>
<translation id="6770454900105963262">Report information about active kiosk sessions</translation>
<translation id="6786747875388722282">Extensions</translation>
<translation id="6786967369487349613">Set the roaming profile directory</translation>
<translation id="6810445994095397827">Block JavaScript on these sites</translation>
<translation id="681446116407619279">Supported authentication schemes</translation>
<translation id="6816212867679667972">Determine the hostname of the device used in DHCP requests.

      If this policy is set to a non-empty string, that string will be used as the device hostname during DHCP request.

      The string can contain variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR}, ${MACHINE_NAME} that would be replaced with values on the device before using as a hostname. Resulting substitution should be a valid hostname (per RFC 1035, section 3.1).

      If this policy is not set, or the value after substitution is not a valid hostname, no hostname will be set in DHCP request. </translation>
<translation id="6835883744948188639">Show a recurring prompt to the user indicating that a relaunch is recommended</translation>
<translation id="6837480141980366278">Controls whether the built-in DNS client is used in <ph name="PRODUCT_NAME" />.

      If this policy is set to true, the built-in DNS client will be used, if available.

      If this policy is set to false, the built-in DNS client will never be used.

      If this policy is left not set, the built-in DNS client will be enabled by default on MacOS, Android (when neither Private DNS nor VPN are enabled) and ChromeOS, and the users will be able to change whether the built-in DNS client is used by editing chrome://flags or specifying a command-line flag.</translation>
<translation id="6838056959556423778">Overrides <ph name="PRODUCT_NAME" /> default printer selection rules.

      This policy determines the rules for selecting the default printer in <ph name="PRODUCT_NAME" /> which happens the first time that the print function is used with a profile.

      When this policy is set, <ph name="PRODUCT_NAME" /> will attempt to find a printer matching all of the specified attributes, and select it as default printer. The first printer found matching the policy is selected; in the case of non-unique matches, any matching printer can be selected, depending on the order in which printers are discovered.

      If this policy is not set or a matching printer is not found within the timeout, the printer defaults to built-in PDF printer or no printer selected, when PDF printer is not available.

      The value is parsed as JSON object, conforming to the following schema:
      {
        "type": "object",
        "properties": {
          "kind": {
            "description": "Whether to limit the search of the matching printer to a specific set of printers.",
            "type": "string",
            "enum": [ "local", "cloud" ]
          },
          "idPattern": {
            "description": "Regular expression to match printer id.",
            "type": "string"
          },
          "namePattern": {
            "description": "Regular expression to match printer display name.",
            "type": "string"
          }
        }
      }

      Printers connected to <ph name="CLOUD_PRINT_NAME" /> are considered <ph name="PRINTER_TYPE_CLOUD" />; the rest of the printers are classified as <ph name="PRINTER_TYPE_LOCAL" />.
      Omitting a field means all values match. For example, not specifying connectivity will cause Print Preview to initiate the discovery of all kinds of printers: local and cloud.
      Regular expression patterns must follow the JavaScript RegExp syntax and matches are case sensitive.</translation>
<translation id="6843296367238757293">This policy is deprecated. Its usage is discouraged. Read more at https://support.google.com/chrome/a/answer/7643500</translation>
<translation id="684856667300805181">This policy was removed in <ph name="PRODUCT_NAME" /> 68 and replaced by <ph name="ARC_GLS_POLICY_NAME" />.</translation>
<translation id="6856743875250214792">This policy is deprecated and removed in M66, because it was used only for internal testing and it is a security liability.

      Specifies the flags that should be applied to <ph name="PRODUCT_NAME" /> when it starts. The specified flags are applied on the login screen only. Flags set via this policy do not propagate into user sessions.</translation>
<translation id="685769593149966548">Enforce Strict Restricted Mode for YouTube</translation>
<translation id="6857824281777105940">This policy controls whether to report Safe Browsing information including the number of Safe Browsing warnings and the number of Safe Browsing warning click-throughs.

      When this policy is left unset or set to True, Safe Browsing data are gathered.
      When this policy is set to False, Safe Browsing data are not gathered.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="686079137349561371">Microsoft Windows 7 or later</translation>
<translation id="687046793986382807">This policy has been retired as of <ph name="PRODUCT_NAME" /> version 35.

      Memory info is reported to page anyway, regardless of the option value, but the sizes reported are
      quantised and the rate of updates is limited for security reasons. To obtain real-time precise data,
      please use tools like Telemetry.</translation>
<translation id="6894178810167845842">New Tab page URL</translation>
<translation id="6899705656741990703">Auto detect proxy settings</translation>
<translation id="6903814433019432303">This policy is active in retail mode only.

      Determines the set of URLs to be loaded when the demo session is started. This policy will override any other mechanisms for setting the initial URL and thus can only be applied to a session not associated with a particular user.</translation>
<translation id="6908640907898649429">Configures the default search provider. You can specify the default search provider that the user will use or choose to disable default search.</translation>
<translation id="6913068954484253496">Allow <ph name="PRODUCT_NAME" /> to connect to Cast devices on all IP addresses.</translation>
<translation id="6915442654606973733">Enable the spoken feedback accessibility feature.

          If this policy is set to true, spoken feedback will always be enabled.

          If this policy is set to false, spoken feedback will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, spoken feedback is disabled initially but can be enabled by the user at any time.</translation>
<translation id="6916507170737609563">
      You might want to look at the IsolateOriginsAndroid policy setting to get the best of both worlds – isolation and limited impact for users – by using IsolateOriginsAndroid, with a list of sites that you want to isolate. This setting, SitePerProcessAndroid, isolates all sites.
      If the policy is enabled, each site will run in its own process.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOriginsAndroid and SitePerProcessAndroid will be disabled. However, users will still be able to facilitate SitePerProcess manually.
      If the policy is not configured, the user will be able to change this setting.

      NOTE: On Android, Site Isolation is experimental. Support will improve over time, but currently it may cause performance problems.

      NOTE: This policy only applies to Chrome on Android, running on devices with strictly more than 1 GB of RAM. To apply the policy on non-Android platforms, use SitePerProcess.
      </translation>
<translation id="6922884955650325312">Block the <ph name="FLASH_PLUGIN_NAME" /> plug-in</translation>
<translation id="6923366716660828830">Specifies the name of the default search provider. If left empty or not set, the host name specified by the search URL will be used.

          This policy is only considered if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="6926703471186170050">Enable long-edge duplex printing</translation>
<translation id="6931242315485576290">Disable synchronisation of data with Google</translation>
<translation id="6936894225179401731">Specifies the maximal number of simultaneous connections to the proxy server.

      Some proxy servers can not handle high number of concurrent connections per client and this can be solved by setting this policy to a lower value.

      The value of this policy should be lower than 100 and higher than 6 and the default value is 32.

      Some web apps are known to consume many connections with hanging GETs, so lowering below 32 may lead to browser networking hangs if too many such web apps are open. Lower below the default at your own risk.

      If this policy is left not set the default value will be used which is 32.</translation>
<translation id="6943577887654905793">Mac/Linux preference name:</translation>
<translation id="6944167205014013774">Information about the usage of Linux apps is sent back to the
      server.

      If the policy is set to false or left unset, no usage information is
      reported. If set to true, usage information is reported.

      This policy only applies if Linux app support is enabled.</translation>
<translation id="69525503251220566">Parameter providing search-by-image feature for the default search provider</translation>
<translation id="6956272732789158625">Do not allow any site to use key generation</translation>
<translation id="6965859329738616662">Specifies whether a smart dim model is allowed to extend the time until the screen is dimmed.

      When the screen is about to be dimmed, the smart dim model evaluates if dimming the screen should be deferred. If the smart dim model defers dimming the screen, it effectively extends the time until the screen is dimmed. In this case, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.
      If this policy is set to True or left not set, the smart dim model will be enabled and allowed to extend the time until the screen is dimmed. If this policy is set to False, the smart dim model will not influence screen dimming.</translation>
<translation id="6994082778848658360">Specifies how the on-board secure element hardware can be used to provide a second-factor authentication if it is compatible with this feature. The machine power button is used to detect the user physical presence.

      If 'Disabled' is selected, no second factor is provided.

      If 'U2F' is selected, the integrated second factor will behave according the FIDO U2F specification.

      If 'U2F_EXTENDED' is selected, the integrated second factor will provide the U2F functions plus some extensions for individual attestation.</translation>
<translation id="6997592395211691850">Whether online OCSP/CRL checks are required for local trust anchors</translation>
<translation id="7003334574344702284">This policy forces the saved passwords to be imported from the previous default browser, if enabled. If enabled, this policy also affects the import dialogue.

      If disabled, the saved passwords are not imported.

      If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
<translation id="7003746348783715221"><ph name="PRODUCT_NAME" /> preferences</translation>
<translation id="7006788746334555276">Content Settings</translation>
<translation id="7007671350884342624">Configures the directory that <ph name="PRODUCT_NAME" /> will use for storing user data.

      If you set this policy, <ph name="PRODUCT_NAME" /> will use the provided directory regardless of whether the user has specified the '--user-data-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a volume's root directory or to a directory used for other purposes, because <ph name="PRODUCT_NAME" /> manages its contents.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default profile path will be used and the user will be able to override it with the '--user-data-dir' command line flag.</translation>
<translation id="7027785306666625591">Configure power management in <ph name="PRODUCT_OS_NAME" />.

      These policies let you configure how <ph name="PRODUCT_OS_NAME" /> behaves when the user remains idle for some amount of time.</translation>
<translation id="7040229947030068419">Sample value</translation>
<translation id="7044883996351280650">Control Android backup and restore service</translation>
<translation id="7049373494483449255">Enables <ph name="PRODUCT_NAME" /> to submit documents to <ph name="CLOUD_PRINT_NAME" /> for printing.  NOTE: This only affects <ph name="CLOUD_PRINT_NAME" /> support in <ph name="PRODUCT_NAME" />.  It does not prevent users from submitting print jobs on websites.

      If this setting is enabled or not configured, users can print to <ph name="CLOUD_PRINT_NAME" /> from the <ph name="PRODUCT_NAME" /> print dialogue.

      If this setting is disabled, users cannot print to <ph name="CLOUD_PRINT_NAME" /> from the <ph name="PRODUCT_NAME" /> print dialogue</translation>
<translation id="7053678646221257043">This policy forces bookmarks to be imported from the current default browser if enabled. If enabled, this policy also affects the import dialogue.

      If disabled, no bookmarks are imported.

      If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
<translation id="7063895219334505671">Allow pop-ups on these sites</translation>
<translation id="706568410943497889">
      If the policy is set to true, <ph name="PRODUCT_NAME" /> is allowed to collect WebRTC event logs from Google services (e.g. Google Meet) and upload those logs to Google.

      If the policy is set to false, or is unset, <ph name="PRODUCT_NAME" /> may not collect or upload such logs.

      These logs contain diagnostic information helpful when debugging issues with audio or video calls in Chrome, such as the time and size of sent and received RTP packets, feedback about congestion on the network, and metadata about time and quality of audio and video frames. These logs do not contain audio or video contents from the call.

      This data collection by Chrome can only be triggered by Google's web services, such as Google Hangouts or Google Meet.

      Google may associate these logs, by means of a session ID, with other logs collected by the Google service itself; this is intended to make debugging easier.
      </translation>
<translation id="706669471845501145">Allow SITE to show desktop notifications?</translation>
<translation id="7072208053150563108">Machine password change rate</translation>
<translation id="7079519252486108041">Block pop-ups on these sites</translation>
<translation id="7085803328069945025">Allows you to set a list of url patterns that specify sites which are allowed to ask the user to grant them access to a USB device.

          If this policy is left not set, the global default value will be used for all sites either from the 'DefaultWebUsbGuardSetting' policy if it is set, or the user's personal configuration otherwise.

          URL patterns in this policy should not clash with ones configured via WebUsbBlockedForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both.</translation>
<translation id="7106631983877564505">Enable lock when <ph name="PRODUCT_OS_NAME" /> devices become idle or suspended.

      If you enable this setting, users will be asked for a password to unlock the device from sleep.

      If you disable this setting, users will not be asked for a password to unlock the device from sleep.

      If you enable or disable this setting, users cannot change or override it.

      If the policy is left not set the user can choose whether they want to be asked for password to unlock the device or not.</translation>
<translation id="7115494316187648452">Determines whether a <ph name="PRODUCT_NAME" /> process is started on OS login and keeps running when the last browser window is closed, allowing background apps and the current browsing session to remain active, including any session cookies. The background process displays an icon in the system tray and can always be closed from there.

      If this policy is set to True, background mode is enabled and cannot be controlled by the user in the browser settings.

      If this policy is set to False, background mode is disabled and cannot be controlled by the user in the browser settings.

      If this policy is left unset, background mode is initially disabled and can be controlled by the user in the browser settings.</translation>
<translation id="7123266440503901785"><ph name="PRODUCT_NAME" /> provides for the secure update and installation of extensions. However, the content of some extensions hosted outside of the Chrome Web Store may only be protected by insecure signing or hashing algorithms such as SHA1. When this policy is disabled, fresh installation of and updates to such extensions will not be permitted by Chrome (until the extension developers rebuild the extension with stronger algorithms). When this policy is enabled, installation and updates for such extensions will be permitted.

          This will default to the enabled behaviour when unset.
          Starting in <ph name="PRODUCT_NAME" /> 75, this will default to the disabled behaviour when unset.

          Starting in <ph name="PRODUCT_NAME" /> 77, this policy will be ignored and treated as disabled.</translation>
<translation id="7126716959063786004">Enable ending processes in Task Manager</translation>
<translation id="7127892035367404455">Roll back to target version</translation>
<translation id="7128918109610518786">Lists the application identifiers <ph name="PRODUCT_OS_NAME" /> shows as pinned apps in the launcher bar.

      If this policy is configured, the set of applications is fixed and can't be changed by the user.

      If this policy is left unset, the user may change the list of pinned apps in the launcher.</translation>
<translation id="7132877481099023201">URLs that will be granted access to video capture devices without prompt</translation>
<translation id="7138678301420049075">Other</translation>
<translation id="7158064522994309072">This policy controls which command to use to open URLs in an alternative browser.

      When this policy is left unset, a platform-specific default is used: Internet Explorer for Windows or Safari for Mac OS X. On Linux, launching an alternative browser will fail when this is unset.

      When this policy is set to one of ${ie}, ${firefox}, ${safari} or
      ${opera}, that browser will launch if it is installed. ${ie} is only
      available on Windows, and ${safari} is only available on Windows and Mac
      OS X.

      When this policy is set to a file path, that file is used as an executable
      file.</translation>
<translation id="7167436895080860385">Allow users to show passwords in Password Manager (deprecated)</translation>
<translation id="7173856672248996428">Ephemeral profile</translation>
<translation id="717630378807352957">Allow all printers from the configuration file.</translation>
<translation id="7176721759719212761">Specifies whether screen wake locks are allowed. Screen wake locks can be requested by extensions via the power management extension API and by ARC apps.

          If this policy is set to true or left not set, screen wake locks will be honoured for power management, unless AllowWakeLocks is set to false.

          If this policy is set to false, screen wake lock requests will be demoted to system wake lock requests.</translation>
<translation id="7185078796915954712">TLS 1.3</translation>
<translation id="718956142899066210">Connection types allowed for updates</translation>
<translation id="7194407337890404814">Default search provider name</translation>
<translation id="7202925763179776247">Allow download restrictions</translation>
<translation id="7207095846245296855">Force Google SafeSearch</translation>
<translation id="7216442368414164495">Allow users to opt in to Safe Browsing extended reporting</translation>
<translation id="7221822638060296742">Allows you to set whether websites are allowed to automatically run the <ph name="FLASH_PLUGIN_NAME" /> plug-in. Automatically running the <ph name="FLASH_PLUGIN_NAME" /> plug-in can be either allowed for all websites or denied for all websites.

          Click to play allows the <ph name="FLASH_PLUGIN_NAME" /> plug-in to run but the user must click on the placeholder to start its execution.

          Automatic playback is only allowed for domains explicitly listed in the <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME" /> policy. If you want to enabled automatic playback for all sites, consider adding http://* and https://* to this list.

          If this policy is left not set, the user will be able to change this setting manually.</translation>
<translation id="7229876938563670511">Configures the default homepage URL in <ph name="PRODUCT_NAME" /> and prevents users from changing it.

          The homepage is the page opened by the Home button. The pages that open on start-up are controlled by the RestoreOnStartup policies.

          The homepage type can either be set to a URL that you specify here or set to the new tab page. If you select the new tab page, then this policy does not take effect.

          If you enable this setting, users cannot change their homepage URL in <ph name="PRODUCT_NAME" />, but they can still choose the new tab page as their home page.

          Leaving this policy not set will also allow the user to choose their own homepage if HomepageIsNewTabPage is not set.

          This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="7229975860249300121">Contains a regular expression which is used to determine which Google accounts can be set as browser primary accounts in <ph name="PRODUCT_NAME" /> (i.e. the account that is chosen during the Sync opt-in flow).

      An appropriate error is displayed if a user tries to set a browser primary account with a username that does not match this pattern.

      If this policy is left not set or blank, then the user can set any Google account as a browser primary account in <ph name="PRODUCT_NAME" />.</translation>
<translation id="723103540848640830">Set the minimum length of the lock screen PIN</translation>
<translation id="7232816984286843471">If the policy is set to false, unaffiliated users will not be allowed to use Crostini.

      If the policy is unset or set to true, all users are allowed to use Crostini as long as other settings also allow it.
      All three policies, VirtualMachinesAllowed, CrostiniAllowed and DeviceUnaffiliatedCrostiniAllowed need to be true when they apply for Crostini to be allowed to run.
      When this policy is changed to false, it applies to starting new Crostini containers but does not shut down containers which are already running.</translation>
<translation id="7234280155140786597">Names of the forbidden native messaging hosts (or * for all)</translation>
<translation id="7236775576470542603">Set the default type of screen magnifier that is enabled on the login screen.

          If this policy is set, it controls the type of screen magnifier that is enabled when the login screen is shown. Setting the policy to "None" disables the screen magnifier.

          If you set this policy, users can temporarily override it by enabling or disabling the screen magnifier. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, the screen magnifier is disabled when the login screen is first shown. Users can enable or disable the screen magnifier at any time and its status on the login screen is persisted between users.</translation>
<translation id="7249828445670652637">Enable <ph name="PRODUCT_OS_NAME" /> CA certificates to ARC-apps</translation>
<translation id="7258823566580374486">Enable curtaining of remote access hosts</translation>
<translation id="7260277299188117560">Auto update p2p enabled</translation>
<translation id="7261252191178797385">Device wallpaper image</translation>
<translation id="7264704483008663819">This policy is deprecated in M68. Please use DeveloperToolsAvailability instead.

      Disables Developer Tools and JavaScript console.

      If you enable this setting, Developer Tools cannot be accessed nor website elements inspected. Any keyboard shortcuts, menu or context menu entries to open Developer Tools or JavaScript Console will be disabled.

      Setting this option to disabled, or leaving it not set allows the user to use Developer Tools and JavaScript console.

      If policy DeveloperToolsAvailability is set, the value of policy DeveloperToolsDisabled is ignored.</translation>
<translation id="7266471712301230894">This policy has been removed as of <ph name="PRODUCT_NAME" /> 64.

      Automatic search and installation of missing plug-ins is no longer supported.</translation>
<translation id="7267809745244694722">Media keys default to function keys</translation>
<translation id="7271085005502526897">Import of homepage from default browser on first run</translation>
<translation id="7273823081800296768">If this setting is enabled or not configured, then users can opt to pair clients and hosts at connection time, eliminating the need to enter a PIN every time.

          If this setting is disabled, then this feature will not be available.</translation>
<translation id="7275334191706090484">Managed Bookmarks</translation>
<translation id="7295019613773647480">Enable supervised users</translation>
<translation id="7301543427086558500">Specifies a list of alternative URLs that can be used to extract search terms from the search engine. The URLs should contain the string <ph name="SEARCH_TERM_MARKER" />, which will be used to extract the search terms.

          This policy is optional. If not set, no alternative urls will be used to extract search terms.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="7302043767260300182">Screen lock delay when running on AC power</translation>
<translation id="7311458740754205918">If this is set to true or not set, the New Tab page may show content suggestions based on the user's browsing history, interests or location.

      If this is set to false, automatically-generated content suggestions are not shown on the New Tab page.</translation>
<translation id="7313793931637495417">This policy controls whether to report version information, such as OS version, OS platform, OS architecture, <ph name="PRODUCT_NAME" /> version and <ph name="PRODUCT_NAME" /> channel.

      When this policy is left unset or set to True, version information is gathered.
      When this policy is set to False, version information is not gathered.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="7323896582714668701">Additional command line parameters for <ph name="PRODUCT_NAME" /></translation>
<translation id="7326394567531622570">Similar to Wipe (value 2), but tries to preserve login tokens so that the user does not have to sign in again.</translation>
<translation id="7329842439428490522">Specifies the length of time without user input after which the screen is turned off when running on battery power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> turns off the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME" /> does not turn off the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.</translation>
<translation id="7329968046053403405">Specifies the account type of the accounts provided by the Android authentication app that supports <ph name="HTTP_NEGOTIATE" /> authentication (e.g. Kerberos authentication). This information should be available from the supplier of the authentication app. For more details see https://goo.gl/hajyfN.

          If no setting is provided, <ph name="HTTP_NEGOTIATE" /> authentication is disabled on Android.</translation>
<translation id="7331962793961469250">When set to True, promotions for Chrome Web Store apps will not appear on the new tab page.

      Setting this option to False or leaving it unset will make the promotions for Chrome Web Store apps appear on the new tab page</translation>
<translation id="7332963785317884918">This policy is deprecated. <ph name="PRODUCT_OS_NAME" /> will always use the 'RemoveLRU' clean-up strategy.

      Controls the automatic clean-up behaviour on <ph name="PRODUCT_OS_NAME" /> devices. Automatic clean-up is triggered when the amount of free disk space reaches a critical level to recover some disk space.

      If this policy is set to 'RemoveLRU', the automatic clean-up will keep removing users from the device in least-recently-logged-in order until there is enough free space.

      If this policy is set to 'RemoveLRUIfDormant', the automatic clean-up will keep removing users who have not logged in for at least 3 months in least-recently-logged-in order until there is enough free space.

      If this policy is not set, automatic clean-up uses the default built-in strategy. Currently, it is the 'RemoveLRUIfDormant' strategy.</translation>
<translation id="7336878834592315572">Keep cookies for the duration of the session.</translation>
<translation id="7337967786223261174">Configures a list of printers.

      This policy allows administrators to provide printer configurations for
      their users.

      <ph name="PRINTER_DISPLAY_NAME" /> and <ph name="PRINTER_DESCRIPTION" /> are free-form strings that can be customised for ease of printer selection. <ph name="PRINTER_MANUFACTURER" /> and <ph name="PRINTER_MODEL" /> serve to ease printer identification by end users. They represent the manufacturer and model of the printer. <ph name="PRINTER_URI" /> should be an address reachable from a client computer including the <ph name="URI_SCHEME" />, <ph name="URI_PORT" /> and <ph name="URI_QUEUE" />. <ph name="PRINTER_UUID" /> is optional. If provided, it is used to help deduplicate <ph name="ZEROCONF_DISCOVERY" /> printers.

      <ph name="PRINTER_EFFECTIVE_MODEL" /> must match one of the strings which represent a <ph name="PRODUCT_NAME" /> supported printer. The string will be used to identify and install the appropriate PPD for the printer. More information can be found at https://support.google.com/chrome?p=noncloudprint.

      Printer setup is completed upon the first use of a printer.  PPDs are not downloaded until the printer is used. After that time, frequently used PPDs are cached.

      This policy has no effect on whether users can configure printers on individual devices.  It is intended to be supplementary to the configuration of printers by individual users.

      For Active Directory managed devices this policy supports expansion of <ph name="MACHINE_NAME_VARIABLE" /> to the Active Directory machine name or a substring of it. For example, if the machine name is <ph name="MACHINE_NAME_EXAMPLE" />, then <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> would be replaced by the 4 characters starting after the 6th position, i.e. <ph name="MACHINE_NAME_PART_EXAMPLE" />. Note that the position is zero-based.
      <ph name="MACHINE_NAME_VARIABLE_LOWERCASE" /> (lowercase) is deprecated in M71 and will be removed in M72.
      </translation>
<translation id="7340034977315324840">Report device activity times</translation>
<translation id="7343497214039883642">Enterprise printer configuration file for devices</translation>
<translation id="7349338075015720646">Specifies a list of websites that are installed silently, without user interaction, and which cannot be uninstalled or disabled by the user.

      Each list item of the policy is an object with two members: 'url' and 'launch_container'. 'url' should be the URL of the web app to install and 'launch_container' should be either 'window' or 'tab' to indicate how the web app will be opened once installed. If 'launch_container' is omitted, the app will launch in a window if Chrome considers it a progressive web app, and in a tab otherwise.</translation>
<translation id="735902178936442460">This policy controls whether to report information that can be used to identify machines, such as machine name and network addresses.

      When this policy is left unset or set to True, information that can be used to identify machines is gathered.
      When this policy is set to False, information that can be used to identify machines is not gathered.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="7367028210010532881">The Safe Browsing service shows a warning page when users navigate to sites that are flagged as potentially malicious. Enabling this setting prevents users from proceeding anyway from the warning page to the malicious site.

      If this setting is disabled or not configured then users can choose to proceed to the flagged site after being shown the warning.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.</translation>
<translation id="737655323154569539">Restricts printing page size. Unset policy and empty set are treated as no restriction.</translation>
<translation id="7417972229667085380">Percentage by which to scale the idle delay in presentation mode (deprecated)</translation>
<translation id="7421483919690710988">Set media disk cache size in bytes</translation>
<translation id="7424751532654212117">List of exceptions to the list of disabled plugins</translation>
<translation id="7426112309807051726">Specifies whether the <ph name="TLS_FALSE_START" /> optimisation should be disabled. For historical reasons, this policy is named DisableSSLRecordSplitting.

      If the policy is not set or is set to false, then <ph name="TLS_FALSE_START" /> will be enabled. If it is set to true, <ph name="TLS_FALSE_START" /> will be disabled.</translation>
<translation id="7433714841194914373">Enable Instant</translation>
<translation id="7443061725198440541">If this policy is not set or enabled, the user is allowed to use spellcheck.

      If this policy is disabled, the user is not allowed to use spellcheck. The SpellcheckLanguage policy will also be ignored when this policy is disabled.
      </translation>
<translation id="7443616896860707393">Cross-origin HTTP Basic Auth prompts</translation>
<translation id="7458437477941640506">Do not roll back to target version if OS version is newer than target. Updates are also disabled.</translation>
<translation id="7464991223784276288">Limit cookies from matching URLs to the current session</translation>
<translation id="7469554574977894907">Enable search suggestions</translation>
<translation id="7474249562477552702">Whether SHA-1 signed certificates issued by local trust anchors are allowed</translation>
<translation id="7485481791539008776">Default printer selection rules</translation>
<translation id="749556411189861380">Report OS and firmware version of enrolled devices.

      If this setting is not set or set to True, enrolled devices will report the OS and firmware version periodically. If this setting is set to False, version info will not be reported.</translation>
<translation id="7498946151094347510">Specifies the printers which a user cannot use.

      This policy is only used if <ph name="PRINTERS_BLACKLIST" /> is chosen for <ph name="DEVICE_PRINTERS_ACCESS_MODE" />.

      If this policy is used, all printers are provided to the user except for the ids listed in this policy. The ids must correspond to the 'id' or 'guid' fields in the file specified in <ph name="DEVICE_PRINTERS_POLICY" />.
      </translation>
<translation id="7511361072385293666">If this policy is set to true or not set usage of QUIC protocol in <ph name="PRODUCT_NAME" /> is allowed.
      If this policy is set to false usage of QUIC protocol is disallowed.</translation>
<translation id="7517845714620372896">Specifies screen brightness per cent.
          When this policy is set, initial screen brightness is adjusted to the policy value, but the user can change it later on. Auto-brightness features are disabled.
          When this policy is unset, user screen controls and auto-brightness features are not affected.
          The policy values should be specified in per cents in the range 0-100.</translation>
<translation id="7519251620064708155">Allow key generation on these sites</translation>
<translation id="7529100000224450960">Allows you to set a list of url patterns that specify sites which are allowed to open pop-ups.

          If this policy is left unset the global default value will be used for all sites either from the 'DefaultPop-upsSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="7529144158022474049">Auto update scatter factor</translation>
<translation id="7534199150025803530">This policy has no effect on the Android Google Drive app. If you want to prevent use of Google Drive over mobile connections, you should disallow installation of the Android Google Drive app.</translation>
<translation id="7547549430720182663">Merge</translation>
<translation id="7553535237300701827">When this policy is set, the login authentication flow will happen in one of the following ways depending on the value of the setting:

      If set to GAIA, login will be done via the normal GAIA authentication flow.

      If set to SAML_INTERSTITIAL, login will show an interstitial screen offering the user the option to go forward with authentication via the SAML IdP of the device's enrolment domain or go back to the normal GAIA login flow.</translation>
<translation id="755951849901630953">Enables component updates for all components in <ph name="PRODUCT_NAME" /> when not set or set to True.

      If set to False, updates to components are disabled. However, some components are exempt from this policy: updates to any component that does not contain executable code, does not significantly alter the behaviour of the browser or is critical for its security will not be disabled.
      Examples of such components include the certificate revocation lists and Safe Browsing data.
      See https://developers.google.com/safe-browsing for more info on Safe Browsing.</translation>
<translation id="7566878661979235378">SAML login authentication type</translation>
<translation id="757395965347379751">When this setting is enabled, <ph name="PRODUCT_NAME" /> allows SHA-1 signed certificates as long as they successfully validate and chain to a locally-installed CA certificates.

      Note that this policy depends on the operating system certificate verification stack allowing SHA-1 signatures. If an OS update changes the OS handling of SHA-1 certificates, this policy may no longer have effect. Furthermore, this policy is intended as a temporary workaround to give enterprises more time to move away from SHA-1. This policy will be removed on or around 1 January 2019.

      If this policy is not set, or it is set to false, then <ph name="PRODUCT_NAME" /> follows the publicly announced SHA-1 deprecation schedule.</translation>
<translation id="7593523670408385997">Configures the cache size that <ph name="PRODUCT_NAME" /> will use for storing cached files on the disk.

      If you set this policy, <ph name="PRODUCT_NAME" /> will use the provided cache size regardless of whether the user has specified the '--disk-cache-size' flag or not. The value specified in this policy is not a hard boundary but rather a suggestion to the caching system, any value below a few megabytes is too small and will be rounded up to a sane minimum.

      If the value of this policy is 0, the default cache size will be used but the user will not be able to change it.

      If this policy is not set, the default size will be used and the user will be able to override it with the --disk-cache-size flag.</translation>
<translation id="759957074386651883">Safe Browsing settings</translation>
<translation id="7604169113182304895">Android apps may voluntarily choose to honour this list. You cannot force them to honour it.</translation>
<translation id="7612157962821894603">System wide flags to be applied on <ph name="PRODUCT_NAME" /> startup</translation>
<translation id="7614663184588396421">List of disabled protocol schemes</translation>
<translation id="7617319494457709698">This policy specifies the allowed extensions to use the <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> function <ph name="CHALLENGE_USER_KEY_FUNCTION" /> for remote attestation. Extensions must be added to this list to use the API.

          If an extension is not in the list, or the list is not set, the call to the API will fail with an error code.</translation>
<translation id="7618907117929117943">Roll back and stay on target version if OS version is newer than target and it's possible to carry over device-level configuration (including network credentials) through rollback, also skipping OOBE after rollback. Don't do or abort rollback if that's not possible (because the target version doesn't support restoring data or because of a backward-incompatible change).
          Supported on <ph name="PRODUCT_OS_NAME" /> version 70 and higher. For older clients, this value means that rollback is disabled.</translation>
<translation id="7620869951155758729">This policy specifies configuration that is used to generate and verify Parent Access Code.

      |current_config| is always used for generating access code and should be used for validating access code only when it cannot be validated with |future_config|.
      |future_config| is the primary config used for validating access code.
      |old_configs| should be used for validating access code only when it cannot be validated with |future_config| nor |current_config|.

      The expected way of using this policy is to gradually rotate access code configuration. New configuration is always put into |future_config| and at the same
      time the existing value is moved into |current_config|. |current_config|'s previous values are moved into |old_configs| and removed after rotation cycle is finished.

      This policy applies only to child user.
      When this policy is set, Parent Access Code can be verified on child user's device.
      When this policy is unset, it is not possible to verify Parent Access Code on child user's device.</translation>
<translation id="7625444193696794922">Specifies the release channel that this device should be locked to.</translation>
<translation id="7632724434767231364">GSSAPI library name</translation>
<translation id="7635471475589566552">Configures the application locale in <ph name="PRODUCT_NAME" /> and prevents users from changing the locale.

      If you enable this setting, <ph name="PRODUCT_NAME" /> uses the specified locale. If the configured locale is not supported, 'en-US' is used instead.

      If this setting is disabled or not set, <ph name="PRODUCT_NAME" /> uses either the user-specified preferred locale (if configured), the system locale or the default locale 'en-US'.</translation>
<translation id="7641363659597330616">Configures the type of downloads that <ph name="PRODUCT_NAME" /> will completely block, without letting users override the security decision.

      If you set this policy, <ph name="PRODUCT_NAME" /> will prevent certain types of downloads and won't let users bypass the security warnings.

      When the 'Block dangerous downloads' option is chosen, all downloads are allowed, except for those that carry Safe Browsing warnings.

      When the 'Block potentially dangerous downloads' option is chosen, all downloads are allowed, except for those that carry Safe Browsing warnings of potentially dangerous downloads.

      When the 'Block all downloads' option is chosen, all downloads are blocked.

      When this policy is not set, (or the 'No special restrictions' option is chosen), the downloads will go through the usual security restrictions based on Safe Browsing analysis results.

      Note that these restrictions apply to downloads triggered from web page content, as well as the 'download link...' context menu option. These restrictions do not apply to the save/download of the currently displayed page, nor do they apply to saving as PDF from the printing options.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.</translation>
<translation id="7643883929273267746">Restrict accounts that are visible in <ph name="PRODUCT_NAME" /></translation>
<translation id="7651739109954974365">Determines whether data roaming should be enabled for the device. If set to true, data roaming is allowed. If left unconfigured or set to false, data roaming will be unavailable.</translation>
<translation id="7673194325208122247">Time period (milliseconds)</translation>
<translation id="7676708657861783864">Cookies set by pages matching these URL patterns will be limited to the current session, i.e. they will be deleted when the browser exits.

          For URLs not covered by the patterns specified here, or for all URLs if this policy is not set, the global default value will be used either from the 'DefaultCookiesSetting' policy, if it is set, or from the user's personal configuration.

          Note: If <ph name="PRODUCT_NAME" /> is running in 'background mode', the session may not be closed when the last browser window is closed, but will stay active instead until the browser exits. Please see the 'BackgroundModeEnabled' policy for more information about configuring this behaviour.

          Also see policies 'CookiesAllowedForUrls' and 'CookiesBlockedForUrls'. Note: There must be no conflicting URL patterns between these three policies – it is not specified as to which policy takes precedence.

          If the 'RestoreOnStartup' policy is set to restore URLs from previous sessions, this policy will not be respected and cookies will be stored permanently for those sites.</translation>
<translation id="7683777542468165012">Dynamic Policy Refresh</translation>
<translation id="7694807474048279351">Schedule an automatic reboot after a <ph name="PRODUCT_OS_NAME" /> update has been applied.

      When this policy is set to true, an automatic reboot is scheduled when a <ph name="PRODUCT_OS_NAME" /> update has been applied and a reboot is required to complete the update process. The reboot is scheduled immediately but may be delayed on the device by up to 24 hours if a user is currently using the device.

      When this policy is set to false, no automatic reboot is scheduled after applying a <ph name="PRODUCT_OS_NAME" /> update. The update process is completed when the user next reboots the device.

      If you set this policy, users cannot change or override it.

      Note: Currently, automatic reboots are only enabled while the login screen is being shown or a Kiosk app session is in progress. This will change in the future and the policy will always apply, regardless of whether a session of any particular type is in progress or not.</translation>
<translation id="7701341006446125684">Set Apps and Extensions cache size (in bytes)</translation>
<translation id="7709537117200051035">A dictionary mapping host names to a boolean flag specifying whether access to the host should be allowed (true) or blocked (false).

          This policy is for internal use by <ph name="PRODUCT_NAME" /> itself.</translation>
<translation id="7712109699186360774">Ask every time a site wants to access the camera and/or microphone</translation>
<translation id="7713608076604149344">Download restrictions</translation>
<translation id="7715711044277116530">Percentage by which to scale the screen dim delay in presentation mode</translation>
<translation id="7717938661004793600">Configure <ph name="PRODUCT_OS_NAME" /> accessibility features.</translation>
<translation id="7724994675283793633">This policy enables HTTP/0.9 on ports other than 80 for HTTP and 443 for HTTPS.

      This policy is disabled by default and, if enabled, leaves users open to the security issue https://crbug.com/600352.

      This policy is intended to give enterprises a chance to migrate existing servers off HTTP/0.9, and will be removed in the future.

      If this policy is not set, HTTP/0.9 will be disabled on non-default ports.</translation>
<translation id="7747447585227954402">Allow devices to use a <ph name="PLUGIN_VM_NAME" /> on <ph name="PRODUCT_OS_NAME" /></translation>
<translation id="7749402620209366169">Enables two-factor authentication for remote access hosts instead of a user-specified PIN.

          If this setting is enabled, then users must provide a valid two-factor code when accessing a host.

          If this setting is disabled or not set, then two-factor will not be enabled and the default behaviour of having a user-defined PIN will be used.</translation>
<translation id="7750991880413385988">Open New Tab Page</translation>
<translation id="7754704193130578113">Ask where to save each file before downloading</translation>
<translation id="7761446981238915769">Configure the list of installed apps on the login screen</translation>
<translation id="7763479091692861127"> The types of connections that are allowed to use for OS updates. OS updates potentially put heavy strain on the connection due to their size and may incur additional cost. Therefore, they are by default not enabled for connection types that are considered expensive, which include WiMax, Bluetooth and Cellular at the moment.

      The recognised connection type identifiers are "ethernet", "wifi", "wimax", "bluetooth" and "cellular".</translation>
<translation id="7763614521440615342">Show content suggestions on the New Tab page</translation>
<translation id="7765879851993224640">Allow Smart Lock Sign-in to be used.</translation>
<translation id="7774768074957326919">Use system proxy settings</translation>
<translation id="7775831859772431793">You can specify the URL of the proxy server here.

          This policy only takes effect if you have selected manual proxy settings at 'Choose how to specify proxy server settings'.

          You should leave this policy not set if you have selected any other mode for setting proxy policies.

          For more options and detailed examples, visit:
          <ph name="PROXY_HELP_URL" />.</translation>
<translation id="7781069478569868053">New Tab Page</translation>
<translation id="7788511847830146438">Per Profile</translation>
<translation id="780603170519840350">Disables enforcing Certificate Transparency requirements for a list of subjectPublicKeyInfo hashes.

      This policy allows disabling Certificate Transparency disclosure requirements for certificate chains that contain certificates with one of the specified subjectPublicKeyInfo hashes. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used for Enterprise hosts.

      In order for Certificate Transparency enforcement to be disabled when this policy is set, one of the following conditions must be met:
      1. The hash is of the server certificate's subjectPublicKeyInfo.
      2. The hash is of a subjectPublicKeyInfo that appears in a CA certificate in the certificate chain, that CA certificate is constrained via the X.509v3 nameConstraints extension, one or more directoryName nameConstraints are present in the permittedSubtrees, and the directoryName contains an organizationName attribute.
      3. The hash is of a subjectPublicKeyInfo that appears in a CA certificate in the certificate chain, the CA certificate has one or more organizationName attributes in the certificate Subject, and the server's certificate contains the same number of organizationName attributes, in the same order, and with byte-for-byte identical values.

      A subjectPublicKeyInfo hash is specified by concatenating the hash algorithm name, the '/' character and the Base64 encoding of that hash algorithm applied to the DER-encoded subjectPublicKeyInfo of the specified certificate. This Base64 encoding is the same format as an SPKI Fingerprint, as defined in RFC 7469, Section 2.4. Unrecognised hash algorithms are ignored. The only supported hash algorithm at this time is 'sha256'.

      If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.</translation>
<translation id="7818131573217430250">Set the default state of high contrast mode on the login screen</translation>
<translation id="7822837118545582721">When this policy is set to true, users cannot write anything to external storage devices.

      If this setting is set to false or not configured, then users can create and modify files of external storage devices which are physically writable.

      The ExternalStorageDisabled policy takes precedence over this policy – if ExternalStorageDisabled is set to true, then all access to external storage is disabled and this policy is consequently ignored.

      Dynamic refresh of this policy is supported in M56 and later.</translation>
<translation id="7831595031698917016">Specifies the maximum delay in milliseconds between receiving a policy invalidation and fetching the new policy from the device management service.

      Setting this policy overrides the default value of 5,000 milliseconds. Valid values for this policy are in the range from 1,000 (1 second) to 300,000 (5 minutes). Any values not in this range will be clamped to the respective boundary.

      Leaving this policy not set will make <ph name="PRODUCT_NAME" /> use the default value of 5,000 milliseconds.</translation>
<translation id="7841880500990419427">Minimum TLS version to fallback to</translation>
<translation id="7842869978353666042">Configure Google Drive options</translation>
<translation id="787125417158068494">If set to SyncDisabled or not configured, <ph name="PRODUCT_OS_NAME" /> certificates are not available for ARC-apps.

      If set to CopyCaCerts, all ONC-installed CA certificates with <ph name="WEB_TRUSTED_BIT" /> are available for ARC-apps.</translation>
<translation id="7882585827992171421">This policy is active in retail mode only.

      Determines the id of the extension to be used as a screen saver on the sign-in screen. The extension must be part of the AppPack that is configured for this domain through the DeviceAppPack policy.</translation>
<translation id="7882857838942884046">Disabling Google Sync will cause Android Backup and Restore to not function properly.</translation>
<translation id="7882890448959833986">Suppress the unsupported OS warning</translation>
<translation id="7902255855035461275">Patterns in this list will be matched against the security
      origin of the requesting URL. If a match is found, access to video
      capture devices will be granted without prompt.

      NOTE: Until version 45, this policy was only supported in Kiosk mode.</translation>
<translation id="7912255076272890813">Configure allowed app/extension types</translation>
<translation id="7915236031252389808">You can specify a URL to a proxy .pac file here.

          This policy only takes effect if you have selected manual proxy settings at 'Choose how to specify proxy server settings'.

          You should leave this policy unset if you have selected any other mode for setting proxy policies.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL" />.</translation>
<translation id="793134539373873765">Specifies whether p2p is to be used for OS update payloads. If set to True, devices will share and attempt to consume update payloads on the LAN, potentially reducing Internet bandwidth usage and congestion. If the update payload is not available on the LAN, the device will fall back to downloading from an update server. If set to False or not configured, p2p will not be used.</translation>
<translation id="7933141401888114454">Enable creation of supervised users</translation>
<translation id="793473937901685727">Set certificate availability for ARC-apps</translation>
<translation id="7937766917976512374">Allow or deny video capture</translation>
<translation id="7941975817681987555">Do not predict network actions on any network connection</translation>
<translation id="7952002811557367112">This policy prevents the user from loading web pages from blacklisted URLs. The blacklist provides a list of URL patterns that specify which URLs will be blacklisted.

      A URL pattern has to be formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format.

      Exceptions can be defined in the URL whitelist policy. These policies are limited to 1,000 entries; subsequent entries will be ignored.

      Note that it is not recommended to block internal 'chrome://*' URLs after this may lead to unexpected errors.

      Note that this policy does not prevent the page updating dynamically through JavaScript. For example, if you block 'example.com/abc', users might still be able to visit 'example.com' and click on a link to visit 'example.com/abc', as long as the page does not refresh.

      If this policy is not set, no URL will be blacklisted in the browser.</translation>
<translation id="7953256619080733119">Managed user manual exception hosts</translation>
<translation id="7961779417826583251">Disable Certificate Transparency enforcement for a list of Legacy Certificate Authorities</translation>
<translation id="7974114691960514888">This policy is no longer supported.
          Enables usage of STUN and relay servers when connecting to a remote client.

          If this setting is enabled, then this machine can discover and connect to remote host machines even if they are separated by a firewall.

          If this setting is disabled and outgoing UDP connections are filtered by the firewall, then this machine can only connect to host machines within the local network.</translation>
<translation id="7976157349247117979">Name of the <ph name="PRODUCT_NAME" /> destination</translation>
<translation id="7980227303582973781">No special restrictions</translation>
<translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
<translation id="7992136759457836904">Allows you to control whether virtual machines are allowed to run on Chrome OS.

      If the policy is set to True, the device is allowed to run virtual machines.
      If the policy is set to False, the device will not be allowed to run virtual machines.
      All three policies, VirtualMachinesAllowed, CrostiniAllowed and DeviceUnaffiliatedCrostiniAllowed need to be true when they apply for Crostini to be allowed to run.
      When this policy is changed to False, it applies to starting new virtual machines but does not shut down virtual machines which are already running.
      When this policy is not set on a managed device, the device is not allowed to run virtual machines.
      Unmanaged devices are allowed to run virtual machines.</translation>
<translation id="8001701200415781021">Restrict which Google accounts are allowed to be set as browser primary accounts in <ph name="PRODUCT_NAME" /></translation>
<translation id="8009554972280451023">If you enable this setting, the settings stored in <ph name="PRODUCT_NAME" /> profiles such as bookmarks, auto-fill data, passwords, etc. will also be written to a file stored in the Roaming user profile folder or a location specified by the Administrator through the <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" /> policy. Enabling this policy disables cloud sync.

      If this policy is disabled or left not set only the regular local profiles will be used.

      The <ph name="SYNC_DISABLED_POLICY_NAME" /> policy disables all data synchronisation, overriding <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />.</translation>
<translation id="802147957407376460">Rotate screen by 0 degrees</translation>
<translation id="8033913082323846868">This policy is deprecated in M70, please use AutofillAddressEnabled and AutofillCreditCardEnabled instead.

      Enables <ph name="PRODUCT_NAME" />'s Auto-Fill feature and allows users to auto-complete web forms using previously stored information such as address or credit card information.

      If you disable this setting, Auto-Fill will be inaccessible to users.

      If you enable this setting or do not set a value, Auto-Fill will remain under the control of the user. This will allow them to configure Auto-Fill profiles and to switch Auto-Fill on or off at their own discretion.</translation>
<translation id="8044493735196713914">Report device boot mode</translation>
<translation id="8050080920415773384">Native Printing</translation>
<translation id="8053580360728293758">Overrides default printing colour mode. If the mode is unavailable, this policy is ignored.</translation>
<translation id="8059164285174960932">URL where remote access clients should obtain their authentication token</translation>
<translation id="8078366200175825572">Allows you to set a list of URL patterns that specify sites which are not allowed to set cookies.

          If this policy is left not set, the global default value will be used for all sites, either from the 'DefaultCookiesSetting' policy if it is set, or from the user's personal configuration. 

          Also see policies 'CookiesAllowedForUrls' and 'CookiesSessionOnlyForUrls'. Note: There must be no conflicting URL patterns between these three policies – it is not specified as to which policy takes precedence.</translation>
<translation id="8099880303030573137">Idle delay when running on battery power</translation>
<translation id="8102913158860568230">Default mediastream setting</translation>
<translation id="8104186956182795918">Allows you to set whether websites are allowed to display images. Displaying images can be either allowed for all websites or denied for all websites.

          If this policy is left not set, 'AllowImages' will be used and the user will be able to change it.

          Note: This policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.</translation>
<translation id="8104962233214241919">Automatically select client certificates for these sites</translation>
<translation id="8112122435099806139">Specifies the clock format be used for the device.

      This policy configures the clock format to use on the log-in screen and as a default for user sessions. Users can still override the clock format for their account.

      If the policy is set to true, the device will use a 24-hour clock format. If the policy is set to false, the device will use a 12-hour clock format.

      If this policy is not set, the device will default to a 24-hour clock format.</translation>
<translation id="8114382167597081590">Do not enforce Restricted Mode on YouTube</translation>
<translation id="8118665053362250806">Set media disk cache size</translation>
<translation id="8124468781472887384">Device printers configuration access policy.</translation>
<translation id="8135937294926049787">Specifies the length of time without user input after which the screen is turned off when running on AC power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> turns off the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME" /> does not turn off the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal to the idle delay.</translation>
<translation id="8138009212169037227">This policy controls whether to report policy data and time of policy fetch.

      When this policy is left unset or set to True, policy data and time of policy fetch are gathered.
      When this policy is set to False, policy data and time of policy fetch are not gathered.

      This policy is only effective when the <ph name="CHROME_REPORTING_EXTENSION_NAME" /> is enabled, and the machine is enrolled with <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation>
<translation id="8140204717286305802">Report list of network interfaces with their types and hardware addresses to the server.

      If the policy is set to false, the interface list will not be reported.</translation>
<translation id="8141795997560411818">This policy does not prevent the user from using the Android Google Drive app. If you want to prevent access to Google Drive, you should disallow installation of the Android Google Drive app as well.</translation>
<translation id="8142894094385450823">Set the recommended locales for a managed session</translation>
<translation id="8146727383888924340">Allow users to redeem offers through Chrome OS Registration</translation>
<translation id="8148785525797916822">Suppresses the warning that appears when <ph name="PRODUCT_NAME" /> is running on a computer or operating system that is no longer supported.</translation>
<translation id="8148901634826284024">Enable the high contrast mode accessibility feature.

          If this policy is set to true, high contrast mode will always be enabled.

          If this policy is set to false, high contrast mode will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, high contrast mode is disabled initially but can be enabled by the user at any time.</translation>
<translation id="815061180603915310">If set to enabled this policy forces the profile to be switched to ephemeral mode. If this policy is specified as an OS policy (e.g. GPO on Windows) it will apply to every profile on the system; if the policy is set as a Cloud policy it will apply only to a profile signed in with a managed account.

      In this mode the profile data is persisted on disk only for the length of the user session. Features like browser history, extensions and their data, web data like cookies and web databases are not preserved after the browser is closed. However this does not prevent the user from downloading any data to disk manually, save pages or print them.

      If the user has enabled sync, all this data is preserved in their sync profile just as with regular profiles. Incognito mode is also available if not explicitly disabled by policy.

      If the policy is set to disabled or left not set signing in leads to regular profiles.</translation>
<translation id="8158758865057576716">Enable the creation of roaming copies for <ph name="PRODUCT_NAME" /> profile data.</translation>
<translation id="817455428376641507">Allows access to the listed URLs, as exceptions to the URL blacklist.

      See the description of the URL blacklist policy for the format of entries of this list.

      This policy can be used to open exceptions to restrictive blacklists. For example, '*' can be blacklisted to block all requests, and this policy can be used to allow access to a limited list of URLs. It can be used to open exceptions to certain schemes, subdomains of other domains, ports or specific paths.

      The most specific filter will determine if a URL is blocked or allowed. The whitelist takes precedence over the blacklist.

      This policy is limited to 1000 entries; subsequent entries will be ignored.

      If this policy is not set there will be no exceptions to the blacklist from the 'URLBlacklist' policy.</translation>
<translation id="8176035528522326671">Allow enterprise user to be primary multi-profile user only (Default behaviour for enterprise-managed users)</translation>
<translation id="8214600119442850823">Configures the password manager.</translation>
<translation id="8244525275280476362">Maximum fetch delay after a policy invalidation</translation>
<translation id="8256688113167012935">Controls the account name <ph name="PRODUCT_OS_NAME" /> shows on the login screen for the corresponding device-local account.

      If this policy is set, the login screen will use the specified string in the picture-based login chooser for the corresponding device-local account.

      If the policy is left not set, <ph name="PRODUCT_OS_NAME" /> will use the device-local account's email account ID as the display name on the login screen.

      This policy is ignored for regular user accounts.</translation>
<translation id="8259375588339409826">Both Chromium and Google Chrome support the same set of policies. Please note that this document may include unreleased policies (i.e. their 'Supported on' entry refers to a not-yet released version of <ph name="PRODUCT_NAME" />) which are subject to change or removal without notice and for which no guarantees of any kind are provided, including no guarantees with respect to their security and privacy properties.

These policies are strictly intended to be used to configure instances of <ph name="PRODUCT_NAME" /> internal to your organisation. Use of these policies outside of your organisation (for example, in a publicly distributed program) is considered malware and will likely be labelled as malware by Google and anti-virus vendors.

These settings don't need to be configured manually! Easy-to-use templates for Windows, Mac and Linux are available for download from <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />.

The recommended way to configure policy on Windows is via GPO, although provisioning policy via registry is still supported for Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain.</translation>
<translation id="8264653492961233132">Specifies a list of apps and extensions that are installed silently,
          without user interaction, and which cannot be uninstalled nor
          disabled by the user. All permissions requested by the
          apps/extensions are granted implicitly, without user interaction,
          including any additional permissions requested by future versions of
          the app/extension. Furthermore, permissions are granted for the
          enterprise.deviceAttributes and enterprise.platformKeys extension
          APIs. (These two APIs are not available to apps/extensions that are
          not force-installed.)

          This policy takes precedence over a potentially conflicting <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> policy. If an app or extension that previously had been force-installed is removed from this list, it is automatically uninstalled by <ph name="PRODUCT_NAME" />.

          For Windows instances that are not joined to a <ph name="MS_AD_NAME" /> domain, forced installation is limited to apps and extensions listed in the Chrome Web Store.

          Note that the source code of any extension may be altered by users via Developer Tools (potentially rendering the extension dysfunctional). If this is a concern, the <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> policy should be set.

          Each list item of the policy is a string that contains an extension ID and, optionally, an 'update' URL separated by a semi-colon (<ph name="SEMICOLON" />). The extension ID is the 32-letter string found e.g. on <ph name="CHROME_EXTENSIONS_LINK" /> when in developer mode. The 'update' URL, if specified, should point to an Update Manifest XML document as described at <ph name="LINK_TO_EXTENSION_DOC1" />. By default, the Chrome Web Store's update URL is used (which currently is 'https://clients2.google.com/service/update2/crx'). Note that the 'update' URL set in this policy is only used for the initial installation; subsequent updates of the extension employ the update URL indicated in the extension's manifest. Note also that specifying the 'update' URL explicitly was mandatory in <ph name="PRODUCT_NAME" /> versions up to and including 67.

          For example, <ph name="EXTENSION_POLICY_EXAMPLE" /> installs the <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> app from the standard Chrome Web Store 'update' URL. For more information about hosting extensions, see: <ph name="LINK_TO_EXTENSION_DOC2" />.

          If this policy is left not set, no apps or extensions are installed automatically and the user can uninstall any app or extension in <ph name="PRODUCT_NAME" />.

          Note that this policy doesn't apply to incognito mode.</translation>
<translation id="8274603902181597201">Wipe the user’s eCryptfs home directory and start with a fresh ext4-encrypted home directory.</translation>
<translation id="8285435910062771358">Full-screen magnifier enabled</translation>
<translation id="8288199156259560552">Enable Android Google Location Service</translation>
<translation id="8292322992383748446">Report hardware statistics for SoC components.

      If the policy is set to false, the statistics will not be reported.
      If set to true or left unset, statistics will be reported.</translation>
<translation id="8294750666104911727">Normally pages with X-UA-Compatible set to chrome=1 will be rendered in <ph name="PRODUCT_FRAME_NAME" /> regardless of the 'ChromeFrameRendererSettings' policy.

          If you enable this setting, pages will not be scanned for meta tags.

          If you disable this setting, pages will be scanned for meta tags.

          If this policy is not set, pages will be scanned for meta tags.</translation>
<translation id="8300455783946254851">Disables Google Drive syncing in the <ph name="PRODUCT_OS_NAME" /> Files app when using a mobile connection when set to True. In that case, data is only synced to Google Drive when connected via Wi-Fi or Ethernet.

          If not set or set to False, then users will be able to transfer files to Google Drive via mobile connections.</translation>
<translation id="8300992833374611099">Control where Developer Tools can be used</translation>
<translation id="8312129124898414409">Allows you to set whether websites are allowed to use key generation. Using key generation can be either allowed for all websites or denied for all websites.

          If this policy is left not set, 'BlockKeygen' will be used and the user will be able to change it.</translation>
<translation id="8329984337216493753">This policy is active in retail mode only.

      When DeviceIdleLogoutTimeout is specified, this policy defines the duration of the warning box with a count down timer that is shown to the user before the logout is executed.

      The policy value should be specified in milliseconds.</translation>
<translation id="8339420913453596618">Second factor disabled</translation>
<translation id="8344454543174932833">Import bookmarks from default browser on first run</translation>
<translation id="8359734107661430198">Enable ExampleDeprecatedFeature API through 2008/09/02</translation>
<translation id="8367209241899435947">Enable Chrome Cleanup on Windows</translation>
<translation id="8369602308428138533">Screen off delay when running on AC power</translation>
<translation id="8371178326720637170">Enables managed extensions to use the Enterprise Hardware Platform API</translation>
<translation id="8374747520743832795">Report hardware statistics and identifiers related to power.

      If the policy is set to false, the statistics will not be reported.
      If set to true or left unset, statistics will be reported.</translation>
<translation id="8377433219608936819">
      If the policy is set to true, cloud  policy takes precedence if it conflicts with machine policy.
      If the policy is set to false or not configured, machine policy takes precedence if it conflicts with cloud policy.
      For more details about policy priority, please visit: https://support.google.com/chrome?p=set_chrome_policies_for_devices

      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="8382184662529825177">Enable the use of remote attestation for content protection for the device</translation>
<translation id="838870586332499308">Enable data roaming</translation>
<translation id="8390049129576938611">Disables the internal PDF viewer in <ph name="PRODUCT_NAME" />. Instead, it treats it as download and allows the user to open PDF files with the default application.

      If this policy is left not set or disabled the PDF plug-in will be used to open PDF files, unless the user disables it.</translation>
<translation id="8396145449084377015">This policy controls whether to load rules from Internet Explorer's SiteList policy.

      When this policy is left unset, or set to false, <ph name="PRODUCT_NAME" /> does not use Internet Explorer's <ph name="IEEM_SITELIST_POLICY" /> policy as a source of rules for switching browsers.

      When this policy is set to true, <ph name="PRODUCT_NAME" /> reads Internet Explorer's <ph name="IEEM_SITELIST_POLICY" /> to obtain the site list's URL. <ph name="PRODUCT_NAME" /> then downloads the site list from that URL, and applies the rules as if they had been configured with the <ph name="SITELIST_POLICY_NAME" /> policy.

      For more information on Internet Explorer's <ph name="IEEM_SITELIST_POLICY" /> policy: https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
<translation id="8402079500086185021">Always Open PDF files externally</translation>
<translation id="8412312801707973447">Whether online OCSP/CRL checks are performed</translation>
<translation id="8417305981081876834">Set the maximum length of the lock screen PIN</translation>
<translation id="841977920223099909">Password protection warning trigger</translation>
<translation id="8424255554404582727">Set default display rotation, reapplied on every reboot</translation>
<translation id="8426231401662877819">Rotate screen clockwise by 90 degrees</translation>
<translation id="8433186206711564395">Network settings</translation>
<translation id="8433423491036718210">Configure the list of enterprise login URLs where password protection service should capture fingerprint of password.</translation>
<translation id="8451988835943702790">Use New Tab Page as homepage</translation>
<translation id="8459216513698220096">Specifies whether and how user policy from computer GPO is processed.

      If the policy is set to 'Default' or if it is unset, user policy is read only from user GPOs (computer GPOs are ignored).

      If the policy is set to 'Merge', user policy in user GPOs is merged with user policy in computer GPOs (computer GPOs take preference).

      If the policy is set to 'Replace', user policy in user GPOs is replaced by user policy in computer GPOs (user GPOs are ignored).</translation>
<translation id="8465065632133292531">Parameters for instant URL which uses POST</translation>
<translation id="847472800012384958">Do not allow any site to show pop-ups</translation>
<translation id="8477885780684655676">TLS 1.0</translation>
<translation id="8483004350080020634">Strips privacy and security sensitive parts of https:// URLs before passing them on to PAC scripts (Proxy Auto Config) used by <ph name="PRODUCT_NAME" /> during proxy resolution.

      When True, the security feature is enabled, and https:// URLs are
      stripped before submitting them to a PAC script. In this manner, the PAC
      script is not able to view data that is ordinarily protected by an
      encrypted channel (such as the URL's path and query).

      When False, the security feature is disabled, and PAC scripts are
      implicitly granted the ability to view all components of an https://
      URL. This applies to all PAC scripts regardless of origin (including
      those fetched over an insecure transport, or discovered insecurely
      through WPAD).

      This defaults to True (security feature enabled).

      It is recommended that this be set to True. The only reason to set it to
      False is if it causes a compatibility problem with existing PAC scripts.

      The policy will be removed in M75.</translation>
<translation id="8484458986062090479">Customise the list of URL patterns that should always be rendered by the host browser.

          If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy.

          For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
<translation id="8489964335640955763">PluginVm</translation>
<translation id="8493645415242333585">Disable saving browser history</translation>
<translation id="8499172469244085141">Default Settings (users can override)</translation>
<translation id="8507835864888987300">Sets a target version for Auto Updates.

      Specifies the prefix of a target version <ph name="PRODUCT_OS_NAME" /> should update to. If the device is running a version that's before the specified prefix, it will update to the latest version with the given prefix. If the device is already on a later version, effects depend on the value of <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />. The prefix format works component-wise as is demonstrated in the following example:

      "" (or not configured): update to latest version available.
      "1412.": update to any minor version of 1412 (e.g. 1412.24.34 or 1412.60.2)
      "1412.2.": update to any minor version of 1412.2 (e.g. 1412.2.34 or 1412.2.2)
      "1412.24.34": update to this specific version only

      Warning: It is not recommended to configure version restrictions as they may prevent users from receiving software updates and critical security fixes. Restricting updates to a specific version prefix might leave users at risk.</translation>
<translation id="8519264904050090490">Managed user manual exception URLs</translation>
<translation id="8538235451413605457">Configures the requirement of the minimum allowed version of <ph name="PRODUCT_NAME" />. Versions below given are treated as obsolete and device would not allow user to sign in before OS is updated.
      If current version becomes obsolete during user session, user will be forcefully signed out.

      If this policy is not set, no restrictions are applied, and user can sign in regardless of <ph name="PRODUCT_NAME" /> version.

      Here 'Version' can be either an exact version such as '61.0.3163.120' or a version prefix, such as '61.0'  </translation>
<translation id="8544375438507658205">Default HTML renderer for <ph name="PRODUCT_FRAME_NAME" /></translation>
<translation id="8544465954173828789">Allow SMS messages to be synced from phone to Chromebook.</translation>
<translation id="8548832052135586762">Sets printing to colour only, monochrome only or no colour mode restriction. Unset policy is treated as no restriction.</translation>
<translation id="8549772397068118889">Warn when visiting sites outside of content packs</translation>
<translation id="8566842294717252664">Hide the web store from the New Tab Page and app launcher</translation>
<translation id="857369585509260201">This policy is deprecated. Consider using BrowserSignin instead.

      If this policy is set to true, the user has to sign in to <ph name="PRODUCT_NAME" /> with their profile before using the browser. And the default value of BrowserGuestModeEnabled will be set to false. Note: Existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help centre article.

      If this policy is set to false or not configured, user can use the browser without sign in to <ph name="PRODUCT_NAME" />.</translation>
<translation id="8586528890725660268">Specifies the printers which a user cannot use.

      This policy is only used if <ph name="PRINTERS_BLACKLIST" /> is chosen for <ph name="BULK_PRINTERS_ACCESS_MODE" />.

      If this policy is used, all printers are provided to the user except for the ids listed in this policy. The ids must correspond to the 'id' or 'guid' fields in the file specified in <ph name="BULK_PRINTERS_POLICY" />.
      </translation>
<translation id="8587229956764455752">Allow creation of new user accounts</translation>
<translation id="8598350264853261122">If the policy is set to false, unaffiliated users will not be allowed to use ARC.

      If the policy is unset or set to true, all users are allowed to use ARC (unless ARC is disabled by other means).

      Changes to the policy will only be applied while ARC is not running, e.g. while Chrome OS is starting.</translation>
<translation id="8615400197788843468">Enables <ph name="PRODUCT_NAME" />'s restricted login feature in G Suite and prevents users from changing this setting.

      If you define this setting, the user will only be able to access Google
      Apps using accounts from the specified domains (note that to allow
      gmail.com/googlemail.com accounts, you should add 'consumer_accounts'
      (without quotes) to the list of domains).

      This setting will prevent the user from logging in, and adding a secondary
      account, on a managed device that requires Google authentication, if that
      account does not belong to the aforementioned list of allowed domains.

      If you leave this setting empty/not configured, the user will be able to
      access G Suite with any account.

      This policy causes the X-GoogApps-Allowed-Domains header to be appended to
      all HTTP and HTTPS requests to all google.com domains, as described in
      https://support.google.com/a/answer/1668854.

      Users cannot change or override this setting.</translation>
<translation id="8631434304112909927">until version <ph name="UNTIL_VERSION" /></translation>
<translation id="863319402127182273">For Android apps, this policy affects the built-in camera only. When this policy is set to true, the camera is disabled for all Android apps, with no exceptions.</translation>
<translation id="8649763579836720255">Chrome OS devices can use remote attestation (Verified Access) to get a certificate issued by the Chrome OS CA that asserts that the device is eligible to play protected content. This process involves sending hardware endorsement information to the Chrome OS CA which uniquely identifies the device.

          If this setting is false, the device will not use remote attestation for content protection and the device may be unable to play protected content.

          If this setting is true, or if it is not set, remote attestation may be used for content protection.</translation>
<translation id="8650974590712548439">Windows registry location for Windows clients:</translation>
<translation id="8654286232573430130">Specifies which servers should be whitelisted for integrated authentication. Integrated authentication is only enabled when <ph name="PRODUCT_NAME" /> receives an authentication challenge from a proxy or from a server which is in this permitted list.

          Separate multiple server names with commas. Wildcards (*) are allowed.

          If you leave this policy unset <ph name="PRODUCT_NAME" /> will try to detect if a server is on the Intranet and only then will it respond to IWA requests. If a server is detected as Internet then IWA requests from it will be ignored by <ph name="PRODUCT_NAME" />.</translation>
<translation id="8672321184841719703">Target Auto-Update Version</translation>
<translation id="867410340948518937">U2F (Universal Second Factor)</translation>
<translation id="8682611302223077049">Allows you to set the time period, in milliseconds, over which users are notified that <ph name="PRODUCT_NAME" /> must be relaunched or that a <ph name="PRODUCT_OS_NAME" /> device must be restarted to apply a pending update.

      Over this time period, the user will be repeatedly informed of the need for an update. For <ph name="PRODUCT_OS_NAME" /> devices, a restart notification appears in the system tray when an upgrade is detected. For <ph name="PRODUCT_NAME" /> browsers, the app menu changes to indicate that a relaunch is needed once one third of the notification period passes. This notification changes colour once two thirds of the notification period passes, and again once the full notification period has passed. The additional notifications enabled by the <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> policy follow this same schedule.

      If not set, the default period of 345600000 milliseconds (four days) is used for <ph name="PRODUCT_OS_NAME" /> devices and 604800000 milliseconds (one week) for <ph name="PRODUCT_NAME" />.</translation>
<translation id="8685024486845674965">Password protection warning is triggered by password reuse</translation>
<translation id="8693243869659262736">Use built-in DNS client</translation>
<translation id="8703488928438047864">Report board status</translation>
<translation id="8704831857353097849">List of disabled plug-ins</translation>
<translation id="8711086062295757690">Specifies the keyword, which is the shortcut used in the omnibox to trigger the search for this provider.

          This policy is optional. If not set, no keyword will activate the search provider.

          This policy is only considered if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="8731693562790917685">Content Settings allow you to specify how contents of a specific type (for example Cookies, Images or JavaScript) is handled.</translation>
<translation id="8733448613597049197">Enables <ph name="PRODUCT_NAME" />'s Safe Browsing Extended Reporting and prevents users from changing this setting.

      Extended Reporting sends some system information and page content to Google servers to help detect dangerous apps and sites.

      If the setting is set to true, then reports will be created and sent whenever necessary (such as when a security interstitial is shown).

      If the setting is set to false, reports will never be sent.

      If this policy is set to true or false, the user will not be able to modify the setting.

      If this policy is left unset, the user will be able to change the setting and decide whether to send reports or not.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.</translation>
<translation id="8736538322216687231">Force minimum YouTube Restricted Mode</translation>
<translation id="8749370016497832113">Enables deleting browser history and download history in <ph name="PRODUCT_NAME" /> and prevents users from changing this setting.

      Note that even with this policy disabled, the browsing and download history are not guaranteed to be retained: users may be able to edit or delete the history database files directly and the browser itself may expire or archive any or all history items at any time.

      If this setting is enabled or not set, browsing and download history can be deleted.

      If this setting is disabled, browsing and download history cannot be deleted.</translation>
<translation id="8758831693895931466">Enable mandatory cloud management enrolment</translation>
<translation id="8759829385824155666">Allowed Kerberos encryption types</translation>
<translation id="8764119899999036911">Specifies whether the generated Kerberos SPN is based on the canonical DNS name or the original name entered.

          If you enable this setting, CNAME lookup will be skipped and the server name will be used as entered.

          If you disable this setting or leave it unset, the canonical name of the server will be determined via CNAME lookup.</translation>
<translation id="8765776988041674792">Configure the change password URL (HTTP and HTTPS schemes only). Password protection service will send users to this URL to change their password after seeing a warning in the browser.
      In order for <ph name="PRODUCT_NAME" /> to correctly capture the new password fingerprint on this change password page, please make sure that your change password page follows the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms.

      If this setting is enabled, then password protection service will send users to this URL to change their password after seeing a warning in the browser.
      If this setting is disabled or not set, then password protection service will send users to https://myaccounts.google.com to change their password.
      This policy is available only on Windows instances that are joined to a <ph name="MS_AD_NAME" /> domain. It also applies to Windows 10 Pro or Enterprise instances that enrolled for device management.</translation>
<translation id="8782750230688364867">Specifies the percentage by which the screen dim delay is scaled when the device is in presentation mode.

          If this policy is set, it specifies the percentage by which the screen dim delay is scaled when the device is in presentation mode. When the screen dim delay is scaled, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.

          If this policy is unset, a default scale factor is used.

          The scale factor must be 100% or more. Values that would make the screen dim delay in presentation mode shorter than the regular screen dim delay are not allowed.</translation>
<translation id="8798099450830957504">Default</translation>
<translation id="8801680448782904838">Notify a user that a browser relaunch or device restart is recommended or required</translation>
<translation id="8818173863808665831">Report the geographic location of the device.

      If the policy is not set or set to false, the location will not be reported.</translation>
<translation id="8818768076343557335">Predict network actions on any network that is not cellular.
          (Deprecated in 50, removed in 52. After 52, if value 1 is set, it will be treated as 0 – predict network actions on any network connection.)</translation>
<translation id="8825782996899863372">Password protection warning is triggered by password reuse on phishing page</translation>
<translation id="8828766846428537606">Configure the default home page in <ph name="PRODUCT_NAME" /> and prevent users from changing it.

      The user's home page settings are only completely locked down, if you either select the home page to be the new tab page, or set it to be a URL and specify a home page URL. If you don't specify the home page URL, then the user is still able to set the home page to the new tab page by specifying 'chrome://newtab'.</translation>
<translation id="8833109046074170275">Authentication via the default GAIA flow</translation>
<translation id="8838303810937202360"><ph name="PRODUCT_OS_NAME" /> caches Apps and Extensions for installation by multiple users of a single device to avoid re-downloading them for each user.
      If this policy is not configured or the value is lower than 1 MB, <ph name="PRODUCT_OS_NAME" /> will use the default cache size.</translation>
<translation id="8858642179038618439">Force YouTube Safety Mode</translation>
<translation id="8860342862142842017">Disable Certificate Transparency enforcement for a list of subjectPublicKeyInfo hashes</translation>
<translation id="8864975621965365890">Suppresses the turn-down prompt that appears when a site is rendered by <ph name="PRODUCT_FRAME_NAME" />.</translation>
<translation id="8867464911288727016">Enables the integrated Google Translate service on <ph name="PRODUCT_NAME" />.

      If you enable this setting, <ph name="PRODUCT_NAME" /> will offer translation functionality to the user by showing an integrated translate toolbar (when appropriate) and a translate option on the right-click context menu.

      If you disable this setting, all built-in translate features will be disabled.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

      If this setting is left not set the user can decide to use this function or not.</translation>
<translation id="8870318296973696995">Homepage</translation>
<translation id="8876188741456358123">Overrides default printing duplex mode. If the mode is unavailable, this policy is ignored.</translation>
<translation id="8882006618241293596">Block the <ph name="FLASH_PLUGIN_NAME" /> plug-in on these sites</translation>
<translation id="890403179930035128">Force-enables spellcheck languages. Unrecognised languages in that list will be ignored.

      If you enable this policy, spellcheck will be enabled for the languages specified, in addition to the languages for which the user has enabled spellcheck.

      If you do not set this policy, or disable it, there will be no change to the user's spellcheck preferences.

      If the SpellcheckEnabled policy is set to disabled, this policy will have no effect.

      The currently supported languages are: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.</translation>
<translation id="8906768759089290519">Enable guest mode</translation>
<translation id="8908294717014659003">Allows you to set whether websites are allowed to get access to media capture devices. Access to media capture devices can be allowed by default, or the user can be asked every time a website wants to get access to media capture devices.

          If this policy is left not set, 'PromptOnAccess' will be used and the user will be able to change it.</translation>
<translation id="8909280293285028130">Specifies the length of time without user input after which the screen is locked when running on AC power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME" /> locks the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME" /> does not lock the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The recommended way to lock the screen on idle is to enable screen locking on suspend and have <ph name="PRODUCT_OS_NAME" /> suspend after the idle delay. This policy should only be used when screen locking should occur a significant amount of time sooner than suspend or when suspend on idle is not desired at all.

          The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.</translation>
<translation id="891435090623616439">encoded as a JSON string, for details see <ph name="COMPLEX_POLICIES_URL" /></translation>
<translation id="8934944553121392674">Controls which printers from the <ph name="DEVICE_PRINTERS_POLICY" /> are available to users.

      Designates which access policy is used for bulk printer configuration. If <ph name="PRINTERS_ALLOW_ALL" /> is selected, all printers are shown. If <ph name="PRINTERS_BLACKLIST" /> is selected, <ph name="DEVICE_PRINTERS_BLACKLIST" /> is used to restrict access to the specified printers. If <ph name="PRINTERS_WHITELIST" /> is selected, <ph name="DEVICE_PRINTERS_WHITELIST" /> designates only those printers which are selectable.

      If this policy is not set, <ph name="PRINTERS_ALLOW_ALL" /> is assumed.
      </translation>
<translation id="8938932171964587769">Deprecated in M69. Use
      OverrideSecurityRestrictionsOnInsecureOrigin instead.

      The policy specifies a list of origins (URLs) or hostname patterns (such
      as '*.example.com') for which security restrictions on insecure origins
      will not apply.

      The intent is to allow organisations to whitelist origins for legacy
      applications that cannot deploy TLS, or to set up a staging server for
      internal web development so that their developers can test out features
      requiring secure contexts without having to deploy TLS on the staging
      server. This policy will also prevent the origin from being labelled
      'Not Secure' in the omnibox.

      Setting a list of URLs in this policy has the same effect as setting the
      command-line flag '--unsafely-treat-insecure-origin-as-secure' to a
      comma-separated list of the same URLs. If the policy is set, it will
      override the command-line flag.

      This policy is deprecated in M69 in favour of
      OverrideSecurityRestrictionsOnInsecureOrigin. If both policies are
      present, OverrideSecurityRestrictionsOnInsecureOrigin will override this
      policy.

      For more information on secure contexts, see
      https://www.w3.org/TR/secure-contexts/
      </translation>
<translation id="8942616385591203339">This policy controls if Sync Consent can be shown to the user during first sign-in. It should be set to false if Sync Consent is never needed for the user.
      If set to false, Sync Consent will not be displayed.
      If set to true or unset, Sync Consent can be displayed.</translation>
<translation id="8947415621777543415">Report device location</translation>
<translation id="8951350807133946005">Set disk cache directory</translation>
<translation id="8952317565138994125">Disables data synchronisation in <ph name="PRODUCT_NAME" /> using Google-hosted synchronisation services and prevents users from changing this setting.

      If you enable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME" />.

      If this policy is left not set, Google Sync will be available for the user to choose whether to use it or not.

      To fully disable Google Sync, it is recommended that you disable the Google Sync service in the Google Admin console.

      This policy should not be enabled when <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> policy is set to enabled as that feature shares the same client-side functionality. The Google-hosted synchronisation is disabled in this case completely.</translation>
<translation id="8955719471735800169">Back to top</translation>
<translation id="8959992920425111821">Default configuration</translation>
<translation id="8960850473856121830">Patterns in this list will be matched against the security
      origin of the requesting URL. If a match is found, access to audio
      capture devices will be granted without prompt.

      NOTE: Until version 45, this policy was only supported in Kiosk mode.</translation>
<translation id="8970205333161758602">Suppress the <ph name="PRODUCT_FRAME_NAME" /> turn-down prompt</translation>
<translation id="8976248126101463034">Allow gnubby authentication for remote access hosts</translation>
<translation id="8976531594979650914">Use System Default Printer as Default</translation>
<translation id="8992176907758534924">Do not allow any site to show images</translation>
<translation id="9035964157729712237">Extension IDs to exempt from the blacklist</translation>
<translation id="9042911395677044526">Allows pushing network configuration to be applied per-user to a <ph name="PRODUCT_OS_NAME" /> device. The network configuration is a JSON-formatted string as defined by the Open Network Configuration format described at <ph name="ONC_SPEC_URL" /></translation>
<translation id="906631898352326790">
      If the policy is enabled, each of the named origins in a
      comma-separated list will run in its own process. This will also isolate
      origins named by subdomains; e.g. specifying https://example.com/ will
      also cause https://foo.example.com/ to be isolated as part of the
      https://example.com/ site.
      If the policy is disabled, then both IsolateOrigins and SitePerProcess features will be disabled. Users will still be able to enable IsolateOrigins manually, via command line flags.
      If the policy is not configured, the user will be able to change this setting.
      On <ph name="PRODUCT_OS_NAME" />, it is recommended to also set the <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> device policy to the same value. If the values specified by the two policies don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.

      NOTE: This policy does not apply on Android. To enable IsolateOrigins on Android, use the IsolateOriginsAndroid policy setting.
      </translation>
<translation id="9077227880520270584">Device-local account auto-login timer</translation>
<translation id="9084985621503260744">Specify whether video activity affects power management</translation>
<translation id="9088433379343318874">Enable the supervised user content provider</translation>
<translation id="9088444059179765143">Configure the automatic timezone detection method</translation>
<translation id="9094064873808699479">Roll back and stay on target version if OS version is newer than target. Try to carry over device-level configuration (including network credentials) through the rollback process, if possible, but do the rollback with full powerwash even if restoring the data is not possible (because the target version doesn't support restoring data or because of a backward-incompatible change).
          Supported on <ph name="PRODUCT_OS_NAME" /> version 70 and higher. For older clients, this value means that rollback is disabled.</translation>
<translation id="9096086085182305205">Authentication server whitelist</translation>
<translation id="9098553063150791878">Policies for HTTP authentication</translation>
<translation id="9105265795073104888">Only a subset of proxy configuration options are made available to Android apps. Android apps may voluntarily choose to use the proxy. You cannot force them to use a proxy.</translation>
<translation id="9106865192244721694">Allow WebUSB on these sites</translation>
<translation id="9112727953998243860">Enterprise printer configuration file</translation>
<translation id="9112897538922695510">Allows you to register a list of protocol handlers. This can only be a recommended policy. The property |protocol| should be set to the scheme such as 'mailto' and the property |url| should be set to the URL pattern of the application that handles the scheme. The pattern can include a '%s', which if present will be replaced by the handled URL.

          The protocol handlers registered by policy are merged with the ones registered by the user and both are available for use. The user can override the protocol handlers installed by policy by installing a new default handler, but cannot remove a protocol handler registered by policy.</translation>
<translation id="9123211093995421438">Specifies the minimum number of <ph name="PRODUCT_OS_NAME" /> milestones roll back should be allowed starting from the stable version at any time.

      Default is zero for consumer, four (approx. half a year) for enterprise-enrolled devices.

      Setting this policy prevents roll back protection to apply for at least this number of milestones.

      Setting this policy to a lower value has a permanent effect: the device MAY not be able to roll back to earlier versions even after the policy is reset to a larger value.

      Actual roll back possibilities may also depend on the board and critical vulnerability patches.</translation>
<translation id="913195841488580904">Block access to a list of URLs</translation>
<translation id="9135033364005346124">Enable <ph name="CLOUD_PRINT_NAME" /> proxy</translation>
<translation id="9136399279941091445">Off hours intervals when the specified device policies are released</translation>
<translation id="9147029539363974059">Send system logs to the management server, to allow
      admins to monitor system logs.

      If this policy is set to true, system logs will be sent. If set
      to false or unset, then no system logs will be sent.</translation>
<translation id="9150416707757015439">This policy is deprecated. Please, use IncognitoModeAvailability instead.
      Enables Incognito mode in <ph name="PRODUCT_NAME" />.

      If this setting is enabled or not configured, users can open web pages in incognito mode.

      If this setting is disabled, users cannot open web pages in incognito mode.

      If this policy is left unset, this will be enabled and the user will be able to use incognito mode.</translation>
<translation id="915194831143859291">If this policy is set to false or not configured, <ph name="PRODUCT_OS_NAME" /> will allow the user to shut down the device.
      If this policy is set to true, <ph name="PRODUCT_OS_NAME" /> will trigger a reboot when the user shuts down the device. <ph name="PRODUCT_OS_NAME" /> replaces all occurrences of shutdown buttons in the UI by reboot buttons. If the user shuts down the device using the power button, it will not automatically reboot, even if the policy is enabled.</translation>
<translation id="9152473318295429890">Enable contextual suggestions of related web pages</translation>
<translation id="9158929520101169054">Allow Multiple Sign-in Within the Browser</translation>
<translation id="9159126470527871268">Notify users that <ph name="PRODUCT_NAME" /> must be relaunched or <ph name="PRODUCT_OS_NAME" /> must be restarted to apply a pending update.

      This policy setting enables notifications to inform the user that a browser relaunch or device restart is recommended or required. If not set, <ph name="PRODUCT_NAME" /> indicates to the user that a relaunch is needed via subtle changes to its menu, while <ph name="PRODUCT_OS_NAME" /> indicates such via a notification in the system tray. If set to 'Recommended', a recurring warning will be shown to the user that a relaunch is recommended. The user can dismiss this warning to defer the relaunch. If set to 'Required', a recurring warning will be shown to the user indicating that a browser relaunch will be forced once the notification period passes. The default period is seven days for <ph name="PRODUCT_NAME" /> and four days for <ph name="PRODUCT_OS_NAME" />, and may be configured via the <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME" /> policy setting.

      The user's session is restored following the relaunch/restart.</translation>
<translation id="9165792353046089850">Allows you to set whether websites are allowed to get access to connected USB devices. Access can be completely blocked, or the user can be asked every time a website wants to get access to connected USB devices.

          This policy can be overridden for specific URL patterns using the 'WebUsbAskForUrls' and 'WebUsbBlockedForUrls' policies.

          If this policy is left not set, '3' will be used, and the user will be able to change it.</translation>
<translation id="9167719789236691545">Disable Drive in the <ph name="PRODUCT_OS_NAME" /> Files app</translation>
<translation id="9187743794267626640">Disable mounting of external storage</translation>
<translation id="9197740283131855199">Percentage by which to scale the screen dim delay if the user becomes active after dimming</translation>
<translation id="9200828125069750521">Parameters for image URL which uses POST</translation>
<translation id="920209539000507585">Force 'headers and footers' to be on or off in the printing dialogue.

      If the policy is unset, the user can decide whether to print headers and footers.

      If the policy is set to false, 'Headers and footers' is not selected in the print preview dialogue and the user cannot change it.

      If the policy is set to true, 'Headers and footers' is selected in the print preview dialogue and the user cannot change it.</translation>
<translation id="9210953373038593554">Configures the type of authentication for SAML logins.

      When this policy is unset or set to Default (value 0), the behaviour of SAML logins is determined by the browser depending on other factors. In the most basic scenario, the user authentication and the protection of the cached user data are based on passwords manually entered by users.

      When this policy is set to ClientCertificate (value 1), client certificate authentication is used for newly added users which log in via SAML. No passwords are used for such users, and their cached local data is protected using corresponding cryptographic keys. For instance, this setting allows configuring smart card-based user authentication (note that smart card middleware apps have to be installed via the DeviceLoginScreenAppInstallList policy).

      This policy only affects users who authenticate using SAML.</translation>
<translation id="9213347477683611358">Configure device-level wallpaper image that is shown on the login screen if no user has yet signed in to the device. The policy is set by specifying the URL from which the Chrome OS device can download the wallpaper image and a cryptographic hash used to verify the integrity of the download. The image must be in JPEG format, its file size must not exceed 16 MB. The URL must be accessible without any authentication. The wallpaper image is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      The policy should be specified as a string that expresses the URL and hash in JSON format, e.g.,
      {
        "url": "https://example.com/device_wallpaper.jpg",
        "hash": "examplewallpaperhash"
      }

      If the device wallpaper policy is set, the Chrome OS device will download and use the wallpaper image on the login screen if no user has yet signed in to the device. Once the user logs in, the user's wallpaper policy kicks in.

      If the device wallpaper policy is left not set, it's the user's wallpaper policy to decide what to show if the user's wallpaper policy is set.</translation>
<translation id="9217154963008402249">Frequency of monitoring network packets</translation>
<translation id="922540222991413931">Configure extension, app, and user script install sources</translation>
<translation id="924557436754151212">Import saved passwords from default browser on first run</translation>
<translation id="930930237275114205">Set <ph name="PRODUCT_FRAME_NAME" /> user data directory</translation>
<translation id="944817693306670849">Set disk cache size</translation>
<translation id="981346395360763138">Google Location services disabled</translation>
<translation id="982497069985795632">Enable spellcheck</translation>
<translation id="991560005425213776">Send username and filename to native printers</translation>
</translationbundle>