{"result":{"depiction_url":null,"edges":{"hasreference":{"objects":[{"created":"2026-10-07T11:13:50Z","object_id":{"id":1380,"is_a":["text","documentation","reference","template_tag"],"name":"doc_template_tag_tag_trans","title":"trans","uri":"https:\/\/zotonic.com\/id\/1380"},"seq":1},{"created":"2026-10-07T11:13:50Z","object_id":{"id":3060,"is_a":["text","documentation","adminguide"],"name":"admin_enable_languages","title":{"_type":"trans","tr":{"en":"Add a language and choose its availability"}},"uri":"https:\/\/zotonic.com\/id\/3060"},"seq":2}],"predicate":{"id":2774,"is_a":["meta","predicate"],"name":"hasreference","title":{"_type":"trans","tr":{"en":"Documentation reference"}},"uri":"https:\/\/zotonic.com\/id\/hasreference"}},"references":{"objects":[{"created":"2020-05-30T05:47:21Z","object_id":{"id":1410,"is_a":["text","documentation","reference","module"],"name":"doc_module_mod_translation","title":"mod_translation","uri":"https:\/\/zotonic.com\/id\/1410"},"seq":1000000},{"created":"2020-05-30T05:47:21Z","object_id":{"id":1279,"is_a":["text","documentation"],"name":"doc_glossary","title":"Glossary","uri":"https:\/\/zotonic.com\/id\/1279"},"seq":1000000},{"created":"2020-05-30T05:47:21Z","object_id":{"id":1411,"is_a":["text","documentation","developerguide"],"name":"doc_developerguide_docker","title":{"_type":"trans","tr":{"en":"Install with Docker or Podman"}},"uri":"https:\/\/zotonic.com\/id\/1411"},"seq":1000000}],"predicate":{"id":332,"is_a":["meta","predicate"],"name":"references","title":{"_type":"trans","tr":{"en":"References"}},"uri":"https:\/\/zotonic.com\/id\/references"}},"refers":{"objects":[{"created":"2026-10-07T11:13:00Z","object_id":{"id":1409,"is_a":["text","documentation","developerguide"],"name":"doc_developerguide_translation","title":{"_type":"trans","tr":{"en":"Translate interface text"}},"uri":"https:\/\/zotonic.com\/id\/1409"},"seq":1000000},{"created":"2026-10-07T11:13:00Z","object_id":{"id":2792,"is_a":["media","image"],"name":"admin_screenshot_languages","title":{"_type":"trans","tr":{"en":"admin screenshot languages"}},"uri":"https:\/\/zotonic.com\/id\/2792"},"seq":1000000}],"predicate":{"id":2409,"is_a":["meta","predicate"],"name":"refers","title":{"_type":"trans","tr":{"en":"Refers"}},"uri":"https:\/\/zotonic.com\/id\/refers"}},"relation":{"objects":[{"created":"2026-10-07T11:13:50Z","object_id":{"id":2944,"is_a":["text","documentation","developerguide"],"name":"developer_resource_links","title":{"_type":"trans","tr":{"en":"Link to resources and dispatch routes"}},"uri":"https:\/\/zotonic.com\/id\/2944"},"seq":1}],"predicate":{"id":303,"is_a":["meta","predicate"],"name":"relation","title":{"_type":"trans","tr":{"nl":"Relatie","en":"Relation"}},"uri":"http:\/\/purl.org\/dc\/terms\/relation"}},"subject":{"objects":[{"created":"2026-10-07T11:13:50Z","object_id":{"id":2554,"is_a":["categorization","keyword","keyword_information_type"],"name":"zotonic_topic_how_to_guide","title":"How-to guide","uri":"https:\/\/zotonic.com\/id\/2554"},"seq":1},{"created":"2026-09-15T14:23:21Z","object_id":{"id":2564,"is_a":["categorization","keyword","keyword_audience"],"name":"zotonic_topic_backend_developer","title":"Backend developer","uri":"https:\/\/zotonic.com\/id\/2564"},"seq":2},{"created":"2026-09-15T14:23:47Z","object_id":{"id":2588,"is_a":["categorization","keyword","keyword_domain"],"name":"zotonic_topic_localization_and_translation","title":"Localization and translation","uri":"https:\/\/zotonic.com\/id\/2588"},"seq":3},{"created":"2026-09-15T14:23:23Z","object_id":{"id":2563,"is_a":["categorization","keyword","keyword_audience"],"name":"zotonic_topic_frontend_developer","title":"Frontend developer","uri":"https:\/\/zotonic.com\/id\/2563"},"seq":4},{"created":"2026-09-15T14:24:20Z","object_id":{"id":2620,"is_a":["categorization","keyword","keyword_architecture"],"name":"zotonic_topic_template","title":"Template","uri":"https:\/\/zotonic.com\/id\/2620"},"seq":5},{"created":"2026-09-15T14:25:07Z","object_id":{"id":2669,"is_a":["categorization","keyword","keyword_data_type"],"name":"zotonic_topic_translated_text","title":"Translated text","uri":"https:\/\/zotonic.com\/id\/2669"},"seq":6},{"created":"2026-09-15T14:23:15Z","object_id":{"id":2556,"is_a":["categorization","keyword","keyword_information_type"],"name":"zotonic_topic_explanation","title":"Explanation","uri":"https:\/\/zotonic.com\/id\/2556"},"seq":7},{"created":"2026-09-15T14:24:59Z","object_id":{"id":2641,"is_a":["categorization","keyword","keyword_task"],"name":"zotonic_topic_render","title":"Render","uri":"https:\/\/zotonic.com\/id\/2641"},"seq":8}],"predicate":{"id":308,"is_a":["meta","predicate"],"name":"subject","title":{"_type":"trans","tr":{"en":"Keyword"}},"uri":"http:\/\/purl.org\/dc\/elements\/1.1\/subject"}}},"id":1409,"is_a":["text","documentation","developerguide"],"links":[{"rel":"self","target":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/1409"},{"rel":"hub","target":"https:\/\/zotonic.com\/.zotonic\/websub"}],"medium":null,"medium_url":null,"name":"doc_developerguide_translation","page_url":{"en":"https:\/\/zotonic.com\/docs\/1409\/translate-interface-text","x-default":"https:\/\/zotonic.com\/docs\/1409\/translate-interface-text"},"preview_url":null,"resource":{"version":42,"pivot_location_lat":null,"title":{"_type":"trans","tr":{"en":"Translate interface text"}},"is_authoritative":true,"body":{"_type":"trans","tr":{"en":"<aside><p>Resource content translations are separate from interface strings.<\/p><\/aside>\n<p>Write the source text in English and mark static interface text for translation.<\/p>\n<pre class=\"notranslate\"><code class=\"notranslate language-django\">&lt;button type=&quot;submit&quot;&gt;{_ Save changes _}&lt;\/button&gt;\n<\/code><\/pre>\n<p>Use a translated argument when passing text into an include, for example <code>title=_&quot;Latest news&quot;<\/code>.<\/p>\n<p>Generate the site&#39;s POT file when you are updating translations, then merge it into the PO files and translate the new messages. Validate changed PO files with <code>msgfmt --check<\/code>. Test a second language in the browser, including links and form errors.<\/p>\n<h2>Extract translation messages<\/h2>\n<aside><p>Extracting messages does not translate content resources stored in the database.<\/p><\/aside>\n<p>After changing translatable template text in a site, generate its message catalog:<\/p>\n<pre class=\"notranslate\"><code class=\"notranslate language-sh\">bin\/zotonic pot garden\n<\/code><\/pre>\n<p>This connects to the running node and writes translation source files. Use <code>pot zotonic<\/code> only when intentionally updating the core catalogs according to the project&#39;s contribution workflow.<\/p>\n<p>Review the resulting POT changes, merge them into the appropriate PO files, and translate new messages. Validate a PO file with gettext tooling:<\/p>\n<pre class=\"notranslate\"><code class=\"notranslate language-sh\">msgfmt --check --output-file=\/dev\/null path\/to\/language.po\n<\/code><\/pre>\n<p>Check both the interface text and the selected content language in the browser. See <a href=\"\/id\/1409\">Translate interface text<\/a>.<\/p>\n<h2>Add a language and choose its availability<\/h2>\n<p><strong>Access needed:<\/strong> Site administrator allowed to manage languages.<\/p>\n<ol><li>Open <strong>Structure → Translation<\/strong> and choose <strong>Add language<\/strong>.<\/li><li>Select the intended language and use <strong>Editable<\/strong> while preparing its content.<\/li><li>Ask editors to translate the main pages, menu labels, and essential messages.<\/li><li>Check a representative page in that language and verify fallback behaviour for missing translations.<\/li><li>Set the language to <strong>View<\/strong> when it should be available to visitors.<\/li><li>Check the language order: the first <strong>View<\/strong> language is the default. Test the language switcher and incoming links.<\/li><\/ol>\n<!-- z-media 2792 {\"alt\":\"Languages overview showing View, Editable, and Off choices and the drag handles for ordering.\",\"caption\":\"-\",\"size\":\"large\"} -->\n<p>This example shows English as the first View language and Arabic as Editable. Use the drag handles to change the preference order.<\/p>\n<p>Changing the default can affect URLs and what new visitors see. Check redirects and search-facing links with the developer before a major language change.<\/p>\n<p>Use <strong>Editable<\/strong> when hiding a language while retaining an editing workflow. The <strong>Off<\/strong> option is not an archive switch: the admin warns that subsequent edits can lose translations for an off language. Preserve needed translations before disabling it.<\/p>"}},"is_mailing_opt_out":false,"slug":"translate-interface-text","is_protected":false,"visible_for":0,"tz":"UTC","language":["en"],"is_featured":false,"content_group_id":{"id":339,"is_a":["meta","content_group"],"name":"default_content_group","title":{"_type":"trans","tr":{"en":"Default Content Group"}},"uri":"https:\/\/zotonic.com\/id\/default_content_group"},"category_id":{"id":317,"is_a":["meta","category"],"name":"developerguide","title":"Developer guide","uri":"https:\/\/zotonic.com\/id\/developerguide"},"publication_start":"2022-02-15T10:01:00Z","is_website_redirect":false,"github_url":"https:\/\/github.com\/zotonic\/zotonic\/tree\/master\/doc\/developer-guide\/translation.rst","pivot_location_lng":null,"name":"doc_developerguide_translation","is_unfindable":false,"is_published":true,"doc_editorial_edges":{"hasreference":[1380,3060],"relation":[2944],"subject":[2554]},"summary":{"_type":"trans","tr":{"en":"Write the source text in English and mark static interface text for translation."}},"pivot_geocode":null,"custom_slug":false,"created":"2020-05-30T05:47:21Z","uri":null,"date_is_all_day":false,"is_dependent":false,"is_page_path_multiple":false,"translation_status":{"en":""},"publication_end":"9999-08-17T12:00:00Z","modifier_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"privacy":0,"doc_editorial_bundle":true,"creator_id":{"id":336,"is_a":["person","robot"],"name":"gitbot","title":"Git","uri":"https:\/\/zotonic.com\/id\/336"},"seo_noindex":false,"modified":"2026-10-07T11:14:03Z","title_slug":{"_type":"trans","tr":{"en":"translate-interface-text"}}},"uri":"https:\/\/zotonic.com\/id\/1409","uri_template":"https:\/\/zotonic.com\/id\/:id","websub":{"hub":"https:\/\/zotonic.com\/.zotonic\/websub","topic":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/1409"}},"status":"ok"}