'af_ZA', 'am' => 'am_ET', 'arj' => 'ar_JO', 'ar' => 'ar_SA', 'az' => 'az_AZ', 'be' => 'be_BY', 'bg' => 'bg_BG', 'bn' => 'bn_BD', 'bo' => 'bo_CN', 'bs' => 'bs_BA', 'ca' => 'ca_ES', 'ceb' => 'ceb_PH', 'chk' => 'chk_FM', 'ckb' => 'ckb_IQ', 'cnh' => 'cnh_MM', 'cs' => 'cs_CZ', 'cy' => 'cy_GB', 'da' => 'da_DK', 'de' => 'de_DE', 'dv' => 'dv_MV', 'el' => 'el_GR', 'en' => 'en_US', 'en_GB' => 'en_GB', 'es' => 'es_ES', 'es_419' => 'es_419', 'es_MX' => 'es_MX', 'es_PR' => 'es_PR', 'et' => 'et_EE', 'eu' => 'eu_ES', 'fa' => 'fa_IR', 'ff' => 'ff_SN', 'fi' => 'fi_FI', 'fil' => 'fil_PH', 'fj' => 'fj_FJ', 'fr' => 'fr_FR', 'fr_CA' => 'fr_CA', 'ga' => 'ga_IE', 'gu' => 'gu_IN', 'hak' => 'hak_TW', 'ha' => 'ha_NG', 'haw' => 'haw_US', 'he' => 'he_IL', 'hi' => 'hi_IN', 'hil' => 'hil_PH', 'hmn' => 'hmn_US', 'hr' => 'hr_HR', 'ht' => 'ht_HT', 'hu' => 'hu_HU', 'hy' => 'hy_AM', 'id' => 'id_ID', 'ig' => 'ig_NG', 'ilo' => 'ilo_PH', 'is' => 'is_IS', 'it' => 'it_IT', 'ja' => 'ja_JP', 'jv' => 'jv_ID', 'ka' => 'ka_GE', 'kea' => 'kea_CV', 'kk' => 'kk_KZ', 'km' => 'km_KH', 'kn' => 'kn_IN', 'ko' => 'ko_KR', 'ksw' => 'ksw_MM', 'ku' => 'ku_TR', 'ky' => 'ky_KG', 'la' => 'la_VA', 'lb' => 'lb_LU', 'lo' => 'lo_LA', 'lt' => 'lt_LT', 'lv' => 'lv_LV', 'man' => 'man_GM', 'mh' => 'mh_MH', 'mi' => 'mi_NZ', 'mien' => 'mien_US', 'mk' => 'mk_MK', 'ml' => 'ml_IN', 'mn' => 'mn_MN', 'mr' => 'mr_IN', 'ms' => 'ms_MY', 'mt' => 'mt_MT', 'my' => 'my_MM', 'ne' => 'ne_NP', 'nl' => 'nl_NL', 'nl_BE' => 'nl_BE', 'no' => 'no_NO', 'nv' => 'nv_US', 'om' => 'om_ET', 'pa' => 'pa_IN', 'pl' => 'pl_PL', 'ps' => 'ps_AF', 'pt' => 'pt_PT', 'pt_BR' => 'pt_BR', 'qu' => 'qu_PE', 'rn' => 'rn_BI', 'ro' => 'ro_RO', 'rom' => 'rom_MD', 'ru' => 'ru_RU', 'rw' => 'rw_RW', 'sm' => 'sm_WS', 'smj' => 'smj_NO', 'sk' => 'sk_SK', 'sl' => 'sl_SI', 'so' => 'so_SO', 'sq' => 'sq_AL', 'sr' => 'sr_RS', 'sr_ME' => 'sr_ME', 'sv' => 'sv_SE', 'sw' => 'sw_TZ', 'ta' => 'ta_IN', 'te' => 'te_IN', 'th' => 'th_TH', 'ti' => 'ti_ER', 'tl' => 'tl_PH', 'to' => 'to_TO', 'tr' => 'tr_TR', 'tt' => 'tt_RU', 'uk' => 'uk_UA', 'ur' => 'ur_PK', 'uz' => 'uz_UZ', 'vi' => 'vi_VN', 'wo' => 'wo_SN', 'xh' => 'xh_ZA', 'yi' => 'yi_001', 'yo' => 'yo_NG', 'zh' => 'zh_CN', 'zh_Hant' => 'zh_TW', ]; } /** * Determine which locale we should actually load * based on WP locale + saved option. * * @return string */ public function get_selected_locale() { $site_lang = get_locale(); $map = $this->get_language_map(); $stored = get_option('my_plugin_selected_language'); if (! $stored) { $stored = $site_lang; } // 1) Exact match (en_GB, es_MX etc.) if (isset($map[$stored])) { return $map[$stored]; } // 2) Try short code (en → en_US) $short = substr($stored, 0, 2); if (isset($map[$short])) { return $map[$short]; } // 3) Fallback to whatever WP gave us return $stored; } /** * Load the plugin textdomain, with support for custom locale folders. * * This is hooked from the main plugin class on `plugins_loaded`. */ public function load_plugin_textdomain() { $domain = 'accessibility-assistant'; $locale = $this->get_selected_locale(); // Plugin root dir: /wp-content/plugins/accessibility-assistant/ $plugin_dir = plugin_dir_path(dirname(__FILE__)); // First try: /languages/{locale}/accessibility-assistant.mo // Example: /languages/en_US/accessibility-assistant.mo $mofile = $plugin_dir . "languages/{$locale}/{$domain}.mo"; if (file_exists($mofile)) { load_textdomain($domain, $mofile); } else { // Fallback to standard boilerplate behaviour: // /languages/accessibility-assistant-en_US.mo etc. load_plugin_textdomain( $domain, false, // dirname(dirname(plugin_basename(__FILE__))) == 'accessibility-assistant' dirname(dirname(plugin_basename(__FILE__))) . '/languages/' ); } } /** * Load the plugin text domain for translation. * * @since 1.0.0 */ // public function load_plugin_textdomain() // { // load_plugin_textdomain( // 'accessibility-assistant', // false, // dirname(dirname(plugin_basename(__FILE__))) . '/languages/' // ); // } }