<?xml version="1.0" ?>
<!DOCTYPE translationbundle>
<translationbundle lang="en-GB">
<translation id="1503959756075098984">Extension IDs and update URLs to be silently installed</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="2463365186486772703">Application locale</translation>
<translation id="1397855852561539316">Default search provider suggest URL</translation>
<translation id="3347897589415241400">The default behaviour for sites not in any content pack.

          This policy is for internal use by Chrome itself.</translation>
<translation id="7040229947030068419">Sample value</translation>
<translation id="1213523811751486361">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 that the user has entered so far.

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

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="6106630674659980926">Enable the password manager</translation>
<translation id="7109916642577279530">Allow or deny audio capture.

      If enabled or not configured (default), the user will be prompted for
      audio capture access except for URLs configured in the
      AudioCaptureAllowedUrls list which will be granted access without prompting.

      When this policy is disabled, the user will never be prompted and audio
      capture will only be available to URLs configured in AudioCaptureAllowedUrls.

      This policy affects all types of audio inputs and not only the built-in microphone.</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="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="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="7818131573217430250">Set the default state of high contrast mode on the login screen</translation>
<translation id="7614663184588396421">List of disabled protocol schemes</translation>
<translation id="2309390639296060546">Default geolocation setting</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="7443616896860707393">Cross-origin HTTP Basic Auth prompts</translation>
<translation id="2337466621458842053">Allows you to set a list of url patterns that specify sites which are allowed to display images.

          If this policy is left unset, the global default value will be used for all sites either from the 'DefaultImagesSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="4680961954980851756">Enable AutoFill</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="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="3185009703220253572">since version <ph name="SINCE_VERSION"/></translation>
<translation id="2204753382813641270">Control shelf auto-hiding</translation>
<translation id="3816312845600780067">Enable bailout keyboard shortcut for auto-login</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="5330684698007383292">Allow <ph name="PRODUCT_FRAME_NAME"/> to handle the following content types</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="69525503251220566">Parameter providing search-by-image feature for the default search provider</translation>
<translation id="5469825884154817306">Block images on these sites</translation>
<translation id="5827231192798670332">Selects the strategy used to free up disk space during automatic clean-up</translation>
<translation id="8412312801707973447">Whether online OCSP/CRL checks are performed</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="3213821784736959823">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 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="2908277604670530363">Maximum number of concurrent connections to the proxy server</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="4838572175671839397">Contains a regular expression which is used to determine which users can sign in to <ph name="PRODUCT_NAME"/>.

      An appropriate error is displayed if a user tries to log in with a username that does not match this pattern.

      If this policy is left not set or blank, then any user can sign in to <ph name="PRODUCT_NAME"/>.</translation>
<translation id="2892225385726009373">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 Chrome will use the existing online revocation checking settings.</translation>
<translation id="1438955478865681012">Configures extension-related policies. The user is not allowed to install blacklisted extensions unless they are whitelisted. You can also force <ph name="PRODUCT_NAME"/> to automatically install extensions by specifying them in <ph name="EXTENSIONINSTALLFORCELIST_POLICY_NAME"/>. The blacklist takes precedence over the list of forced extensions.</translation>
<translation id="3516856976222674451">Limit the maximum length of a user session.

      When this policy is set, it specifies the length of time after which a user is automatically logged out, terminating the session. The user is informed about the remaining time by a countdown timer shown in the system tray.

      When this policy is not set, the session length is not limited.

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

      The policy value should be specified in milliseconds. Values are clamped to a range of 30 seconds to 24 hours.</translation>
<translation id="9200828125069750521">Parameters for image URL which uses POST</translation>
<translation id="2769952903507981510">Configure the required domain name for remote access hosts</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="3478024346823118645">Wipe user data on sign-out</translation>
<translation id="8668394701842594241">Specifies a list of plug-ins that are enabled in <ph name="PRODUCT_NAME"/> and prevents users from changing this setting.

      The wild card characters '*' and '?' can be used to match sequences of arbitrary characters. '*' matches an arbitrary number of characters while '?' specifies an optional single character, i.e. matches zero or one characters. The escape character is '\', so to match actual '*', '?' or '\' characters, you can put a '\' in front of them.

      The specified list of plug-ins is always used in <ph name="PRODUCT_NAME"/> if they are installed. The plug-ins are marked as enabled in 'about:plug-ins' and users cannot disable them.

      Note that this policy overrides both DisabledPlug-ins and DisabledPlug-insExceptions.

      If this policy is left unset, the user can disable any plug-in installed on the system.</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="4157003184375321727">Report OS and firmware version</translation>
<translation id="4752214355598028025">The Safe Browsing service shows a warning page when users navigate to sites that are flagged as potentially mallicious. 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.</translation>
<translation id="5255162913209987122">Can be Recommended</translation>
<translation id="1861037019115362154">Specifies a list of plugins that are disabled in <ph name="PRODUCT_NAME"/> and prevents users from changing this setting.

      The wildcard characters '*' and '?' can be used to match sequences of arbitrary characters. '*' matches an arbitrary number of characters while '?' specifies an optional single character, i.e. matches zero or one characters. The escape character is '\', so to match actual '*', '?', or '\' characters, you can put a '\' in front of them.

      If you enable this setting, the specified list of plugins is never used in <ph name="PRODUCT_NAME"/>. The plugins are marked as disabled in 'about:plugins' and users cannot enable them.

      Note that this policy can be overridden by EnabledPlugins and DisabledPluginsExceptions.

      If this policy is left not set the user can use any plugin installed on the system except for hard-coded incompatible, outdated or dangerous plugins.</translation>
