Drupal is a registered trademark of Dries Buytaert
Entity Reference Display 2.0.6 Minor update available for module entity_reference_display (2.0.6). SmartDuo Breadcrumb 2.1.0 Minor update available for module sd_breadcrumb (2.1.0). SmartDuo Breadcrumb 1.1.9 Minor update available for module sd_breadcrumb (1.1.9). Date Point 1.6.2 Minor update available for module date_point (1.6.2). CKEditor 5 Spoiler 1.2.0 Minor update available for module ckeditor5_spoiler (1.2.0). SDC Components 1.0.9 Minor update available for module sdc_components (1.0.9). REST Entity Display 2.0.2 Minor update available for module rest_entity_display (2.0.2). SDC Components 1.0.8 Minor update available for module sdc_components (1.0.8). Purge Module purge crossed 1,000 active installs. Entity Events 2.1.0 Module entity_events updated after 13 months of inactivity (2.1.0).

The Recognize Palestine module renames the country with ISO code PS from Drupal core's default label, "Palestinian Territories", to "Palestine" everywhere Drupal builds its country list (node forms, address fields, listings, filters).

This is a deliberate decolonial choice, not a cosmetic tweak.

Why this exists

"Palestinian Territories" is administrative, occupation-era language: it frames Palestine as a set of fragmented, contingent territories rather than as a country and a people. "Palestine" names the place on its own terms. The words in a country dropdown are not neutral. They carry political weight, so we align our terminology with the self-determination and dignity of Palestinians, in step with the UN General Assembly's recognition of Palestine and common scholarly usage.

The rename is applied consistently across the site and in every language the site offers, so the choice reads the same to every visitor.

Requirements

  • Drupal core ^11 || ^12.
  • The Interface Translation (locale) core module — declared as a dependency and enabled automatically with this module.

Installation

Install as you would normally install a contributed Drupal module. See Installing modules for further information.

Enabling the module immediately applies the rename and imports the bundled translation for each installed language (see Configuration).

Configuration

The module works out of the box and has no settings form. Its behaviour is:

  • On install, hook_install() imports the bundled .po for each installed language, so the rename is localized immediately without waiting for a translation update to run. Strings are imported as not customized, and the import never overwrites an admin's own edits.
  • The wording can still be adjusted at Administration → Configuration → Regional and language → User interface translation (search for Palestine).
  • On uninstall, hook_uninstall() removes the Palestine source string and its translations from locale storage, restoring core's default label.

How it works

Drupal core is deliberately not edited or patched. Instead the module uses the API core provides for exactly this purpose:

  • src/Hook/CountryNameAlter.php implements hook_countries_alter() as an object-oriented #[Hook('countries_alter')] method, replacing the PS label with $this->t('Palestine'). This runs every time the country list is built (\Drupal\Core\Locale\CountryManager::getList()), so it survives core updates with nothing to re-apply — no patch whose line numbers can rot, no hacked core file to be overwritten.

Because the label goes through t(), it is fully translatable.

Translations

The module ships with translations as one portable, translator-editable Gettext file per language, covering every Drupal-supported language for which the localized country name could be sourced authoritatively:

translations/  
recognize_palestine.pot   # template (empty msgstr) — copy this to add a language
  ar.po                  # فلسطين
  es.po                  # Palestina
  ja.po                  # パレスチナ
  ru.po                  # Палестина
  zh-hans.po             # 巴勒斯坦
  …

Each translation is generated from authoritative data, not guessed:

  • The word "Palestine" comes from the Unicode CLDR localized country name for region PS (via ICU).
  • The Plural-Forms: header carries that language's correct plural formula (see A note on Plural-Forms below).

A language is included only when both could be stablished authoritatively. The remaining Drupal languages ship no file and simply fall back to the English source string "Palestine" — which is still the intended rename, just not localized. Currently unlocalized (fall back to "Palestine"): bo, dz, eo, gsw-berne, haw, nn, os, rhg, rw, sk, tyv. Contributions of native-reviewed strings for these are very welcome.

recognize_palestine.info.yml declares the interface-translation project and server pattern, so Drupal's normal translation-update path (drush locale:update or admin/reports/translations) discovers these files.

A note on Plural-Forms

Every shipped .po carries a correct per-language Plural-Forms: header even though the module's single string ("Palestine") has no plural. This is deliberate: Drupal's Gettext importer (\Drupal\locale\PoDatabaseWriter::setHeader()) copies the header's plural formula into the language's stored plural configuration on import, and PoHeader defaults a missing header to nplurals=2; plural=(n > 1);. Shipping a file without a correct formula would therefore overwrite a language's plural rules with a wrong two-form default (breaking pluralization for e.g. Arabic, Japanese, Russian). The formulas here are the standard Gettext formulas and are validated against Drupal's own PoHeader::parsePluralForms().

Adding another language

  1. Copy the template and fill in the translation:
    cp translations/recognize_palestine.pot translations/<langcode>.po

    Set msgstr "…" for msgid "Palestine".

  2. Import it, either by reinstalling the module:
    drush pmu recognize_palestine && drush en recognize_palestine

    or by running drush locale:update (which finds the file via the server pattern declared in the .info.yml).

Uninstalling

hook_uninstall() removes the Palestine source string and its translations from locale storage, leaving the site clean. Core's default label returns.

 

Activity

Total releases
1
First release
Jul 2026
Latest release
2 hours ago
Releases (12 mo)
1 ▲ from 0
Maintenance
Active

Releases

Version Type Release date
1.0.0 Stable Jul 22, 2026