{"id":306581,"date":"2026-05-14T10:33:41","date_gmt":"2026-05-14T10:33:41","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/zebratranslate\/"},"modified":"2026-05-14T10:30:56","modified_gmt":"2026-05-14T10:30:56","slug":"ipollama","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ipollama\/","author":22020113,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.1","stable_tag":"1.3.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"iPoLlama \u2014 AI Translation Editor","header_author":"ipetru21","header_description":"Manage translations for WordPress core, plugins, and themes. Supports Ollama AI automatic translation.","assets_banners_color":"","last_updated":"2026-05-14 10:30:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/ipollama\/","header_author_uri":"https:\/\/profiles.wordpress.org\/ipetru21\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.1":{"tag":"1.3.1","author":"ipetru21","date":"2026-05-14 10:30:56"}},"upgrade_notice":{"1.3.0":"<p>Plugin renamed to iPoLlama. The plugin slug changes to <code>ipollama<\/code>. Settings are stored under new option names (<code>ipollama_settings<\/code>). Please deactivate the old version before activating this one.<\/p>","1.2.0":"<p>Plugin renamed to PoTranslate. The plugin slug changes to <code>po-translate<\/code>. Settings are stored under new option names (<code>potrans_settings<\/code>). Please deactivate the old version before activating this one.<\/p>","1.1.0":"<p>Adds bulk auto-translation for entire plugins and themes. Requires Ollama enabled in Settings to use the new auto-translate buttons.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard overview showing translation progress across all plugins and themes.","2":"Translation editor with inline editing, status badges, and optional AI translation button.","3":"Settings page \u2014 Ollama configuration with live connection test and model selection."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2353,2343,226976,2344,2333],"plugin_category":[48],"plugin_contributors":[262890],"plugin_business_model":[],"class_list":["post-306581","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-mo","plugin_tags-ollama","plugin_tags-po","plugin_tags-translation","plugin_category-language-tools","plugin_contributors-ipetru21","plugin_committers-ipetru21"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/ipollama.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>iPoLlama gives you full control over WordPress translations without leaving your admin panel. Browse, edit, add, and delete translation strings for any installed plugin, theme, or WordPress core. Optionally connect to a locally running Ollama instance for AI-powered automatic translation.<\/p>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li>Browse and edit translations for any installed plugin or theme<\/li>\n<li>Manage WordPress core translations<\/li>\n<li>Add, edit, and delete individual translation entries (.po\/.mo files)<\/li>\n<li><strong>Safe Mode<\/strong> (recommended): Store translations in the WordPress languages directory (<code>wp-content\/languages\/<\/code>), keeping original plugin and theme files completely untouched \u2014 translations survive plugin and theme updates<\/li>\n<li><strong>Direct Mode<\/strong>: Edit translation files inside the plugin or theme directory<\/li>\n<li><strong>Ollama AI Integration<\/strong>: Connect to a locally running Ollama instance to auto-translate strings (optional, disabled by default \u2014 all communication stays on your local machine)<\/li>\n<li><strong>Bulk auto-translation<\/strong>: Translate all untranslated strings for any plugin or theme in one operation, with live progress bar<\/li>\n<li>Supports English (en_US), Romanian (ro_RO), and Russian (ru_RU) locales<\/li>\n<li>Clean, WordPress-native admin interface<\/li>\n<li>Works with standard <code>.po<\/code> and <code>.mo<\/code> gettext files<\/li>\n<\/ul>\n\n<p><strong>Translation modes explained:<\/strong><\/p>\n\n<p><em>Safe Mode<\/em> stores your translations inside <code>wp-content\/languages\/plugins\/<\/code> and <code>wp-content\/languages\/themes\/<\/code>. WordPress loads from this location first, so your translations take effect immediately and are never overwritten by plugin or theme updates.<\/p>\n\n<p><em>Direct Mode<\/em> saves translation files inside the plugin or theme's own <code>languages\/<\/code> folder. This is useful when you control the plugin and want to ship translations with it, but translations may be overwritten on updates from the plugin author.<\/p>\n\n<p><strong>Ollama AI Translation (optional):<\/strong><\/p>\n\n<p>If you have <a href=\"https:\/\/ollama.com\">Ollama<\/a> installed and running locally, iPoLlama can connect to it for automatic AI-powered translation using local LLM models (such as Llama 3, Mistral, etc.). This feature is completely optional and disabled by default. When enabled, the plugin sends translation requests only to the Ollama URL you configure (default: <code>http:\/\/localhost:11434<\/code>). No data is sent to any external server or third-party AI service.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin can optionally connect to a locally running <strong>Ollama<\/strong> instance for AI-powered translation. This connection is:<\/p>\n\n<ul>\n<li><strong>Disabled by default<\/strong> \u2014 must be manually enabled in Settings.<\/li>\n<li><strong>User-configured<\/strong> \u2014 you set the URL (default: <code>http:\/\/localhost:11434<\/code>).<\/li>\n<li><strong>Local only<\/strong> \u2014 Ollama runs on your own machine or server; no data is sent to any external server or third party.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/ollama.com\">Ollama website<\/a> | <a href=\"https:\/\/ollama.com\/privacy\">Ollama privacy<\/a><\/p>\n\n<p>No other external services are contacted by this plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>ipollama<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install directly through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>iPoLlama<\/strong> in the left admin menu.<\/li>\n<li>Select a plugin or theme, choose a language, and start editing translations.<\/li>\n<\/ol>\n\n<p><strong>Optional: Enable Ollama AI translation<\/strong><\/p>\n\n<ol>\n<li>Install and start <a href=\"https:\/\/ollama.com\">Ollama<\/a> on your local machine or server.<\/li>\n<li>Pull at least one language model (e.g. <code>ollama pull llama3<\/code>).<\/li>\n<li>In WordPress, go to <strong>iPoLlama &rarr; Settings<\/strong>.<\/li>\n<li>Enable Ollama, enter the server URL, click <strong>Test connection<\/strong>, then select a model.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20my%20translations%20survive%20plugin%20and%20theme%20updates%3F\"><h3>Will my translations survive plugin and theme updates?<\/h3><\/dt>\n<dd><p>Yes \u2014 if you use <strong>Safe Mode<\/strong> (the default). Translations are stored in <code>wp-content\/languages\/plugins\/<\/code> or <code>wp-content\/languages\/themes\/<\/code>, which WordPress always checks first and which are never touched by plugin or theme updates.<\/p><\/dd>\n<dt id=\"what%20is%20a%20.po%20file%20and%20a%20.mo%20file%3F\"><h3>What is a .po file and a .mo file?<\/h3><\/dt>\n<dd><p>.po files are human-readable text files containing translation strings. <code>.mo<\/code> files are binary compilations of <code>.po<\/code> files that WordPress reads at runtime. iPoLlama handles both automatically \u2014 when you save a translation, both files are updated.<\/p><\/dd>\n<dt id=\"what%20is%20a%20.pot%20file%3F\"><h3>What is a .pot file?<\/h3><\/dt>\n<dd><p>A <code>.pot<\/code> file (Portable Object Template) is a template file containing all translatable strings from a plugin or theme, with empty translations. iPoLlama reads <code>.pot<\/code> files to show you all available strings to translate. If a plugin or theme does not include a <code>.pot<\/code> file, only strings that already have a translation entry will be shown.<\/p><\/dd>\n<dt id=\"what%20is%20ollama%3F\"><h3>What is Ollama?<\/h3><\/dt>\n<dd><p><a href=\"https:\/\/ollama.com\">Ollama<\/a> is a free, open-source tool for running large language models (LLMs) locally on your own computer or server. iPoLlama can use it to automatically suggest translations using models like Llama 3, Mistral, and others. Ollama must be installed and running separately \u2014 iPoLlama only connects to the URL you configure.<\/p><\/dd>\n<dt id=\"does%20ipollama%20send%20my%20content%20to%20external%20services%3F\"><h3>Does iPoLlama send my content to external services?<\/h3><\/dt>\n<dd><p>Only if you enable Ollama. When Ollama is enabled, translation strings are sent to the Ollama URL you configure \u2014 by default <code>http:\/\/localhost:11434<\/code>, which is your local machine. No data is ever sent to Anthropic, OpenAI, or any other third-party AI service.<\/p><\/dd>\n<dt id=\"which%20languages%20are%20supported%20for%20the%20plugin%20interface%3F\"><h3>Which languages are supported for the plugin interface?<\/h3><\/dt>\n<dd><p>The plugin interface is available in English and Romanian. Russian locale support is provided for managing translations of your other plugins and themes.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20plugin%20to%20translate%20ipollama%20itself%3F\"><h3>Can I use this plugin to translate iPoLlama itself?<\/h3><\/dt>\n<dd><p>Yes. Like any other plugin, you can select iPoLlama as the translation source and translate its own strings.<\/p><\/dd>\n<dt id=\"do%20i%20need%20ollama%20to%20use%20ipollama%3F\"><h3>Do I need Ollama to use iPoLlama?<\/h3><\/dt>\n<dd><p>No. Ollama is entirely optional. The plugin is fully functional for browsing, editing, adding, and deleting translations without it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed hardcoded <code>ABSPATH . 'wp-includes\/languages'<\/code> path \u2014 now uses <code>ABSPATH . WPINC . '\/languages'<\/code> for better WordPress compatibility.<\/li>\n<li>Replaced generic admin menu slug <code>potranslate<\/code> with plugin-specific <code>ipollama<\/code> slug.<\/li>\n<li>Renamed JavaScript localization object from <code>PoTrans<\/code> to <code>IPoLlama<\/code> (also fixes a functional bug where the JS file was not receiving localized data).<\/li>\n<li>Renamed all legacy CSS classes, HTML IDs, GET\/POST parameters, and PHP local variables from <code>zt-*<\/code> \/ <code>zt_*<\/code> prefixes (remnants of previous plugin names) to <code>ipollama-*<\/code> \/ <code>ipollama_*<\/code> for full naming consistency.<\/li>\n<li>Added <code>wp_unslash()<\/code> to <code>$_GET['paged']<\/code> sanitization.<\/li>\n<li>Fixed undefined constant <code>ZEBRATRANSLATE_VERSION<\/code> reference in dashboard view \u2014 now correctly uses <code>IPOLLAMA_VERSION<\/code>.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Renamed plugin to iPoLlama \u2014 AI Translation Editor to comply with WordPress.org naming guidelines (distinctive slug: <code>ipollama<\/code>).<\/li>\n<li>Updated all internal prefixes from <code>potrans_<\/code> to <code>ipollama_<\/code> (functions, options, AJAX actions, script handles).<\/li>\n<li>Updated all class names from <code>PoTrans_*<\/code> to <code>IPoLlama_*<\/code>.<\/li>\n<li>Updated main plugin file from <code>po-translate.php<\/code> to <code>ipollama.php<\/code>.<\/li>\n<li>Updated text domain from <code>po-translate<\/code> to <code>ipollama<\/code>.<\/li>\n<li>Updated database option keys from <code>potrans_settings<\/code>\/<code>potrans_version<\/code> to <code>ipollama_settings<\/code>\/<code>ipollama_version<\/code>.<\/li>\n<li>Updated admin menu slugs from <code>potranslate*<\/code> to <code>ipollama*<\/code>.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed plugin from ZebraTranslate to PoTranslate to comply with WordPress.org trademark guidelines.<\/li>\n<li>Updated all internal prefixes from <code>zt_<\/code> to <code>potrans_<\/code> (functions, options, AJAX actions, script handles).<\/li>\n<li>Updated all class names from <code>ZebraTranslate_*<\/code> to <code>PoTrans_*<\/code>.<\/li>\n<li>Updated main plugin file from <code>zebratranslate.php<\/code> to <code>po-translate.php<\/code>.<\/li>\n<li>Updated text domain from <code>zebratranslate<\/code> to <code>po-translate<\/code>.<\/li>\n<li>Updated database option keys from <code>zt_settings<\/code>\/<code>zt_version<\/code> to <code>potrans_settings<\/code>\/<code>potrans_version<\/code>.<\/li>\n<li>Updated admin menu slugs from <code>zebratranslate*<\/code> to <code>potranslate*<\/code>.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li><strong>New:<\/strong> Bulk auto-translation \u2014 select any plugin or theme and automatically translate all untranslated strings in one operation.<\/li>\n<li><strong>New:<\/strong> Bulk auto-translate button added to the Dashboard next to each source with untranslated strings (visible when Ollama is enabled).<\/li>\n<li><strong>New:<\/strong> \"Auto-translate all\" button added to the Translations page toolbar.<\/li>\n<li><strong>New:<\/strong> Live progress bar with counter (<code>12 \/ 47 strings translated<\/code>) and current string display during bulk translation.<\/li>\n<li><strong>New:<\/strong> Error recovery during bulk translation \u2014 on failure, a \"Continue\" button skips the failed string and resumes, or \"Stop\" cancels the operation.<\/li>\n<li><strong>New:<\/strong> Cancel button available at any point during bulk translation.<\/li>\n<li><strong>New:<\/strong> \"Bulk save mode\" setting \u2014 choose between saving after each string (safer) or saving all at the end in a single batch (faster).<\/li>\n<li><strong>New:<\/strong> Language selector in the bulk translation modal for choosing the target locale per operation.<\/li>\n<li><strong>New:<\/strong> <code>build.sh<\/code> script for generating a versioned <code>.zip<\/code> archive ready for WordPress installation.<\/li>\n<li><strong>Fix:<\/strong> <code>$_POST['strings']<\/code> unslash pattern corrected to satisfy WordPress coding standards (PHPCS).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Translation management for installed plugins, themes, and WordPress core.<\/li>\n<li>Safe mode: stores translations in the WordPress languages directory.<\/li>\n<li>Direct mode: stores translations inside plugin\/theme directories.<\/li>\n<li>Ollama AI auto-translation integration (optional, disabled by default).<\/li>\n<li>Supports English, Romanian, and Russian locales.<\/li>\n<li>Inline translation editor with search, pagination, and bulk save.<\/li>\n<\/ul>","raw_excerpt":"Manage translations for WordPress core, plugins, and themes directly from your admin panel. Optional Ollama AI auto-translation support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/306581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=306581"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ipetru21"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=306581"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=306581"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=306581"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=306581"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=306581"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=306581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}