[Gelöst] Teilweise falsche Zuordnung der Inhalte zu den Sprachen
Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.
Problem: Der Klient hat Inhalte ursprünglich auf Deutsch erstellt und später WPML verwendet, um die Website auf Englisch zu übersetzen. Nach der Umstellung der Originalsprache auf Englisch wurden die bereits erstellten deutschen Inhalte fälschlicherweise als Originalinhalte betrachtet. Der Klient möchte wissen, wie er die Zuordnung von Bildern, Tags und anderen Elementen zur richtigen Sprache korrigieren kann, sodass alle Elemente als Originalsprache Englisch sind. Solution: Wir haben erklärt, dass die Standardsprache von WPML keinen Einfluss auf die Sprache hat, in der die originalen Inhalte erstellt wurden. Um die Zuordnung manuell zu korrigieren, sollte der Klient eine Übersetzung im WordPress Editor öffnen und in der rechten Seitenleiste den Eintrag "This is a translation of:" auf "None" setzen und die Seite speichern. Dadurch wird die Übersetzung nicht mehr mit dem originalen Inhalt verbunden. Anschließend kann der Klient die Option "Connect with translations" verwenden, um den Inhalt mit einem anderen Inhalt in einer anderen Sprache zu verbinden. Ein Dialog wird erscheinen, in welchem festgelegt werden kann, welcher Inhalt nun der neue originale Inhalt sein soll. Mehr Informationen finden Sie unter: https://wpml.org/faq/how-to-link-already-translated-pages/
Falls diese Lösung veraltet ist oder nicht auf Ihren Fall zutrifft, empfehlen wir Ihnen, ein neues Support-Ticket zu eröffnen. Wir empfehlen auch, die Seite mit bekannten Problemen (https://wpml.org/known-issues/) zu überprüfen, die Version der dauerhaften Lösung zu verifizieren und zu bestätigen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben.
Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.
Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.
Hintergrund des Themas:
Ich habe eine Website entwickelt, die ursprünglich auf Deutsch war. Nach der Installation von WPML gab es Probleme mit der Zuordnung der Inhalte zu den Sprachen. Ich habe WPML deaktiviert und die Seitensprache auf Englisch umgestellt, um alle Inhalte in Englisch anzulegen. Nach der Reaktivierung von WPML habe ich Englisch als Originalsprache und Deutsch als Zweitsprache festgelegt. Die zuvor erstellten Seiten wurden als 'Deutsche Version' betrachtet und manuell ins Englische als Originalsprache verschoben.
Die Symptome:
Bilder, Tags und andere Elemente sind fälschlicherweise der deutschen Sprache zugeordnet, obwohl sie eigentlich der englischen Sprache zugeordnet werden sollten.
Fragen:
Wie kann ich die bestehend Zuordnung von Bildern, Tags und anderen Elementen zur richtigen Sprache korrigieren, sodass alle Elemente als Originalsprache englisch sind?
Die Standardsprache von WPML hat keinen Einfluss auf die Sprache in welcher die originalen Inhalte erstellt wurden.
Wenn zuerst Inhalt auf Deutsch erstellt wurden, dann bleibt dies die Ausgangssprache und man sollte in dem Fall weiterhin vom Deutschen aus in die anderen Sprachen übersetzen.
Hallo Andreas,
gewünscht und zukünftig ist aber die Englisch die Ausgangssprache.
Gibt es eine Möglichkeit als Massenupdate, die Elemente von der deutschen Ausgangssprache in die englische zu überführen?
Hallo Andreas,
das es manuell pro Datei geht, habe ich bereits in der Anfrage geschrieben und wie beschrieben auch durchgeführt. Es geht jedoch um Massenupdates, z.B. bei den über 650 Bildern... dies manuell zu machen wäre sehr tragisch.
Tut mir leid, aber es gibt dazu keine einfache Lösung.
Man könnte in dem Fall nur per Code eingreifen und die Quellsprache der Inhalt direkt in der Datenbank ändern. Die Übersetzungen muss man danach aber erneut anlegen.
Beispiel bei dem die Ausgangssprache von 'de' auf 'en' umgestellt wird:
/**
* Custom function to bulk update the source language for specified post types
*
* Use a plugin such as Code Snippets or Toolset Types to run one time only
*
* @param string $source_from Language code to convert from
* @param string $source_to Language code to convert to
* @param array $content_types Array of post types to convert, defaults to ['post']
*
* Example: convert the source language of pages from German to English
* wpmlsupp_bulk_update_source_lang( 'de', 'en', ['page'] );
*/
function wpmlsupp_bulk_update_source_lang($source_from, $source_to, $content_types = ['post'])
{
if (isset($source_from) && isset($source_to) && is_array($content_types)) {
// switch to current source language and get posts in that language
$current_language = apply_filters('wpml_current_language', null);
do_action('wpml_switch_language', $source_from);
$contents = get_posts([
'numberposts' => -1,
'post_status' => 'any',
'post_type' => $content_types,
'suppress_filters' => false
]);
foreach ($contents as $content) {
// what's the trid for this content
$wpml_element_type = apply_filters( 'wpml_element_type', $content->post_type );
$trid = apply_filters( 'wpml_element_trid', null, $content->ID, $wpml_element_type );
// get all translations with this trid
$translations = apply_filters('wpml_get_element_translations', null, $trid, $wpml_element_type);
// iterate over translations with this trid and update source_language_code as required
foreach ($translations as $lang => $translation) {
$set_language_args = array(
'element_id' => $translation->element_id,
'element_type' => $translation->element_type,
'trid' => $trid,
'language_code' => $translation->language_code
);
if ( $lang == $source_to ) {
$set_language_args['source_language_code'] = "NULL";
} else {
$set_language_args['source_language_code'] = $source_to;
}
do_action( 'wpml_set_element_language_details', $set_language_args );
}
}
}
}