{"id":228159,"date":"2022-10-15T19:57:00","date_gmt":"2022-10-15T16:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228159"},"modified":"2022-11-09T01:01:52","modified_gmt":"2022-11-08T22:01:52","slug":"dynamiczna-zmiana-jezyka-lokal-witryny-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dynamiczna-zmiana-jezyka-lokal-witryny-wordpress\/","title":{"rendered":"Dynamiczna zmiana j\u0119zyka (lokal) witryny WordPress"},"content":{"rendered":"<p><a href=\"https:\/\/hashnode.com\/@wholesomecode\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<p>Istnieje kilka fantastycznych wieloj\u0119zycznych wtyczek do WordPressa, jednak w przypadku jednego projektu klienta potrzebowa\u0142em czego\u015b znacznie bardziej elastycznego, poniewa\u017c ten konkretny klient musia\u0142 obs\u0142ugiwa\u0107 kilka kraj\u00f3w, z kt\u00f3rych ka\u017cdy m\u00f3wi\u0142 kilkoma j\u0119zykami.<\/p>\n<p>Kr\u00f3tko m\u00f3wi\u0105c, klient musia\u0142 mie\u0107 instancj\u0119 wielostanowiskow\u0105, kt\u00f3ra mia\u0142a ustawiony domy\u015blnie kraj i j\u0119zyk, a tak\u017ce mo\u017cliwo\u015b\u0107 nadpisania kraju i j\u0119zyka na ka\u017cdej stronie \/ po\u015bcie.<\/p>\n<h2>Tworzenie wtyczki wieloj\u0119zycznej<\/h2>\n<p>Je\u015bli wystarczaj\u0105co du\u017co os\u00f3b <a href=\"https:\/\/wholesomecode.ltd\/contact\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mnie wkurzy<\/a>, mog\u0119 rozwa\u017cy\u0107 wydanie ca\u0142o\u015bci jako samodzielnej wtyczki, jednak serce tworzonej przeze mnie wieloj\u0119zycznej wtyczki opiera si\u0119 na <code>locale<\/code>filtrze WordPress, a serce wtyczki znajduje si\u0119 w nast\u0119puj\u0105cym fragmencie kodu:<\/p>\n<pre><code>\nfunction wholesomecode_example_redefine_locale( $locale) {\n\n    $country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );\n    $lang    = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );\n\n    if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {\n        $country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );\n        $lang    = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );\n    }\n\n    if ('default' !== $country) {\n        $locale = $lang. '_'. strtoupper( $country );\n    } else {\n        $locale = $lang. '-'. $country;\n    }\n\n    return $locale;\n\n}\nadd_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );\n<\/code><\/pre>\n<p>Tada! Tw\u00f3j j\u0119zyk jest teraz ustawiony, a Twoja wieloj\u0119zyczna witryna powinna teraz prze\u0142\u0105cza\u0107 j\u0119zyki na podstawie meta strony\/witryny.<\/p>\n<h2>Czeka\u0107! Moje domy\u015blne t\u0142umaczenia WordPress Core nie dzia\u0142aj\u0105!<\/h2>\n<p>To jest problem, na kt\u00f3ry natkn\u0105\u0142em si\u0119 i nie mog\u0142em go rozgry\u017a\u0107. M\u00f3j motyw zosta\u0142 idealnie przet\u0142umaczony po dodaniu odpowiednich plik\u00f3w .mo i .po, jednak domy\u015blne t\u0142umaczenia WordPress (takie jak wiadomo\u015b\u0107 \u201eZostaw odpowied\u017a&quot; w szablonie komentarzy) nie by\u0142y t\u0142umaczone.<\/p>\n<p>Okazuje si\u0119, \u017ce rozwi\u0105zanie by\u0142o do\u015b\u0107 proste! Chocia\u017c zajmowa\u0142em si\u0119 niestandardowymi t\u0142umaczeniami domen, zapomnia\u0142em wstawi\u0107 do motywu jednego prostego fragmentu kodu: <code>load_default_textdomain()<\/code>.<\/p>\n<pre><code>\nload_default_textdomain();\n<\/code><\/pre>\n<p>Je\u015bli skr\u00f3ci\u0142em twoje debugowanie o kilka godzin dzi\u0119ki tej \u201ejednej dziwnej wskaz\u00f3wce&#8221;, nie ma za co!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Istnieje kilka fantastycznych wieloj\u0119zycznych wtyczek do WordPressa, jednak w przypadku jednego projektu klienta potrzebowa\u0142em czego\u015b znacznie bardziej elastycznego, poniewa\u017c ten konkretny klient musia\u0142 zaspokoi\u0107 kilka &#8230;<\/p>\n","protected":false},"author":1,"featured_media":224116,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,897,845,866],"tags":[1169],"class_list":["post-228159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228159"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228159\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224116"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}