<translation id="9197740283131855199">Percentage by which to scale the screen dim delay if the user becomes active after dimming</translation>
<translation id="1492145937778428165">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 1800000 (30 minutes) to 86400000 (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.</translation>
<translation id="3765260570442823273">Duration of the idle log-out warning message</translation>
<translation id="7302043767260300182">Screen lock delay when running on AC power</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="7271085005502526897">Import of homepage from default browser on first run</translation>
<translation id="6036523166753287175">Enable firewall traversal from remote access host</translation>
<translation id="1096105751829466145">Default search provider</translation>
<translation id="7567380065339179813">Allow plug-ins on these sites</translation>
<translation id="4555850956567117258">Enable remote attestation for the user</translation>
<translation id="5966615072639944554">Extensions allowed to to use the remote attestation API</translation>
<translation id="1617235075406854669">Enable deleting browser and download history</translation>
<translation id="5290940294294002042">Specify a list of plug-ins that the user can enable or disable</translation>
<translation id="3153348162326497318">Allows you to specify which extensions the users CANNOT install. Extensions already installed will be removed if blacklisted.

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

          If this policy is left unset, the user can install any extension in <ph name="PRODUCT_NAME"/>.</translation>
<translation id="3067188277482006117">If true, the user can use the hardware on Chrome devices to remote attest its identity to the privacy CA via the Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey().

          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="5809728392451418079">Set the display name for device-local accounts</translation>
<translation id="1427655258943162134">Address or URL of proxy server</translation>
<translation id="1827523283178827583">Use fixed proxy servers</translation>
<translation id="3021409116652377124">Disable plug-in finder</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 &quot;None&quot; 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="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="3288595667065905535">Release channel</translation>
<translation id="2785954641789149745">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 &quot;Enable phishing and malware protection&quot; 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="268577405881275241">Enable the data compression proxy feature</translation>
<translation id="8369602308428138533">Screen off delay when running on AC power</translation>
<translation id="6513756852541213407">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 fixed server proxy mode, you can specify further options in 'Address or URL of proxy server' and 'Comma-separated list of proxy bypass rules'.

          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"/> 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="7763311235717725977">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 unset, 'AllowImages' will be used and the user will be able to change it.</translation>
<translation id="5630352020869108293">Restore the last session</translation>
<translation id="2067011586099792101">Block access to sites outside of content packs</translation>
<translation id="4980635395568992380">Data Types</translation>
<translation id="3096595567015595053">List of enabled plug-ins</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="5912364507361265851">Allow users to show passwords in Password Manager</translation>
<translation id="510186355068252378">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 unset, Google Sync will be available for the user to choose whether to use it or not.</translation>
<translation id="7953256619080733119">Managed user manual exception hosts</translation>
<translation id="7412982067535265896">Allows you to set a list of url patterns that specify sites which are allowed to set session-only 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 the user's personal configuration otherwise.

          If the 'RestoreOnStartup' policy is set to restore URLs from previous sessions, this policy will not be respectred and cookies will be stored permanently for those sites.</translation>
<translation id="4807950475297505572">Least recently used users are removed until there is enough free space</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="2231817271680715693">Import browsing history from default browser on first run</translation>
<translation id="1353966721814789986">Startup pages:</translation>
<translation id="7173856672248996428">Ephemeral profile</translation>
<translation id="1841130111523795147">Allows the user to sign in to <ph name="PRODUCT_NAME"/> and prevents users from changing this setting.

      If you set this policy, you can configure if a user is allowed to sign in to <ph name="PRODUCT_NAME"/> or not.</translation>
<translation id="5564962323737505851">Configures the password manager. If the password manager is enabled, then you can choose to enable or disable whether the user may show stored passwords in clear text.</translation>
<translation id="4668325077104657568">Default images setting</translation>
<translation id="4492287494009043413">Disable taking screenshots</translation>
<translation id="6368403635025849609">Allow JavaScript on these sites</translation>
<translation id="6074963268421707432">Do not allow any site to show desktop notifications</translation>
<translation id="8614804915612153606">Disables Auto Update</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="382476126209906314">Configure the TalkGadget prefix for remote access hosts</translation>
<translation id="6561396069801924653">Show accessibility options in system tray menu</translation>
<translation id="8104962233214241919">Automatically select client certificates for these sites</translation>
<translation id="2906874737073861391">List of AppPack extensions</translation>
<translation id="3758249152301468420">Disable Developer Tools</translation>
<translation id="8665076741187546529">Configure the list of force-installed extensions</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="1675391920437889033">Controls which app/extension types are allowed to be installed.

          This setting white-lists the allowed types of extension/apps that can be installed in <ph name="PRODUCT_NAME"/>. The value is a list of strings, each of which should be one of the following: &quot;extension&quot;, &quot;theme&quot;, &quot;user_script&quot;, &quot;hosted_app&quot;, &quot;legacy_packaged_app&quot;, &quot;platform_app&quot;. See the Chrome 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 settings is left not-configured, no restrictions on the acceptable extension/app types are enforced.</translation>
<translation id="6378076389057087301">Specify whether audio activity affects power management</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="4899708173828500852">Enable Safe Browsing</translation>
<translation id="4442582539341804154">Enable lock when the device become idle or suspended</translation>
<translation id="7719251660743813569">Controls whether usage metrics are reported back to Google. If set to true, <ph name="PRODUCT_OS_NAME"/> will report usage metrics. If not configured or set to false, metrics reporting will be disabled.</translation>
<translation id="2372547058085956601">The public session 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 public session 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="7275334191706090484">Managed Bookmarks</translation>
<translation id="3570008976476035109">Block plug-ins on these sites</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="2884728160143956392">Allow session only cookies on these sites</translation>
<translation id="3021272743506189340">Disables Google Drive syncing in the Chrome OS Files app when using a cellular connection when set to True. In that case, data is only synced to Google Drive when connected via WiFi or Ethernet.

          If not set or set to False, then users will be able to transfer files to Google Drive via cellular connections.</translation>
<translation id="4655130238810647237">Enables or disables editing bookmarks in <ph name="PRODUCT_NAME"/>.

      If you enable this setting, bookmarks can be added, removed or modified. This is the default also when this policy is not set.

      If you disable this setting, bookmarks cannot be added, removed or modified. Existing bookmarks are still available.</translation>
<translation id="3496296378755072552">Password manager</translation>
<translation id="4372704773119750918">Do not allow enterprise user to be part of multiprofile (primary or secondary)</translation>
<translation id="2565967352111237512">Enables anonymous reporting of usage and crash-related data about <ph name="PRODUCT_NAME"/> to Google and prevents users from changing this setting.

      If you enable this setting, anonymous reporting of usage and crash-related data is sent to Google.

      If you disable this setting, anonymous reporting of usage and crash-related data is never sent to Google.

      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 the setting will be what the user chose upon installation / first run.</translation>
<translation id="4784220343847172494">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="6256787297633808491">System wide flags to be applied on Chrome start-up</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="9135033364005346124">Enable <ph name="CLOUD_PRINT_NAME"/> proxy</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="6943577887654905793">Mac/Linux preference name:</translation>
<translation id="6925212669267783763">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 http://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="8906768759089290519">Enable guest mode</translation>
<translation id="2168397434410358693">Idle delay when running on AC power</translation>
<translation id="838870586332499308">Enable data roaming</translation>
<translation id="3234167886857176179">This is the list of policies that <ph name="PRODUCT_NAME"/> respects.

      You don't need to change these settings by hand!  You can download easy-to-use templates from
      <ph name="POLICY_TEMPLATE_DOWNLOAD_URL"/>.

      The list of supported policies is the same for Chromium and Google Chrome.

      These policies are strictly intended to be used to configure instances of Chrome internal to your organisation. Use of these policies outside of your organisation (for example, in a publicly distributed programme) is considered malware and is likely to be labelled as malware by Google and anti-virus vendors.

      Note: starting with Chrome 28, policies are loaded directly from the Group Policy API on Windows. Policies manually written to the registry will be ignored. See http://crbug.com/259236 for details.</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="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="254524874071906077">Set Chrome as Default Browser</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="5056708224511062314">Screen magnifier disabled</translation>
<translation id="4377599627073874279">Allow all sites to show all images</translation>
<translation id="7195064223823777550">Specify the action to take when the user closes the lid.

          When this policy is set, it specifies the action that <ph name="PRODUCT_OS_NAME"/> takes when the user closes the device's lid.

          When this policy is unset, the default action is taken, which is suspend.

          If the action is suspend, <ph name="PRODUCT_OS_NAME"/> can separately be configured to either lock or not lock the screen before suspending.</translation>
<translation id="3915395663995367577">URL to a proxy .pac file</translation>
<translation id="2144674628322086778">Allow enterprise user to be both primary and secondary  (Default behaviour)</translation>
<translation id="1022361784792428773">Extension IDs the user should be prevented from installing (or * for all)</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="7683777542468165012">Dynamic Policy Refresh</translation>
<translation id="1160939557934457296">Disable proceeding from the Safe Browsing warning page</translation>
<translation id="8987262643142408725">Disable SSL record splitting</translation>
<translation id="4529945827292143461">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 http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
<translation id="8044493735196713914">Report device boot mode</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="1942957375738056236">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 unset 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="6076008833763548615">Disable mounting of external storage.

      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="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="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="4894257424747841850">Report list of device users that have recently logged in.

      If the policy is not set, or set to false, the users will not be reported.</translation>
<translation id="1426410128494586442">Yes</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="4962195944157514011">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.

          This option must be set when the 'DefaultSearchProviderEnabled' policy is enabled and will only be respected if this is the case.</translation>
<translation id="6009903244351574348">Allow <ph name="PRODUCT_FRAME_NAME"/> to handle the listed content types.

          If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy.</translation>
<translation id="3381968327636295719">Use the host browser by default</translation>
<translation id="3627678165642179114">Enable or disable spell checking web service</translation>
<translation id="6520802717075138474">Import search engines from default browser on first run</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="4946368175977216944">Specifies the flags that should be applied to Chrome when it starts. The specified flags are applied before Chrome is started even for the sign-in screen.</translation>
<translation id="7447786363267535722">Enables saving passwords and using saved passwords in <ph name="PRODUCT_NAME"/>.

          If you enable this setting, users can have <ph name="PRODUCT_NAME"/> memorise passwords and provide them automatically the next time that they log in to a site.

          If you disable this setting, users are not able to save passwords or use already saved passwords.

          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="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="6368011194414932347">Configure the home page URL</translation>
<translation id="2877225735001246144">Disable CNAME lookup when negotiating Kerberos authentication</translation>
<translation id="9120299024216374976">Specifies the timezone to be used for the device. Users can override the specified timezone for the current session. However, on logout it is set back to the specified timezone. If an invalid value is provided, the policy is still activated using &quot;GMT&quot; instead. If an empty string is provided, the policy is ignored.

      If this policy is not used, the currently active timezone will remain in use however users can change the timezone and the change is persistent. Thus a change by one user affects the login-screen and all other users.

      New devices start out with the timezone set to &quot;US/Pacific&quot;.

      The format of the value follows the names of timezones in the &quot;IANA Time Zone Database&quot; (see &quot;http://en.wikipedia.org/wiki/List_of_tz_database_time&quot;). In particular, most timezones can be referred to by &quot;continent/large_city&quot; or &quot;ocean/large_city&quot;.</translation>
<translation id="3646859102161347133">Set screen magnifier type</translation>
<translation id="3528000905991875314">Enable alternate error pages</translation>
<translation id="1283072268083088623">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="4914647484900375533">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 not set the user can decide to use this function or not.

      This setting has been removed from Chrome 29 and higher versions.</translation>
<translation id="6114416803310251055">deprecated</translation>
<translation id="8493645415242333585">Disable saving browser history</translation>
<translation id="5319306267766543020">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="2747783890942882652">Configures the required host domain name that will be imposed on remote access hosts and prevents users from changing it.

          If this setting is enabled, then hosts can be shared only using accounts registered on the specified domain name.

          If this setting is disabled or not set, then hosts can be shared using any account.</translation>
<translation id="6417861582779909667">Allows you to set a list of url patterns that specify sites which are not allowed to set cookies.

          If this policy is left unset, the global default value will be used for all sites, either from the 'DefaultCookiesSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="5457296720557564923">Allows pages to access JavaScript memory usage statistics.

      This settings makes the memory statistics from the Developer Tools Profiles panel available to the web page itself.</translation>
<translation id="5776485039795852974">Ask every time a site wants to show desktop notifications</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="6786747875388722282">Extensions</translation>
<translation id="7132877481099023201">URLs that will be granted access to video capture devices without prompt</translation>
<translation id="8947415621777543415">Report device location</translation>
<translation id="1655229863189977773">Set disk cache size in bytes</translation>
<translation id="6376842084200599664">Allows you to specify a list of extensions that will be installed silently, without user interaction.

          Each item of the list is a string that contains an extension ID and an update URL delimited by a semicolon (<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 should point to an Update Manifest XML document as described at <ph name="LINK_TO_EXTENSION_DOC1"/>. Note that the update URL set in this policy is only used for the initial installation; subsequent updates of the extension will use the update URL indicated in the extension's manifest.

          For each item, <ph name="PRODUCT_NAME"/> will retrieve the extension specified by the extension ID from the update service at the specified update URL and silently install it.

          For example, <ph name="EXTENSION_POLICY_EXAMPLE"/> installs the <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME"/> extension from the standard Chrome Web Store update URL. For more information about hosting extensions, see: <ph name="LINK_TO_EXTENSION_DOC2"/>.

          Users will be unable to uninstall extensions that are specified by this policy. If you remove an extension from this list, then it will be automatically uninstalled by <ph name="PRODUCT_NAME"/>. Extensions specified in this list are also automatically whitelisted for installation; the ExtensionsInstallBlacklist does not affect them.

          If this policy is left not set the user can uninstall any extension  in <ph name="PRODUCT_NAME"/>.</translation>
<translation id="6899705656741990703">Auto detect proxy settings</translation>
<translation id="8382184662529825177">Enable the use of remote attestation for content protection for the device</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="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="3236046242843493070">URL patterns to allow extension, app, and user script installs from</translation>
<translation id="2498238926436517902">Always auto-hide the shelf</translation>
<translation id="253135976343875019">Idle warning delay when running on AC power</translation>
<translation id="480987484799365700">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 his sync profile just like 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="6997592395211691850">Whether online OCSP/CRL checks are required for local trust anchors</translation>
<translation id="152657506688053119">List of alternative URLs for the default search provider</translation>
<translation id="8992176907758534924">Do not allow any site to show images</translation>
<translation id="262740370354162807">Enable submission of documents to <ph name="CLOUD_PRINT_NAME"/></translation>
<translation id="7717938661004793600">Configure <ph name="PRODUCT_OS_NAME"/> accessibility features.</translation>
<translation id="5182055907976889880">Configure Google Drive in <ph name="PRODUCT_OS_NAME"/>.</translation>
<translation id="8704831857353097849">List of disabled plug-ins</translation>
<translation id="8391419598427733574">Report OS and firmware version of enrolled devices.

      If this setting is set to True, enrolled devices will report the OS and firmware version periodically. If this setting is not set or set to False, version info will not be reported.</translation>
<translation id="467449052039111439">Open a list of URLs</translation>
<translation id="5883015257301027298">Default cookies setting</translation>
<translation id="5017500084427291117">Blocks access to the listed URLs.

      This policy prevents the user from loading web pages from blacklisted URLs.

      A URL has the format 'scheme://host:port/path'.
      The optional scheme can be http, https or ftp. Only this scheme will be blocked; if none is specified, all schemes are blocked.
      The host can be a hostname or an IP address. Subdomains of a hostname will also be blocked. To prevent blocking subdomains, include a '.' before the hostname. The special hostname '*' will block all domains.
      The optional port is a valid port number from 1 to 65535. If none is specified, all ports are blocked.
      If the optional path is specified, only paths with that prefix will be blocked.

      Exceptions can be defined in the URL whitelist policy. These policies are limited to 1000 entries; subsequent entries will be ignored.

      If this policy is not set no URL will be blacklisted in the browser.</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="8955719471735800169">Back to top</translation>
<translation id="2534584045044686957">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 whether the user has specified the '--media-cache-size' flag or not.

      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="3723474915949495925">Specifies a list of plugins that user can enable or disable in <ph name="PRODUCT_NAME"/>.

      The wildcard characters '*' and '?' can be used to match sequences of arbitrary characters. '*' matches an arbitrary number of characters while '?' specifies an optional single character, i.e. matches zero or one characters. The escape character is '\', so to match actual '*', '?', or '\' characters, you can put a '\' in front of them.

      If you enable this setting, the specified list of plugins can be used in <ph name="PRODUCT_NAME"/>. Users can enable or disable them in 'about:plugins', even if the plugin also matches a pattern in DisabledPlugins. Users can also enable and disable plugins that don't match any patterns in DisabledPlugins, DisabledPluginsExceptions and EnabledPlugins.

      This policy is meant to allow for strict plugin blacklisting where the 'DisabledPlugins' list contains wildcarded entries like disable all plugins '*' or disable all Java plugins '*Java*' but the administrator wishes to enable some particular version like 'IcedTea Java 2.3'. This particular versions can be specified in this policy.

      If this policy is left not set any plugin that matches the patterns in the 'DisabledPlugins' will be locked disabled and the user won't be able to enable them.</translation>
<translation id="4557134566541205630">Default search provider new tab page URL</translation>
<translation id="546726650689747237">Screen dim delay when running on AC power</translation>
<translation id="4988291787868618635">Action to take when the idle delay is reached</translation>
<translation id="7260277299188117560">Auto update p2p enabled</translation>
<translation id="5316405756476735914">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 left unset, 'AllowCookies' will be used and the user will be able to change it.</translation>
<translation id="4250680216510889253">No</translation>
<translation id="1522425503138261032">Allow sites to track the users' physical location</translation>
<translation id="6467433935902485842">Allows you to set a list of url patterns that specify sites which are not allowed to run plug-ins.

          If this policy is left unset the global default value will be used for all sites either from the 'DefaultPlug-insSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="4423597592074154136">Manually specify proxy settings</translation>
<translation id="209586405398070749">Stable channel</translation>
<translation id="8170878842291747619">Enables the integrated Google Translate service on <ph name="PRODUCT_NAME"/>.

      If you enable this setting, <ph name="PRODUCT_NAME"/> will show an integrated toolbar offering to translate the page for the user, when appropriate.

      If you disable this setting, users will never see the translation bar.

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

      If this setting is left unset the user can decide to use this function or not.</translation>
<translation id="9035964157729712237">Extension IDs to exempt from the blacklist</translation>
<translation id="8244525275280476362">Maximum fetch delay after a policy invalidation</translation>
<translation id="8587229956764455752">Allow creation of new user accounts</translation>
<translation id="7417972229667085380">Percentage by which to scale the idle delay in presentation mode (deprecated)</translation>
<translation id="3964909636571393861">Allows access to a list of URLs</translation>
<translation id="3450318623141983471">Report the state of the device's dev switch at boot.

      If the policy is not set, or set to false, the state of the dev switch will not be reported.</translation>
<translation id="1811270320106005269">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 he wants to be asked for password to unlock the device or not.</translation>
<translation id="6022948604095165524">Action on start-up</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="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="1679420586049708690">Public session for auto-login</translation>
<translation id="7625444193696794922">Specifies the release channel that this device should be locked to.</translation>
<translation id="2552966063069741410">Timezone</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="2529700525201305165">Restrict which users are allowed to sign in to <ph name="PRODUCT_NAME"/></translation>
<translation id="8971221018777092728">Public session auto-login timer</translation>
<translation id="8285435910062771358">Full-screen magnifier enabled</translation>
<translation id="5141670636904227950">Set the default screen magnifier type enabled on the login screen</translation>
<translation id="3864818549971490907"> setting</translation>
<translation id="7151201297958662315">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 to remain active. 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="4320376026953250541">Microsoft Windows XP SP2 or later</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="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="6394350458541421998">This policy has been retired as of <ph name="PRODUCT_OS_NAME"/> version 29. Please use the PresentationScreenDimDelayScale policy instead.</translation>
<translation id="5770738360657678870">Dev channel (may be unstable)</translation>
<translation id="2959898425599642200">Proxy bypass rules</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="1098794473340446990">Report device activity times.

      If this setting is set to True, enrolled devices will report time periods when a user is active on the device. If this setting is not set or set to False, device activity times will not be recorded or reported.</translation>
<translation id="7937766917976512374">Allow or deny video capture</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="8818646462962777576">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: This policy is currently only supported when running in Kiosk mode.</translation>
<translation id="489803897780524242">Parameter controlling search term placement for the default search provider</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="6401669939808766804">Log the user out</translation>
<translation id="4826326557828204741">Action to take when the idle delay is reached while running on battery power</translation>
<translation id="7912255076272890813">Configure allowed app/extension types</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="4163644371169597382">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, users will not be able to redeem offers.</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="6177482277304066047">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, there is no effect (i.e. no downgrades are performed) and the device will remain on the current version. The prefix format works component-wise as is demonstrated in the following example:

      &quot;&quot; (or not configured): update to latest version available.
      &quot;1412.&quot;: update to any minor version of 1412 (e.g. 1412.24.34 or 1412.60.2)
      &quot;1412.2.&quot;: update to any minor version of 1412.2 (e.g. 1412.2.34 or 1412.2.2)
      &quot;1412.24.34&quot;: update to this specific version only</translation>
<translation id="8102913158860568230">Default mediastream setting</translation>
<translation id="6641981670621198190">Disable support for 3D graphics APIs</translation>
<translation id="7929480864713075819">Enable reporting memory info (JS heap size) to page</translation>
<translation id="5703863730741917647">Specify the action to take when the idle delay is reached.

          Note that this policy is deprecated and will be removed in the future.

          This policy provides a fallback value for the more-specific <ph name="IDLEACTIONAC_POLICY_NAME"/> and <ph name="IDLEACTIONBATTERY_POLICY_NAME"/> policies. If this policy is set, its value gets used if the respective more-specific policy is not set.

          When this policy is unset, behaviour of the more-specific policies remains unaffected.</translation>
<translation id="5997543603646547632">Use 24 hour clock by default</translation>
<translation id="7003746348783715221"><ph name="PRODUCT_NAME"/> preferences</translation>
<translation id="4723829699367336876">Enable firewall traversal from remote access client</translation>
<translation id="6367755442345892511">Whether the release channel should be configurable by the user</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="9096086085182305205">Authentication server whitelist</translation>
<translation id="4980301635509504364">Allow or deny video capture.

      If enabled or not configured (default), the user will be prompted for
      video capture access except for URLs configured in the
      VideoCaptureAllowedUrls list which will be granted access without prompting.

      When this policy is disabled, the user will never be prompted and video
      capture only be available to URLs configured in VideoCaptureAllowedUrls.

      This policy affects all types of video inputs and not only the built-in camera.</translation>
<translation id="7063895219334505671">Allow pop-ups on these sites</translation>
<translation id="4052765007567912447">Controls whether the user may show passwords in clear text in the password manager.

          If you disable this setting, the password manager does not allow showing stored passwords in clear text in the password manager window.

          If you enable or do not set this policy, users can view their passwords in clear text in the password manager.</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="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="7933141401888114454">Enable creation of supervised users</translation>
<translation id="2824715612115726353">Enable Incognito mode</translation>
<translation id="1057535219415338480">Enables network prediction in <ph name="PRODUCT_NAME"/> and prevents users from changing this setting.

      This controls not only DNS prefetching but also TCP and SSL preconnection and prerendering of web pages. The policy name refers to DNS prefetching for historical reasons.

      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="4541530620466526913">Device-local accounts</translation>
<translation id="5815129011704381141">Automatically reboot after update</translation>
<translation id="1757688868319862958">Allows <ph name="PRODUCT_NAME"/> to run plug-ins that require authorisation. If you enable this setting, plug-ins that are not outdated always run. If this setting is disabled or not set, users will be asked for permission to run plug-ins that require authorisation. These are plug-ins that can compromise security.</translation>
<translation id="6392973646875039351">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="6157537876488211233">Comma-separated list of proxy bypass rules</translation>
<translation id="7788511847830146438">Per Profile</translation>
<translation id="2516525961735516234">Specifies whether video activity affects power management.

          If this policy is set to True or is unset, the user is not considered to be idle while video is playing. This prevents the idle delay, screen dim delay, screen off delay and screen lock delay from being reached and the corresponding actions from being taken.

          If this policy is set to False, video activity does not prevent the user from being considered idle.</translation>
<translation id="3965339130942650562">Timeout until idle user log-out is executed</translation>
<translation id="5814301096961727113">Set the default state of spoken feedback on the login screen</translation>
<translation id="9084985621503260744">Specify whether video activity affects power management</translation>
<translation id="7091198954851103976">Always runs plug-ins that require authorisation</translation>
<translation id="1708496595873025510">Set the restriction on the fetching of the Variations seed</translation>
<translation id="8870318296973696995">Homepage</translation>
<translation id="1240643596769627465">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 that the user has entered so far.

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

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.</translation>
<translation id="6693751878507293182">If you set this setting to enabled the automatic search and installation of missing plug-ins will be disabled in <ph name="PRODUCT_NAME"/>.

      Setting this option to disabled or leave it unset the plug-in finder will be active.</translation>
<translation id="2650049181907741121">Action to take when the user closes the lid</translation>
<translation id="7880891067740158163">Allows you to specify a list of url patterns that specify sites for which <ph name="PRODUCT_NAME"/> should automatically select a client certificates, if the site requests a certificate.

          If this policy is left not set no auto-selection will be done for any site.</translation>
<translation id="3866249974567520381">Description</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="2236488539271255289">Do not allow any site to set local data</translation>
<translation id="4467952432486360968">Block third-party cookies</translation>
<translation id="1305864769064309495">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 Chrome itself.</translation>
<translation id="5586942249556966598">Do nothing</translation>
<translation id="131353325527891113">Show usernames on login screen</translation>
<translation id="5317965872570843334">Enables usage of STUN and relay 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 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 will only allow connections from client machines within the local network.

          If this policy is left unset the setting will be enabled.</translation>
<translation id="4057110413331612451">Allow enterprise user to be primary multiprofile user only</translation>
<translation id="5365946944967967336">Show Home button on the toolbar</translation>
<translation id="3709266154059827597">Configure extension installation blacklist</translation>
<translation id="8451988835943702790">Use New Tab Page as homepage</translation>
<translation id="4617338332148204752">Skip the meta tag check in <ph name="PRODUCT_FRAME_NAME"/></translation>
<translation id="8469342921412620373">Enables the use of a default search provider.

          If you enable this setting, a default search is performed when the user types text in 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 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 unset, the default search provider is enabled and the user will be able to set the search provider list.</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="2633084400146331575">Enable spoken feedback</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="2411919772666155530">Block notifications from these sites</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="4869787217450099946">Specifies whether screen wake locks are allowed. Screen wake locks can be requested by extensions via the power management extension API.

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

          If this policy is set to false, screen wake lock requests will be ignored.</translation>
<translation id="467236746355332046">Supported features:</translation>
<translation id="7632724434767231364">GSSAPI library name</translation>
<translation id="3038323923255997294">Continue running background apps when <ph name="PRODUCT_NAME"/> is closed</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="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="6244210204546589761">URLs to open on start-up</translation>
<translation id="7468416082528382842">Windows registry location:</translation>
<translation id="1808715480127969042">Block cookies on these sites</translation>
<translation id="1908884158811109790">Disables Google Drive over Cellular connections in the Chrome OS Files app</translation>
<translation id="7340034977315324840">Report device activity times</translation>
<translation id="4928632305180102854">Controls whether <ph name="PRODUCT_OS_NAME"/> allows new user accounts to be created. If this policy is set to false, users that do not have an account already will not be able to login.

      If this policy is set to true or not configured, new user accounts are allowed to be created, provided that <ph name="DEVICEUSERWHITELISTPROTO_POLICY_NAME"/> does not prevent the user from logging in.</translation>
<translation id="4389091865841123886">Configure the remote attestation with TPM mechanism.</translation>
<translation id="3518214502751233558">Specify whether power management delays and the session length limit should only start running after initial user activity in a session</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="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="1349276916170108723">Disables Google Drive syncing in the Chrome OS 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="1964634611280150550">Incognito mode disabled.</translation>
<translation id="5971128524642832825">Disables Drive in the Chrome OS Files app</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="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="538108065117008131">Allow <ph name="PRODUCT_FRAME_NAME"/> to handle the following content types.</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="243972079416668391">Specify the action to take when the idle delay is reached while running on AC power.

          When this policy is set, it specifies the action that <ph name="PRODUCT_OS_NAME"/> takes when the user remains idle for the length of time given by the idle delay, which can be configured separately.

          When this policy is unset, the default action is taken, which is suspend.

          If the action is suspend, <ph name="PRODUCT_OS_NAME"/> can separately be configured to either lock or not lock the screen before suspending.</translation>
<translation id="7750991880413385988">Open New Tab Page</translation>
<translation id="741903087521737762">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 reopened 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"/>.</translation>
<translation id="8161570238552664224">Allow playing audio.

      When this policy is set to false, audio output will not be available on the device while the user is logged in.

      This policy affects all types of audio output and not only the built-in speakers. Audio accessability features are also inhibited by this policy. Do not enable this policy if a screen reader is required for the user.

      If this setting is set to true or not configured then users can use all supported audio outputs on their device.</translation>
<translation id="5761030451068906335">Configures the proxy settings for <ph name="PRODUCT_NAME"/>.

      This policy isn't ready for usage yet, please don't use it.</translation>
<translation id="3006443857675504368">Show <ph name="PRODUCT_OS_NAME"/> accessibility options in the system menu.

          If this policy is set to true, Accessibility options always appear in system tray menu.

          If this policy is set to false, Accessibility options never appear in system tray menu.

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

          If this policy is left unset, Accessibility options will not appear in the system tray menu, but the user can cause the Accessibility options to appear via the Settings page.</translation>
<translation id="8344454543174932833">Import bookmarks from default browser on first run</translation>
<translation id="1019101089073227242">Set user data directory</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="2988031052053447965">Hide the Chrome Web Store app and footer link from the New Tab Page and Chrome OS 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="5085647276663819155">Disable Print Preview</translation>
<translation id="8672321184841719703">Target Auto-Update Version</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="6699880231565102694">Enable two-factor authentication for remote access hosts</translation>
<translation id="2030905906517501646">Default search provider keyword</translation>
<translation id="3072045631333522102">Screen saver to be used on the sign-in screen in retail mode</translation>
<translation id="4550478922814283243">Enable or disable PIN-less authentication</translation>
<translation id="7712109699186360774">Ask every time a site wants to access the camera and/or microphone</translation>
<translation id="350797926066071931">Enable Translate</translation>
<translation id="3711895659073496551">Suspend</translation>
<translation id="4010738624545340900">Allow invocation of file selection dialogues</translation>
<translation id="4518251772179446575">Ask whenever a site wants to track the users' physical location</translation>
<translation id="402759845255257575">Do not allow any site to run JavaScript</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="706669471845501145">Allow SITE to show desktop notifications?</translation>
<translation id="7529144158022474049">Auto update scatter factor</translation>
<translation id="2188979373208322108">Enables the bookmark bar on <ph name="PRODUCT_NAME"/>.

      If you enable this setting, <ph name="PRODUCT_NAME"/> will show a bookmark bar.

      If you disable this setting, users will never see the bookmark bar.

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

      If this setting is left unset, the user can decide to use this function or not.</translation>
<translation id="5475361623548884387">Enable printing</translation>
<translation id="7287359148642300270">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 not set Chrome 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 Chrome.</translation>
<translation id="3653237928288822292">Default search provider icon</translation>
<translation id="2872961005593481000">Shut down</translation>
<translation id="4445684791305970001">Disables the Developer Tools and the JavaScript console.

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

      Setting this option to disabled or leaving it unset will allow the user to use the Developer Tools and the JavaScript console.</translation>
<translation id="9203071022800375458">Disables taking screenshots.

      If enabled screenshots cannot be taken using keyboard shortcuts or extension APIs.

      If disabled or not specified, taking screenshots is allowed.</translation>
<translation id="5697306356229823047">Report device users</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="4632343302005518762">Allow <ph name="PRODUCT_FRAME_NAME"/> to handle the listed content types</translation>
<translation id="13356285923490863">Policy Name</translation>
<translation id="557658534286111200">Enables or disables bookmark editing</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="2386362615870139244">Allow screen wake locks</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="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="389421284571827139">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"/> ignores 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="681446116407619279">Supported authentication schemes</translation>
<translation id="4027608872760987929">Enable the default search provider</translation>
<translation id="2223598546285729819">Default notification settings</translation>
<translation id="6158324314836466367">Enterprise web store name (deprecated)</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="3793095274466276777">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.</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="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="6155936611791017817">Set default state of the large cursor on the login screen</translation>
<translation id="1530812829012954197">Always render the following URL patterns in the host browser</translation>
<translation id="9026000212339701596">A dictionary mapping hostnames to a boolean flag specifying whether access to the host should be allowed (true) or blocked (false).

          This policy is for internal use by Chrome itself.</translation>
<translation id="913195841488580904">Block access to a list of URLs</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="6373222873250380826">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.</translation>
<translation id="6190022522129724693"> setting</translation>
<translation id="847472800012384958">Do not allow any site to show pop-ups</translation>
<translation id="4733471537137819387">Policies related to integrated HTTP authentication.</translation>
<translation id="8951350807133946005">Set disk cache directory</translation>
<translation id="603410445099326293">Parameters for suggest URL which uses POST</translation>
<translation id="2592091433672667839">Duration of inactivity before the screen saver is shown on the sign-in screen in retail mode</translation>
<translation id="166427968280387991">Proxy server</translation>
<translation id="2805707493867224476">Allow all sites to show pop-ups</translation>
<translation id="1727394138581151779">Block all plug-ins</translation>
<translation id="8118665053362250806">Set media disk cache size</translation>
<translation id="7079519252486108041">Block pop-ups on these sites</translation>
<translation id="1859633270756049523">Limit the session length</translation>
<translation id="7433714841194914373">Enable Instant</translation>
<translation id="4983201894483989687">Allow running plug-ins that are outdated</translation>
<translation id="443665821428652897">Clear site data on browser shutdown (deprecated)</translation>
<translation id="3823029528410252878">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.

      If this setting is disabled or not set, browsing history is saved.</translation>
<translation id="7295019613773647480">Enable supervised users</translation>
<translation id="2759224876420453487">Control the user behaviour in a multiprofile session</translation>
<translation id="3844092002200215574">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.

      See http://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="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="193900697589383153">Adds a logout button to the system tray.

      If enabled, a big, red logout button is shown in the system tray while a session is active and the screen is not locked.

      If disabled or not specified, no big, red logout button is shown in the system tray.</translation>
<translation id="5111573778467334951">Specify the action to take when the idle delay is reached while running on battery power.

          When this policy is set, it specifies the action that <ph name="PRODUCT_OS_NAME"/> takes when the user remains idle for the length of time given by the idle delay, which can be configured separately.

          When this policy is unset, the default action is taken, which is suspend.

          If the action is suspend, <ph name="PRODUCT_OS_NAME"/> can separately be configured to either lock or not lock the screen before suspending.</translation>
<translation id="3195451902035818945">Specifies whether SSL record splitting should be disabled. Record splitting is a workaround for a weakness in SSL 3.0 and TLS 1.0 but can cause compatibility issues with some HTTPS servers and proxies.

      If the policy is not set, or is set to false, then record splitting will be used on SSL/TLS connections which use CBC cipher suites.</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="5868414965372171132">User-level network configuration</translation>
<translation id="8519264904050090490">Managed user manual exception URLs</translation>
<translation id="4480694116501920047">Force SafeSearch</translation>
<translation id="465099050592230505">Enterprise web store URL (deprecated)</translation>
<translation id="1221359380862872747">Load specified URLs on demo login</translation>
<translation id="2431811512983100641">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="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="5774856474228476867">Default search provider search URL</translation>
<translation id="4650759511838826572">Disable URL protocol schemes</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="8099880303030573137">Idle delay when running on battery power</translation>
<translation id="2761483219396643566">Idle warning delay when running on battery power</translation>
<translation id="5058056679422616660">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="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="602728333950205286">Default search provider instant URL</translation>
<translation id="3030000825273123558">Enable metrics reporting</translation>
<translation id="8465065632133292531">Parameters for instant URL which uses POST</translation>
<translation id="6659688282368245087">Specifies the clock format to be used for the device.

      This policy configures the clock format to use on the login screen and as a default for user sessions. Users can still override the clock format for their account.

      If the policy is not set to true, the device will use a 24 hour clock format. If the policy is set to false, the device will use 12 hour clock format.

      If this policy is not set, the device will default to a 24 hour clock format.</translation>
<translation id="6559057113164934677">Do not allow any site to access the camera and microphone</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="1675002386741412210">Supported on:</translation>
<translation id="1608755754295374538">URLs that will be granted access to audio capture devices without prompt</translation>
<translation id="3547954654003013442">Proxy settings</translation>
<translation id="5921713479449475707">Allow autoupdate downloads via HTTP</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="2518231489509538392">Allow playing audio</translation>
<translation id="8146727383888924340">Allow users to redeem offers through Chrome OS Registration</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="436581050240847513">Report device network interfaces</translation>
<translation id="6282799760374509080">Allow or deny audio capture</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="3264793472749429012">Default search provider encodings</translation>
<translation id="285480231336205327">Enable high contrast mode</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="8101760444435022591">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 Chrome will not perform online revocation checks in Chrome 19 and later.</translation>
<translation id="5469484020713359236">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 the user's personal configuration otherwise.</translation>
<translation id="1504431521196476721">Remote Attestation</translation>
<translation id="1881299719020653447">Hide the web store from the new tab page and app launcher</translation>
<translation id="930930237275114205">Set <ph name="PRODUCT_FRAME_NAME"/> user data directory</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="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="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="4600786265870346112">Enable large cursor</translation>
<translation id="8592105098257899882">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 whether the user has specified the '--disk-cache-size' flag or not.

      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="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="5765780083710877561">Description:</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="7796141075993499320">Allows you to set a list of url patterns that specify sites which are allowed to run plug-ins.

          If this policy is left unset the global default value will be used for all sites either from the 'DefaultPlug-insSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="3809527282695568696">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 unset, no URL will be opened on start up.

          This policy only works if the 'RestoreOnStartup' policy is set to 'RestoreOnStartupIsURLs'.</translation>
<translation id="649418342108050703">Disable support for 3D graphics APIs.

      Enabling this setting prevents web pages from accessing the graphics processing unit (GPU). Specifically, web pages cannot access the WebGL API and plug-ins cannot use the Pepper 3D API.

      Disabling this setting or leaving it unset potentially allows web pages to use the WebGL API and plug-ins to use the Pepper 3D API. The default settings of the browser may still require command line arguments to be passed in order to use these APIs.</translation>
<translation id="2077273864382355561">Screen off delay when running on battery power</translation>
<translation id="909184783177222836">Power management</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="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="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="7258823566580374486">Enable curtaining of remote access hosts</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="944817693306670849">Set disk cache size</translation>
<translation id="8544375438507658205">Default HTML renderer for <ph name="PRODUCT_FRAME_NAME"/></translation>
<translation id="2371309782685318247">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 1800000 (30 minutes) to 86400000 (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_NAME"/> use the default value of 3 hours.</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="7424751532654212117">List of exceptions to the list of disabled plugins</translation>
<translation id="6233173491898450179">Set download directory</translation>
<translation id="78524144210416006">Configure power management on the login 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 login 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.

      The policy should be specified as a string that expresses the individual settings in JSON format, conforming to the following schema:
      {
        &quot;type&quot;: &quot;object&quot;,
        &quot;properties&quot;: {
          &quot;AC&quot;: {
            &quot;description&quot;: &quot;Power management settings applicable only when running on AC power&quot;,
            &quot;type&quot;: &quot;object&quot;,
            &quot;properties&quot;: {
              &quot;Delays&quot;: {
                &quot;type&quot;: &quot;object&quot;,
                &quot;properties&quot;: {
                  &quot;ScreenDim&quot;: {
                    &quot;description&quot;: &quot;The length of time without user input after which the screen is dimmed, in milliseconds&quot;,
                    &quot;type&quot;: &quot;integer&quot;,
                    &quot;minimum&quot;: 0
                  },
                  &quot;ScreenOff&quot;: {
                    &quot;description&quot;: &quot;The length of time without user input after which the screen is turned off, in milliseconds&quot;,
                    &quot;type&quot;: &quot;integer&quot;,
                    &quot;minimum&quot;: 0
                  },
                  &quot;Idle&quot;: {
                    &quot;description&quot;: &quot;The length of time without user input after which the idle action is taken, in milliseconds&quot;,
                    &quot;type&quot;: &quot;integer&quot;,
                    &quot;minimum&quot;: 0
                  }
                }
              },
              &quot;IdleAction&quot;: {
                &quot;description&quot;: &quot;Action to take when the idle delay is reached&quot;,
                &quot;enum&quot;: [ &quot;Suspend&quot;, &quot;Shutdown&quot;, &quot;DoNothing&quot; ]
              }
            }
          },
          &quot;Battery&quot;: {
            &quot;description&quot;: &quot;Power management settings applicable only when running on battery power&quot;,
            &quot;type&quot;: &quot;object&quot;,
            &quot;properties&quot;: {
              &quot;Delays&quot;: {
                &quot;type&quot;: &quot;object&quot;,
                &quot;properties&quot;: {
                  &quot;ScreenDim&quot;: {
                    &quot;description&quot;: &quot;The length of time without user input after which the screen is dimmed, in milliseconds&quot;,
                    &quot;type&quot;: &quot;integer&quot;,
                    &quot;minimum&quot;: 0
                  },
                  &quot;ScreenOff&quot;: {
                    &quot;description&quot;: &quot;The length of time without user input after which the screen is turned off, in milliseconds&quot;,
                    &quot;type&quot;: &quot;integer&quot;,
                    &quot;minimum&quot;: 0
                  },
                  &quot;Idle&quot;: {
                    &quot;description&quot;: &quot;The length of time without user input after which the idle action is taken, in milliseconds&quot;,
                    &quot;type&quot;: &quot;integer&quot;,
                    &quot;minimum&quot;: 0
                  }
                }
              },
              &quot;IdleAction&quot;: {
                &quot;description&quot;: &quot;Action to take when the idle delay is reached&quot;,
                &quot;enum&quot;: [ &quot;Suspend&quot;, &quot;Shutdown&quot;, &quot;DoNothing&quot; ]
              }
            }
          },
          &quot;LidCloseAction&quot;: {
            &quot;description&quot;: &quot;Action to take when the lid is closed&quot;,
            &quot;enum&quot;: [ &quot;Suspend&quot;, &quot;Shutdown&quot;, &quot;DoNothing&quot; ]
          },
          &quot;UserActivityScreenDimDelayScale&quot;: {
            &quot;description&quot;: &quot;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&quot;,
            &quot;type&quot;: &quot;integer&quot;,
            &quot;minimum&quot;: 100
          }
        }
      }

      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="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="2299220924812062390">Specify a list of enabled plug-ins</translation>
<translation id="328908658998820373">Allow fullscreen mode.

      This policy controls the availability of fullscreen mode in which all <ph name="PRODUCT_NAME"/> UI is hidden and only web content is visible.

      If this policy is set to true or not configured, the user, apps and extensions with appropriate permissions can enter fullscreen mode.

      If this policy is set to false, neither the user nor any apps or extensions can enter fullscreen mode.

      On all platforms except <ph name="PRODUCT_OS_NAME"/>, kiosk mode is unavailable when fullscreen mode is disabled.</translation>
<translation id="4325690621216251241">Add a logout button to the system tray</translation>
<translation id="924557436754151212">Import saved passwords from default browser on first run</translation>
<translation id="1465619815762735808">Click to play</translation>
<translation id="7227967227357489766">Defines the list of users that are allowed to login to the device. Entries are of the form <ph name="USER_WHITELIST_ENTRY_FORMAT"/>, such as <ph name="USER_WHITELIST_ENTRY_EXAMPLE"/>. To allow arbitrary users on a domain, use entries of the form <ph name="USER_WHITELIST_ENTRY_WILDCARD"/>.

      If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the <ph name="DEVICEALLOWNEWUSERS_POLICY_NAME"/> policy to be configured appropriately.</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="1897365952389968758">Allow all sites to run JavaScript (recommended)</translation>
<translation id="5244714491205147861">Power mangement on the login screen</translation>
<translation id="922540222991413931">Configure extension, app, and user script install sources</translation>
<translation id="7323896582714668701">Additional command line parameters for <ph name="PRODUCT_NAME"/></translation>
<translation id="6931242315485576290">Disable synchronisation of data with Google</translation>
<translation id="7006788746334555276">Content Settings</translation>
<translation id="63659515616919367">Control the user behaviour in a multiprofile session on <ph name="PRODUCT_OS_NAME"/> devices.

      If this policy is set to 'MultiProfileUserBehaviorUnrestricted', the user can be either primary or secondary user in a multiprofile session.

      If this policy is set to 'MultiProfileUserBehaviorMustBePrimary', the user can only be the primary user in a multiprofile session.

      If this policy is set to 'MultiProfileUserBehaviorNotAllowed', the user cannot be part of a multiprofile session.

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

      If the setting is changed while the user is signed into a multiprofile 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 'MultiProfileUserBehaviorUnrestricted' will be used.</translation>
<translation id="5142301680741828703">Always render the following URL patterns in <ph name="PRODUCT_FRAME_NAME"/></translation>
<translation id="4625915093043961294">Configure extension installation whitelist</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="4507081891926866240">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 http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
<translation id="3101501961102569744">Choose how to specify proxy server settings</translation>
<translation id="1803646570632580723">List of pinned apps to show in the launcher</translation>
<translation id="1062011392452772310">Enable remote attestation for the device</translation>
<translation id="7774768074957326919">Use system proxy settings</translation>
<translation id="3891357445869647828">Enable JavaScript</translation>
<translation id="868187325500643455">Allow all sites to automatically run plug-ins</translation>
<translation id="7421483919690710988">Set media disk cache size in bytes</translation>
<translation id="5226033722357981948"> finder should be disabled</translation>
<translation id="4890209226533226410">Set the type of screen magnifier that is enabled.

          If this policy is set, it controls the type of screen magnifier that is enabled. Setting the policy to &quot;None&quot; disables the screen magnifier.

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

          If this policy is left unset, the screen magnifier is disabled initially but can be enabled by the user at any time.</translation>
<translation id="3428247105888806363">Enable network prediction.</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="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="2757054304033424106">Types of extensions/apps that are allowed to be installed</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="5757829681942414015">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.

      See http://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="5067143124345820993">Login user white list</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="7194407337890404814">Default search provider name</translation>
<translation id="1843117931376765605">Refresh rate for user policy</translation>
<translation id="5535973522252703021">Kerberos delegation server whitelist</translation>
<translation id="9187743794267626640">Disable mounting of external storage</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="5307432759655324440">Incognito mode availability</translation>
<translation id="4056910949759281379">Disable SPDY protocol</translation>
<translation id="3808945828600697669">Specify a list of disabled plug-ins</translation>
<translation id="4525521128313814366">Allows you to set a list of url patterns that specify sites which are not allowed to display images.

          If this policy is left unset, the global default value will be used for all sites either from the 'DefaultImagesSetting' policy, if it is set, or the user's personal configuration otherwise.</translation>
<translation id="8499172469244085141">Default Settings (users can override)</translation>
<translation id="8693243869659262736">Use built-in DNS client</translation>
<translation id="3072847235228302527">Set the Terms of Service for a device-local account</translation>
<translation id="5523812257194833591">A public session 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 public session must already be configured (see |DeviceLocalAccounts|).

      If this policy is unset, there will be no auto-login.</translation>
<translation id="5983708779415553259">Default behaviour for sites not in any content pack</translation>
<translation id="3866530186104388232">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 the user to pick one. If this policy is set to false, <ph name="PRODUCT_OS_NAME"/> will use the username/password prompt for login.</translation>
<translation id="2098658257603918882">Enable reporting of usage and crash-related data</translation>
<translation id="2324547593752594014">Allows sign in to Chrome</translation>
<translation id="172374442286684480">Allow all sites to set local data.</translation>
<translation id="1151353063931113432">Allow images on these sites</translation>
<translation id="1297182715641689552">Use a .pac proxy script</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="8631434304112909927">until version <ph name="UNTIL_VERSION"/></translation>
<translation id="7469554574977894907">Enable search suggestions</translation>
<translation id="4906194810004762807">Refresh rate for Device Policy</translation>
<translation id="8922668182412426494">Servers that <ph name="PRODUCT_NAME"/> may delegate to.

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

          If you leave this policy not set Chrome will not delegate user credentials even if a server is detected as Intranet.</translation>
<translation id="1398889361882383850">Allows you to set whether websites are allowed to automatically run plugins. Automatically running plugins can be either allowed for all websites or denied for all websites.

          Click to play allows plugins to run but the user must click them to start their execution.

          If this policy is left not set, 'AllowPlugins' will be used and the user will be able to change it.</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="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="5511702823008968136">Enable Bookmark Bar</translation>
<translation id="5105313908130842249">Screen lock delay when running on battery power</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="7736666549200541892">Enable TLS domain-bound certificates extension</translation>
<translation id="1796466452925192872">Allows you to specify which URLs are allowed to install extensions, apps and themes.

          Starting in Chrome 21, it is more difficult to install extensions, apps and user scripts from outside the Chrome Web Store. Previously, users could click on a link to a *.crx file, and Chrome would offer to install the file after a few warnings. After Chrome 21, such files must be downloaded and dragged onto the Chrome settings page. This setting allows specific URLs to have the old, easier installation flow.

          Each item in this list is an extension-style match pattern (see http://code.google.com/chrome/extensions/match_patterns.html). Users will be able to easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (i.e. the referrer) must be allowed by these patterns.

          ExtensionInstallBlacklist takes precedence over this policy. That is, an extension on the blacklist won't be installed, even if it happens from a site on this list.</translation>
<translation id="2113068765175018713">Limit device uptime by automatically rebooting</translation>
<translation id="7848840259379156480">Allows you to configure the default HTML renderer when <ph name="PRODUCT_FRAME_NAME"/> is installed.
      The default setting 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="186719019195685253">Action to take when the idle delay is reached while running on AC power</translation>
<translation id="7890264460280019664">Report list of network interfaces with their types and hardware addresses to the server.

      If the policy is not set, or set to false, the interface list will not be reported.</translation>
<translation id="4121350739760194865">Prevent app promotions from appearing on the new tab page</translation>
<translation id="2127599828444728326">Allow notifications on these sites</translation>
<translation id="3973371701361892765">Never auto-hide the shelf</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="2948087343485265211">Specifies whether audio activity affects power management.

          If this policy is set to True or is unset, the user is not considered to be idle while audio is playing. This prevents the idle timeout from being reached and the idle action from being taken. However, screen dimming, screen off and screen lock will be performed after the configured timeouts, irrespective of audio activity.

          If this policy is set to False, audio activity does not prevent the user from being considered idle.</translation>
<translation id="7842869978353666042">Configure Google Drive options</translation>
<translation id="718956142899066210">Connection types allowed for updates</translation>
<translation id="1734716591049455502">Configure remote access options</translation>
<translation id="7336878834592315572">Keep cookies for the duration of the session.</translation>
<translation id="7715711044277116530">Percentage by which to scale the screen dim delay in presentation mode</translation>
<translation id="8777120694819070607">Allows <ph name="PRODUCT_NAME"/>.</translation>
<translation id="2629448496147630947">Configure remote access options in <ph name="PRODUCT_NAME"/>.

      These features are ignored unless the Remote Access web application is installed.</translation>
<translation id="1310699457130669094">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="1509692106376861764">This policy has been retired as of <ph name="PRODUCT_NAME"/> version 29.</translation>
<translation id="5464816904705580310">Configure settings for managed users.</translation>
<translation id="3219421230122020860">Incognito mode available.</translation>
<translation id="7690740696284155549">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 http://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="7381326101471547614">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 not set, SPDY will be available.</translation>
<translation id="2208976000652006649">Parameters for search URL which uses POST</translation>
<translation id="1583248206450240930">Use <ph name="PRODUCT_FRAME_NAME"/> by default</translation>
<translation id="1047128214168693844">Do not allow any site to track the users' physical location</translation>
<translation id="4101778963403261403">Configures the type of the default home page in <ph name="PRODUCT_NAME"/> and prevents users from changing home page preferences. The home page can either be set to a URL you specify or set to the New Tab Page.

          If you enable this setting, the New Tab Page is always used for the home page and the home page 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 home page type in <ph name="PRODUCT_NAME"/>.

          Leaving this policy not set will allow the user to choose whether the new tab page is his home page on his own.</translation>
<translation id="8970205333161758602">Suppress the <ph name="PRODUCT_FRAME_NAME"/> turn-down prompt</translation>
<translation id="3273221114520206906">Default JavaScript setting</translation>
<translation id="4025586928523884733">Blocks third party cookies.

      Enabling this setting prevents cookies from being set by web page elements that are not from the domain that is in the browser's address bar.

      Disabling this setting allows cookies to be set by web page elements that are not from the domain that is in the browser's address bar and prevents users from changing this setting.

      If this policy is left unset, third party cookies will be enabled but the user will be able to change that.</translation>
<translation id="6810445994095397827">Block JavaScript on these sites</translation>
<translation id="6672934768721876104">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'.

          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="3780152581321609624">Include non-standard port in Kerberos SPN</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="2660846099862559570">Never use a proxy</translation>
<translation id="1435659902881071157">Device-level network configuration</translation>
<translation id="2131902621292742709">Screen dim delay when running on battery power</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="5512418063782665071">Home page URL</translation>
<translation id="2948381198510798695"><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="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="523505283826916779">Accessibility settings</translation>
<translation id="1948757837129151165">Policies for HTTP Authentication</translation>
<translation id="5946082169633555022">Beta channel</translation>
<translation id="7187256234726597551">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.platformKeysPrivate extension API will fail.</translation>
<translation id="5242696907817524533">Configures a list of managed bookmarks.

      The policy is a list of bookmarks, and each bookmark is a dictionary containing the bookmark &quot;name&quot; and target &quot;url&quot;.

      These bookmarks are placed in a Managed bookmarks folder inside the Mobile bookmarks. These bookmarks can't be modified by the user.

      When this policy is set then the Managed bookmarks are the default folder opened when the bookmarks view is opened in Chrome.

      Managed bookmarks are not synced to the user account.</translation>
<translation id="8303314579975657113">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="8549772397068118889">Warn when visiting sites outside of content packs</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="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="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="5645779841392247734">Allow cookies on these sites</translation>
<translation id="4043912146394966243"> 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 &quot;ethernet&quot;, &quot;wifi&quot;, &quot;wimax&quot;, &quot;bluetooth&quot; and &quot;cellular&quot;.</translation>
<translation id="6652197835259177259">Locally managed users settings</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="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="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="4088589230932595924">Incognito mode forced.</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="8197918588508433925">This policy specifies the allowed extensions to use Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() 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="7649638372654023172">Configures the default home page URL in <ph name="PRODUCT_NAME"/> and prevents users from changing it.

          The home page is the page opened by the Home button. The pages that open on startup are controlled by the RestoreOnStartup policies.

          The home page type can either be set to a URL 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 home page URL in <ph name="PRODUCT_NAME"/>, but they can can still choose the New Tab Page as their home page.

          Leaving this policy not set will allow the user to choose his home page on his own if HomepageIsNewTabPage is not set too.</translation>
<translation id="4858735034935305895">Allow fullscreen mode</translation>
</translationbundle>