#!/bin/php main->en->localeDisplayNames->territories as $code => $name) { // Use any alternate codes the Drupal community wishes to. $alt_codes = [ // 'CI-alt-variant', // Use CI-alt-variant instead of the CI entry. ]; if (in_array($code, $alt_codes)) { // Just use the first 2 character part of the alt code. $code = strtok($code, '-'); } // Skip any codes we wish to exclude from our country list. $exclude_codes = [ // The European Union is not a country. 'EU', // The Eurozone is not a country. 'EZ', // The United Nations is not a country. 'UN', // "Pseudo-Accents" is not a country. 'XA', // "Pseudo-Bidi" is not a country. 'XB', // Don't allow "Unknown Region". 'ZZ', ]; if (in_array($code, $exclude_codes)) { continue; } // Ignore every territory that doesn't have a 2 character code. if (strlen($code) !== 2) { continue; } $countries[(string) $code] = $name; } if (empty($countries)) { echo 'ERROR: Did not find expected country names.' . PHP_EOL; exit; } // Sort by country code (to minimize diffs). ksort($countries); // Produce PHP code. $out = ''; foreach ($countries as $code => $name) { // For .po translation file's sake, use double-quotes instead of escaped // single-quotes. $name = str_contains($name, '\'' ? '"' . $name . '"' : "'" . $name . "'"); $out .= ' ' . var_export($code, TRUE) . ' => t(' . $name . '),' . "\n"; } // Replace the actual PHP code in standard.inc. $file = DRUPAL_ROOT . '/core/lib/Drupal/Core/Locale/CountryManager.php'; $content = file_get_contents($file); $content = preg_replace('/(\$countries = \[\n)(.+?)(^\s+\];)/ms', '$1' . $out . '$3', $content, -1, $count); file_put_contents($file, $content);