<?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="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="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="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="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="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="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="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="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="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="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="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="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="4047207703890139433">Specifies that the clock format be used for the device. Users can override clock format for the current session. However, on logout it is set back to the specified value. If an empty string is provided, device owner preference is used.</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="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="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="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="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="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="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="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="4035570660718398959">Allow users to redeem offers through Chrome OS Registration.</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="5213629107215526747">URLs that will be granted access to video capture devices without prompt.</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="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="2041396837791669429">Block access to sites outside of content packs.</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="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="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="7712008868843631413">Enable supervised users.</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="4652284479838524692">Enable remote attestation for the device.</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="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="8401282319420373133">Extensions allowed to to use the remote attestation API.</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="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="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="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="8580857153747395000">Warn when visiting sites outside of content packs.</translation>
<translation id="350796261613621561">Enable creation of supervised 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="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="3547954654003013442">Proxy settings</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="6897718480289510689">Allow access to sites outside of content packs.</translation>
<translation id="2518231489509538392">Allow playing audio</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="7927140259706020912">URLs that will be granted access to audio capture devices without prompt.</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="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="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="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="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="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="4578030379102330182">Enable remote attestation for the user.</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="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>
</translationbundle>