release: v1.2.1
This commit is contained in:
parent
4f7bbeb57a
commit
a1e0ce612f
22 changed files with 2746 additions and 190 deletions
|
|
@ -3,7 +3,7 @@
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
🇬🇧 [English version → README.md](README.md)
|
🇬🇧 [English version → README.md](README.md)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
🇩🇪 [Deutsche Version → README.de.md](README.de.md)
|
🇩🇪 [Deutsche Version → README.de.md](README.de.md)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
* Plugin Name: BreznGEO
|
* Plugin Name: BreznGEO
|
||||||
* Plugin URI: https://brezngeo.com/
|
* Plugin URI: https://brezngeo.com/
|
||||||
* Description: AI-powered meta descriptions, GEO structured data, and llms.txt for WordPress.
|
* Description: AI-powered meta descriptions, GEO structured data, and llms.txt for WordPress.
|
||||||
* Version: 1.2.0
|
* Version: 1.2.1
|
||||||
* Requires at least: 6.0
|
* Requires at least: 6.0
|
||||||
* Requires PHP: 8.0
|
* Requires PHP: 8.0
|
||||||
* Author: NoSchmarrn.dev
|
* Author: NoSchmarrn.dev
|
||||||
|
|
@ -18,7 +18,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
define( 'BREZNGEO_VERSION', '1.2.0' );
|
define( 'BREZNGEO_VERSION', '1.2.1' );
|
||||||
define( 'BREZNGEO_FILE', __FILE__ );
|
define( 'BREZNGEO_FILE', __FILE__ );
|
||||||
define( 'BREZNGEO_DIR', plugin_dir_path( __FILE__ ) );
|
define( 'BREZNGEO_DIR', plugin_dir_path( __FILE__ ) );
|
||||||
define( 'BREZNGEO_URL', plugin_dir_url( __FILE__ ) );
|
define( 'BREZNGEO_URL', plugin_dir_url( __FILE__ ) );
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Admin;
|
namespace BreznGEO\Admin;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
use BreznGEO\Helpers\KeyVault;
|
use BreznGEO\Helpers\KeyVault;
|
||||||
|
|
||||||
class SettingsPage {
|
class SettingsPage {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO;
|
namespace BreznGEO;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class Core {
|
class Core {
|
||||||
private static ?Core $instance = null;
|
private static ?Core $instance = null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Helpers;
|
namespace BreznGEO\Helpers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class BulkQueue {
|
class BulkQueue {
|
||||||
private const LOCK_KEY = 'brezngeo_bulk_running';
|
private const LOCK_KEY = 'brezngeo_bulk_running';
|
||||||
private const LOCK_TTL = 900; // 15 minutes
|
private const LOCK_TTL = 900; // 15 minutes
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Helpers;
|
namespace BreznGEO\Helpers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class FallbackMeta {
|
class FallbackMeta {
|
||||||
private const MIN = 150;
|
private const MIN = 150;
|
||||||
private const MAX = 160;
|
private const MAX = 160;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Helpers;
|
namespace BreznGEO\Helpers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obfuscates API keys for database storage using XOR with a derived WP-salt key.
|
* Obfuscates API keys for database storage using XOR with a derived WP-salt key.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Helpers;
|
namespace BreznGEO\Helpers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class TokenEstimator {
|
class TokenEstimator {
|
||||||
/**
|
/**
|
||||||
* Pricing per 1k tokens [provider][model][input|output]
|
* Pricing per 1k tokens [provider][model][input|output]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Providers;
|
namespace BreznGEO\Providers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class AnthropicProvider implements ProviderInterface {
|
class AnthropicProvider implements ProviderInterface {
|
||||||
private const API_URL = 'https://api.anthropic.com/v1/messages';
|
private const API_URL = 'https://api.anthropic.com/v1/messages';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Providers;
|
namespace BreznGEO\Providers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class GeminiProvider implements ProviderInterface {
|
class GeminiProvider implements ProviderInterface {
|
||||||
private const API_BASE = 'https://generativelanguage.googleapis.com/v1beta/models/';
|
private const API_BASE = 'https://generativelanguage.googleapis.com/v1beta/models/';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Providers;
|
namespace BreznGEO\Providers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class GrokProvider implements ProviderInterface {
|
class GrokProvider implements ProviderInterface {
|
||||||
private const API_URL = 'https://api.x.ai/v1/chat/completions';
|
private const API_URL = 'https://api.x.ai/v1/chat/completions';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Providers;
|
namespace BreznGEO\Providers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
class OpenAIProvider implements ProviderInterface {
|
class OpenAIProvider implements ProviderInterface {
|
||||||
private const API_URL = 'https://api.openai.com/v1/chat/completions';
|
private const API_URL = 'https://api.openai.com/v1/chat/completions';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO\Providers;
|
namespace BreznGEO\Providers;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
interface ProviderInterface {
|
interface ProviderInterface {
|
||||||
/** Unique machine-readable ID, e.g. 'openai' */
|
/** Unique machine-readable ID, e.g. 'openai' */
|
||||||
public function getId(): string;
|
public function getId(): string;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
namespace BreznGEO;
|
namespace BreznGEO;
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
use BreznGEO\Providers\ProviderInterface;
|
use BreznGEO\Providers\ProviderInterface;
|
||||||
|
|
||||||
class ProviderRegistry {
|
class ProviderRegistry {
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -18,9 +18,6 @@ msgstr ""
|
||||||
"X-Domain: brezngeo\n"
|
"X-Domain: brezngeo\n"
|
||||||
|
|
||||||
#: includes/Admin/AdminMenu.php:11
|
#: includes/Admin/AdminMenu.php:11
|
||||||
msgid "BreznGEO"
|
|
||||||
msgstr "BreznGEO"
|
|
||||||
|
|
||||||
#: includes/Admin/AdminMenu.php:12
|
#: includes/Admin/AdminMenu.php:12
|
||||||
msgid "BreznGEO"
|
msgid "BreznGEO"
|
||||||
msgstr "BreznGEO"
|
msgstr "BreznGEO"
|
||||||
|
|
@ -1089,3 +1086,534 @@ msgstr "Generiert GEO-optimierte Inhaltsblöcke mit KI für bessere LLM-Sichtbar
|
||||||
#: includes/Admin/views/dashboard.php
|
#: includes/Admin/views/dashboard.php
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr "Speichern"
|
msgstr "Speichern"
|
||||||
|
|
||||||
|
# --- v1.3.3 i18n pass ---
|
||||||
|
|
||||||
|
#: includes/Admin/views/dashboard.php
|
||||||
|
#: includes/Admin/AdminMenu.php
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Keyword Analysis"
|
||||||
|
msgstr "Keyword-Analyse"
|
||||||
|
|
||||||
|
#: includes/Admin/views/dashboard.php
|
||||||
|
msgid "AI-powered keyword suggestions, optimization tips, and semantic analysis."
|
||||||
|
msgstr "KI-basierte Keyword-Vorschläge, Optimierungstipps und semantische Analyse."
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "SEO Widget"
|
||||||
|
msgstr "SEO-Widget"
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "Theme outputs post title as H1 (suppresses \"no H1\" warning in editor)"
|
||||||
|
msgstr "Theme gibt Beitragstitel als H1 aus (unterdrückt \"kein H1\"-Warnung im Editor)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "Most themes render the post title as an H1 tag on the front end. Enable this to avoid false warnings in the SEO Widget when the content itself contains no H1."
|
||||||
|
msgstr "Die meisten Themes geben den Beitragstitel als H1 im Frontend aus. Aktivieren, um falsche Warnungen im SEO-Widget zu vermeiden, wenn der Inhalt selbst kein H1 enthält."
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "No AI provider active."
|
||||||
|
msgstr "Kein KI-Anbieter aktiv."
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "Meta descriptions will use the fallback method (first paragraph of the post) until an API key is configured and AI generation is enabled."
|
||||||
|
msgstr "Meta-Beschreibungen verwenden die Fallback-Methode (erster Absatz des Beitrags), bis ein API-Schlüssel konfiguriert und die KI-Generierung aktiviert ist."
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "Configure AI Provider →"
|
||||||
|
msgstr "KI-Anbieter konfigurieren →"
|
||||||
|
|
||||||
|
#: includes/Admin/views/meta.php
|
||||||
|
msgid "Fallback mode active — configure an AI provider to enable AI generation."
|
||||||
|
msgstr "Fallback-Modus aktiv — einen KI-Anbieter konfigurieren, um KI-Generierung zu aktivieren."
|
||||||
|
|
||||||
|
#: includes/Admin/views/txt.php
|
||||||
|
msgid "Clear Cache"
|
||||||
|
msgstr "Cache leeren"
|
||||||
|
|
||||||
|
#: includes/Admin/views/txt.php
|
||||||
|
msgid "URL:"
|
||||||
|
msgstr "URL:"
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "Keyword Analysis (BreznGEO)"
|
||||||
|
msgstr "Keyword-Analyse (BreznGEO)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Main Keyword"
|
||||||
|
msgstr "Haupt-Keyword"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "e.g. Passau travel guide"
|
||||||
|
msgstr "z. B. Passau Reiseführer"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Secondary Keywords"
|
||||||
|
msgstr "Neben-Keywords"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Add Keyword"
|
||||||
|
msgstr "Keyword hinzufügen"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Analyze"
|
||||||
|
msgstr "Analysieren"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Suggest Keywords"
|
||||||
|
msgstr "Keywords vorschlagen"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Showing cached results. Click \"Analyze\" to refresh."
|
||||||
|
msgstr "Gecachte Ergebnisse. Klicke \"Analysieren\" zum Aktualisieren."
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Optimization Tips"
|
||||||
|
msgstr "Optimierungstipps"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-meta-box.php
|
||||||
|
msgid "Semantic Analysis"
|
||||||
|
msgstr "Semantische Analyse"
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php (JS i18n)
|
||||||
|
msgid "Analyzing…"
|
||||||
|
msgstr "Analysiere…"
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "Please enter a main keyword."
|
||||||
|
msgstr "Bitte ein Haupt-Keyword eingeben."
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "Getting suggestions…"
|
||||||
|
msgstr "Hole Vorschläge…"
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "Getting optimization tips…"
|
||||||
|
msgstr "Hole Optimierungstipps…"
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "Running semantic analysis…"
|
||||||
|
msgstr "Semantische Analyse läuft…"
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "AI keyword features are not activated."
|
||||||
|
msgstr "KI-Keyword-Funktionen sind nicht aktiviert."
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "AI generation failed. Check provider settings."
|
||||||
|
msgstr "KI-Generierung fehlgeschlagen. Provider-Einstellungen prüfen."
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "Could not parse AI response."
|
||||||
|
msgstr "KI-Antwort konnte nicht verarbeitet werden."
|
||||||
|
|
||||||
|
#: includes/Admin/KeywordMetaBox.php
|
||||||
|
msgid "No keyword provided."
|
||||||
|
msgstr "Kein Keyword angegeben."
|
||||||
|
|
||||||
|
#: includes/Admin/SeoWidget.php
|
||||||
|
msgid "No H1 heading"
|
||||||
|
msgstr "Keine H1-Überschrift"
|
||||||
|
|
||||||
|
#: includes/Admin/SeoWidget.php
|
||||||
|
msgid "Multiple H1 headings"
|
||||||
|
msgstr "Mehrere H1-Überschriften"
|
||||||
|
|
||||||
|
#: includes/Admin/SeoWidget.php
|
||||||
|
msgid "No internal links"
|
||||||
|
msgstr "Keine internen Links"
|
||||||
|
|
||||||
|
#: includes/Admin/SeoWidget.php
|
||||||
|
msgid "internal"
|
||||||
|
msgstr "intern"
|
||||||
|
|
||||||
|
#: includes/Admin/SeoWidget.php
|
||||||
|
msgid "external"
|
||||||
|
msgstr "extern"
|
||||||
|
|
||||||
|
#: includes/Admin/SeoWidget.php
|
||||||
|
msgid "min"
|
||||||
|
msgstr "Min."
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Analysis Settings"
|
||||||
|
msgstr "Analyse-Einstellungen"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Update Mode"
|
||||||
|
msgstr "Aktualisierungsmodus"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Manual — click \"Analyze\" button"
|
||||||
|
msgstr "Manuell — Button \"Analysieren\" klicken"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Live — auto-analyze while typing"
|
||||||
|
msgstr "Live — automatisch beim Tippen analysieren"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "On Save — analyze when post is saved"
|
||||||
|
msgstr "Beim Speichern — analysieren wenn Beitrag gespeichert wird"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Target Keyword Density (%)"
|
||||||
|
msgstr "Ziel-Keyword-Dichte (%)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Recommended: 1.0–2.0%. Pass range is ±0.5% around the target."
|
||||||
|
msgstr "Empfohlen: 1,0–2,0 %. Toleranzbereich ist ±0,5 % um den Zielwert."
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Min. Occurrences (Primary)"
|
||||||
|
msgstr "Mind. Vorkommen (Primär)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Min. Occurrences (Secondary)"
|
||||||
|
msgstr "Mind. Vorkommen (Sekundär)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Live Mode Debounce (ms)"
|
||||||
|
msgstr "Live-Modus Verzögerung (ms)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Delay in milliseconds before live analysis triggers after typing stops."
|
||||||
|
msgstr "Verzögerung in Millisekunden bevor die Live-Analyse nach dem Tippen startet."
|
||||||
|
|
||||||
|
#: includes/Admin/views/keyword-settings.php
|
||||||
|
msgid "Show keyword meta box on"
|
||||||
|
msgstr "Keyword-Meta-Box anzeigen bei"
|
||||||
|
|
||||||
|
#: includes/Admin/views/bulk.php
|
||||||
|
msgid "No AI provider connected — descriptions will be generated from content without AI (fallback mode)."
|
||||||
|
msgstr "Kein KI-Anbieter verbunden — Beschreibungen werden ohne KI aus dem Inhalt generiert (Fallback-Modus)."
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Labels"
|
||||||
|
msgstr "Beschriftungen"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Styling"
|
||||||
|
msgstr "Darstellung"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Position"
|
||||||
|
msgstr "Position"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Theme"
|
||||||
|
msgstr "Theme"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Light"
|
||||||
|
msgstr "Hell"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Dark"
|
||||||
|
msgstr "Dunkel"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Minimal"
|
||||||
|
msgstr "Minimal"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Brezn"
|
||||||
|
msgstr "Brezn"
|
||||||
|
|
||||||
|
# --- Schema.org ---
|
||||||
|
|
||||||
|
#: includes/Admin/AdminMenu.php
|
||||||
|
msgid "Schema.org"
|
||||||
|
msgstr "Schema.org"
|
||||||
|
|
||||||
|
#: includes/Admin/AdminMenu.php
|
||||||
|
msgid "AI disabled"
|
||||||
|
msgstr "KI deaktiviert"
|
||||||
|
|
||||||
|
#: includes/Admin/AdminMenu.php
|
||||||
|
msgid "\xe2\x80\x94 Not configured \xe2\x80\x94"
|
||||||
|
msgstr "\xe2\x80\x94 Nicht konfiguriert \xe2\x80\x94"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema.php
|
||||||
|
msgid "BreznGEO Schema"
|
||||||
|
msgstr "BreznGEO Schema"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Schema Type"
|
||||||
|
msgstr "Schema-Typ"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "\xe2\x80\x94 No Schema \xe2\x80\x94"
|
||||||
|
msgstr "\xe2\x80\x94 Kein Schema \xe2\x80\x94"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema.php
|
||||||
|
msgid "BlogPosting / Article (with embedded Author + Image)"
|
||||||
|
msgstr "BlogPosting / Artikel (mit eingebettetem Autor + Bild)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema.php
|
||||||
|
msgid "FAQPage (from GEO Quick Overview \xe2\x80\x94 automatic)"
|
||||||
|
msgstr "FAQPage (aus GEO Schnell\xc3\xbcberblick \xe2\x80\x94 automatisch)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema.php
|
||||||
|
msgid "ImageObject (Featured Image)"
|
||||||
|
msgstr "ImageObject (Beitragsbild)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema.php
|
||||||
|
msgid "VideoObject (auto-detect YouTube/Vimeo)"
|
||||||
|
msgstr "VideoObject (YouTube/Vimeo automatisch erkennen)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Recipe"
|
||||||
|
msgstr "Rezept"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Recipe Name"
|
||||||
|
msgstr "Rezeptname"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Recipe (Metabox in Post Editor)"
|
||||||
|
msgstr "Rezept (Metabox im Beitragseditor)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Event"
|
||||||
|
msgstr "Veranstaltung"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Event Name"
|
||||||
|
msgstr "Veranstaltungsname"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Event (Metabox in Post Editor)"
|
||||||
|
msgstr "Veranstaltung (Metabox im Beitragseditor)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "HowTo Guide"
|
||||||
|
msgstr "HowTo-Anleitung"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "HowTo (Metabox in Post Editor)"
|
||||||
|
msgstr "HowTo (Metabox im Beitragseditor)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Review / Rating"
|
||||||
|
msgstr "Bewertung / Rating"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Review with Rating (Metabox in Post Editor)"
|
||||||
|
msgstr "Bewertung mit Rating (Metabox im Beitragseditor)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Guide Name"
|
||||||
|
msgstr "Anleitung Name"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Steps (one line = one step)"
|
||||||
|
msgstr "Schritte (eine Zeile = ein Schritt)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Ingredients (one per line)"
|
||||||
|
msgstr "Zutaten (eine pro Zeile)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Instructions (one step per line)"
|
||||||
|
msgstr "Anleitung (ein Schritt pro Zeile)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Prep Time (min)"
|
||||||
|
msgstr "Vorbereitungszeit (Min.)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Cook Time (min)"
|
||||||
|
msgstr "Kochzeit (Min.)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Servings"
|
||||||
|
msgstr "Portionen"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Rating (1\xe2\x80\x935)"
|
||||||
|
msgstr "Bewertung (1\xe2\x80\x935)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Reviewed Product / Service"
|
||||||
|
msgstr "Bewertetes Produkt / Dienstleistung"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Start Date"
|
||||||
|
msgstr "Startdatum"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "End Date (optional)"
|
||||||
|
msgstr "Enddatum (optional)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Location or URL"
|
||||||
|
msgstr "Ort oder URL"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Online Event"
|
||||||
|
msgstr "Online-Veranstaltung"
|
||||||
|
|
||||||
|
#: includes/Admin/views/schema-meta-box.php
|
||||||
|
msgid "Post not found."
|
||||||
|
msgstr "Beitrag nicht gefunden."
|
||||||
|
|
||||||
|
# --- Keyword Analysis Checks ---
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword Density"
|
||||||
|
msgstr "Keyword-Dichte"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in title."
|
||||||
|
msgstr "Keyword im Titel gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in title."
|
||||||
|
msgstr "Keyword nicht im Titel gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in subheading."
|
||||||
|
msgstr "Keyword in Zwischenüberschrift gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in any H2-H6."
|
||||||
|
msgstr "Keyword in keiner H2-H6 gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in URL."
|
||||||
|
msgstr "Keyword in URL gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in URL."
|
||||||
|
msgstr "Keyword nicht in URL gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in meta description."
|
||||||
|
msgstr "Keyword in Meta-Beschreibung gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in meta description."
|
||||||
|
msgstr "Keyword nicht in Meta-Beschreibung gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Meta description is empty."
|
||||||
|
msgstr "Meta-Beschreibung ist leer."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in first paragraph."
|
||||||
|
msgstr "Keyword im ersten Absatz gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in first paragraph."
|
||||||
|
msgstr "Keyword nicht im ersten Absatz gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in last paragraph."
|
||||||
|
msgstr "Keyword im letzten Absatz gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in last paragraph."
|
||||||
|
msgstr "Keyword nicht im letzten Absatz gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in excerpt."
|
||||||
|
msgstr "Keyword im Textauszug gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in excerpt."
|
||||||
|
msgstr "Keyword nicht im Textauszug gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Excerpt is empty."
|
||||||
|
msgstr "Textauszug ist leer."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in image alt text."
|
||||||
|
msgstr "Keyword im Bild-Alt-Text gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "No image contains keyword in alt text."
|
||||||
|
msgstr "Kein Bild enthält das Keyword im Alt-Text."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "No images found."
|
||||||
|
msgstr "Keine Bilder gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword found in image title or caption."
|
||||||
|
msgstr "Keyword im Bildtitel oder Beschriftung gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in any image title or caption."
|
||||||
|
msgstr "Keyword in keinem Bildtitel oder Beschriftung gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "No paragraphs found."
|
||||||
|
msgstr "Keine Absätze gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Keyword not found in content."
|
||||||
|
msgstr "Keyword nicht im Inhalt gefunden."
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "URL / Slug"
|
||||||
|
msgstr "URL / Slug"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "First Paragraph"
|
||||||
|
msgstr "Erster Absatz"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Last Paragraph"
|
||||||
|
msgstr "Letzter Absatz"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Image Alt Texts"
|
||||||
|
msgstr "Bild-Alt-Texte"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Image Title/Caption"
|
||||||
|
msgstr "Bildtitel / Beschriftung"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Excerpt"
|
||||||
|
msgstr "Textauszug"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "Meta Description"
|
||||||
|
msgstr "Meta-Beschreibung"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
msgid "FAQ"
|
||||||
|
msgstr "FAQ"
|
||||||
|
|
||||||
|
#: includes/Features/KeywordAnalysis.php
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$.1f%% (target: %2$.1f%%)"
|
||||||
|
msgstr "%1$.1f %% (Ziel: %2$.1f %%)"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "The GEO block will not be generated automatically until an API key is configured and AI generation is enabled."
|
||||||
|
msgstr "Der GEO-Block wird erst automatisch generiert, wenn ein API-Schlüssel konfiguriert und die KI-Generierung aktiviert ist."
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Variables: {title}, {content}, {language}"
|
||||||
|
msgstr "Variablen: {title}, {content}, {language}"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
#, php-format
|
||||||
|
msgid "Want to customise further? <a href=\"%s\" target=\"_blank\" rel=\"noopener\">Learn how to style the block via your theme →</a>"
|
||||||
|
msgstr "Mehr anpassen? <a href=\"%s\" target=\"_blank\" rel=\"noopener\">Erfahre, wie du den Block per Theme stylen kannst →</a>"
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Left border stripe and expand arrow colour. Leave empty for the default blue. Not used by the Minimal theme."
|
||||||
|
msgstr "Farbe des linken Rands und Expand-Pfeils. Leer lassen für Standard-Blau. Wird vom Minimal-Theme nicht verwendet."
|
||||||
|
|
||||||
|
#: includes/Admin/views/geo.php
|
||||||
|
msgid "Light \xe2\x80\x94 clean card with a blue accent. Dark \xe2\x80\x94 same for dark-mode sites. Minimal \xe2\x80\x94 borderless, left stripe only. Brezn \xe2\x80\x94 Brezn blue with diamond header pattern."
|
||||||
|
msgstr "Hell \xe2\x80\x94 klare Karte mit blauem Akzent. Dunkel \xe2\x80\x94 dasselbe f\xc3\xbcr Dark-Mode-Seiten. Minimal \xe2\x80\x94 rahmenlos, nur linker Streifen. Brezn \xe2\x80\x94 Brezn-Blau mit Rautenmuster."
|
||||||
|
|
||||||
|
#: includes/Admin/views/bulk.php
|
||||||
|
#, php-format
|
||||||
|
msgid "No AI provider connected \xe2\x80\x94 descriptions will be generated from content without AI (fallback mode). <a href=\"%s\">Configure a provider \xe2\x86\x92</a>"
|
||||||
|
msgstr "Kein KI-Anbieter verbunden \xe2\x80\x94 Beschreibungen werden ohne KI aus dem Inhalt generiert (Fallback-Modus). <a href=\"%s\">Anbieter konfigurieren \xe2\x86\x92</a>"
|
||||||
|
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
BIN
brezngeo/messages.mo
Normal file
BIN
brezngeo/messages.mo
Normal file
Binary file not shown.
|
|
@ -3,7 +3,7 @@ Contributors: mifupadev
|
||||||
Tags: seo, ai, meta description, schema, llms.txt
|
Tags: seo, ai, meta description, schema, llms.txt
|
||||||
Requires at least: 6.0
|
Requires at least: 6.0
|
||||||
Tested up to: 6.9
|
Tested up to: 6.9
|
||||||
Stable tag: 1.2.0
|
Stable tag: 1.2.1
|
||||||
Requires PHP: 8.0
|
Requires PHP: 8.0
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
@ -224,6 +224,11 @@ No data is transmitted during normal page loads or to visitors.
|
||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
|
||||||
|
= 1.2.1 =
|
||||||
|
* Security: Added ABSPATH direct access guards to all PHP class files.
|
||||||
|
* i18n: Complete German translation — all 394 UI strings now translated.
|
||||||
|
* i18n: Regenerated .po/.mo/.pot translation files.
|
||||||
|
|
||||||
= 1.2.0 =
|
= 1.2.0 =
|
||||||
* New: Keyword Analysis meta box in the post editor — checks keyword usage across title, headings, density, image alts, meta description, slug, first/last paragraph, image title/caption, and excerpt.
|
* New: Keyword Analysis meta box in the post editor — checks keyword usage across title, headings, density, image alts, meta description, slug, first/last paragraph, image title/caption, and excerpt.
|
||||||
* New: Primary and secondary keyword support with configurable minimum occurrences.
|
* New: Primary and secondary keyword support with configurable minimum occurrences.
|
||||||
|
|
@ -260,6 +265,9 @@ No data is transmitted during normal page loads or to visitors.
|
||||||
|
|
||||||
== Upgrade Notice ==
|
== Upgrade Notice ==
|
||||||
|
|
||||||
|
= 1.2.1 =
|
||||||
|
Adds ABSPATH security guards to all files and completes German translation.
|
||||||
|
|
||||||
= 1.2.0 =
|
= 1.2.0 =
|
||||||
Adds Keyword Analysis: real-time keyword checks in the post editor with optional AI-powered suggestions.
|
Adds Keyword Analysis: real-time keyword checks in the post editor with optional AI-powered suggestions.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue