WordPress Beiträge automatisch übersetzen

und Zeit sparen durch Automatisierung

    Inhaltsangabe
  1. Die Google Cloud Translation API
  2. Die REST Schnittstelle
  3. Schlüsselbegriffe übersetzen
  4. Ganze Beiträge übersetzen

Ich habe letzte Woche die automatisierte Social Media postings programmiert und schon einen Besucher Zuwachs von 800 Prozent verzeichnet. Jetzt will ich noch eine Schippe drauf packen und eine automatisierte Übersetzung programmieren, womit dann automatisch beinahe die ganze Welt mit meinem Blog angesprochen werden kann.

Diese Beiträge müsste ich aber erst einmal Korrektur lesen und freigeben. Danach müssten die noch von den ganzen Suchmaschinen gecrawlt werden und dann erst kann man langsam mit Besuchern rechnen. Ich gebe also ca zwei Monate bevor ich mit den ersten Erfolgen rechnen kann.

Die Google Cloud Translation API

Nun denn dann fangen wir mal an. Zuerst müssen wir uns ein Google Account anlegen und unsere Kreditkartendaten hinterlegen.

Bitte denkt dran, dass jeder buchstabe, der übersetzt wird, Geld kostet! Die Preise liegen aber ganz im Rahmen des bazahlbaren. Deswegen werde ich das jetzt einfach mal testen.

Also. Nachdem wir unsere Kreditkartendaten hinterlegt haben, müssen wir ein Projekt erstellen und innerhalb dieses Projektes einen API Schlüssel generieren. Diesen Schlüssel müssen wir auf unseren Server beschränken. Haben wir das gemacht, müssen wir nun für dieses Projekt die Google Cloud translation api freischalten und unsere Kontingente festlegen. Es ist extrem wichtig, dass man den API Schlüssel auf den Server beschränkt und Kontingente festlegt, denn ansonsten können sehr schnell Kosten von mehreren tausend Euros generiert werden.

Die REST Schnittstelle

Falls ihr noch wenig Erfahrung mit REST API’s habt, könnt ihr euch gerne diese Funktion zur Verwendung kopieren:

function REST($method, $url, $data = false){
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_REFERER, actual_link());

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

Nachdem ihr das übernommen habt, solltet ihr eine Funktion schreiben, welches automatisch die REST API und die Übersetzungs API von Google benutzt und bei Erfolg die Übersetzung zurück gibt.

function translate_text($args){
	$ret = json_decode( (string) REST(
			'POST',
			'https://translation.googleapis.com/language/translate/v2?key=XXXXXXXXXX',
			array(
				'source' => $args['source_lang'],
				'target' => $args['target_lang'],
				'q' => $args['text']
			)
	));

	return ($ret->error)? false : $ret->data->translations[0]->translatedText;
}

Schlüsselbegriffe übersetzen

Wenn ihr Schlüsselbegriffe benutzt, wäre es wichtig, diese übersetzen zu lassen. In meinem Fall ist das wichtig, weil meine Schlüsselbegriffe automatisch auch als Hashtags in den Social Media Beiträgen gepostet werden.

function translate_term($args){
	$source_lang = $args['source_lang'];
	$target_lang = $args['target_lang'];


	$term_name_translation = translate_text(array(
		'source_lang' => $source_lang,
		'target_lang' => $target_lang,
		'text' => $args['source_term']->name
	));


	$translated_term_id = wp_insert_term(
		$term_name_translation,
		$args['source_term']->taxonomy,
		array(
			'parent'=> $args['source_term']->parent,
			'slug' => sanitize_title($term_name_translation).'-'.$target_lang
		)
	);


	if($translated_term_id = $translated_term_id['term_id']):
		pll_set_term_language($translated_term_id, $target_lang);
		pll_save_term_translations(array(
			$source_lang => $args['source_term']->term_id,
			$target_lang => $translated_term_id
		));

	else:
		var_dump('ERROR!');
		var_dump($translated_term_id);
	endif;
	return $translated_term_id;
}

Am Ende habe ich auch eine Funktion geschrieben, was automatisch die Schlüsselbegriffe von einem bestimmten Beitrag übersetzt und diese anhängt:

function translate_post_tags($args){

	$source_lang = $args['source_lang'];
	$target_lang = $args['target_lang'];
	$terms_to_append = array();

	foreach (wp_get_post_tags($args['source_post_id']) as $original_tag) {

		$translated_term_id = pll_get_term($original_tag->term_id, $target_lang);
		if (!$translated_term_id) $translated_term_id = translate_term(array(
			'source_lang' => $source_lang,
			'target_lang' => $target_lang,
			'source_term' => $original_tag
		));

		$terms_to_append[] = get_term_by( 'term_id', $translated_term_id, $original_tag->taxonomy )->name;
	}
	return wp_set_post_tags( $args['target_post_id'], $terms_to_append , true );
}

Anschließend könnt ihr mit diesen Funktionen Beiträge, Schlüsselbegriffe und Auszüge automatisch übersetzen lassen.

Ganze Beiträge übersetzen

Die folgende Funktion übersetzt einen Beitrag automatisch und erstellt einen Beitrag. Dieser wird als Entwurf gespeichert und dem originalen Beitrag als Übersetzung angehangen. Ich benutze zur Verwaltung meiner Übersetzungen das Polylang Plugin. Deswegen werdet ihr auch Polylang Funktionen im Code sehen, welche ihr dann mit eurem Plugin ersetzen könnt:

/****
translate_post(array(
	'post_id' => $post_id
	'source_lang' => $source_lang
	'target_lang' => $target_lang
))
****/
function translate_post($args){
	$post_to_translate = get_post($args['post_id']);
	$source_lang = $args['source_lang'];
	$target_lang = $args['target_lang'];

	$translated_content = translate_text(array(
		'source_lang' => $source_lang,
		'target_lang' => $target_lang,
		'text' => $post_to_translate->post_content
	));

	$translated_excerpt = translate_text(array(
		'source_lang' => $source_lang,
		'target_lang' => $target_lang,
		'text' => $post_to_translate->post_excerpt
	));

	$translated_title = translate_text(array(
		'source_lang' => $source_lang,
		'target_lang' => $target_lang,
		'text' => $post_to_translate->post_title
	));

	// if(!$translated_content || !$translated_excerpt) return false;


	$translated_post_id = wp_insert_post(array(
		'post_author' => $post_to_translate->post_author,
		'post_date' => $post_to_translate->post_date,
		'post_date_gmt' => $post_to_translate->post_date_gmt,
		'post_content' => $translated_content,
		'post_title' => html_entity_decode($translated_title, ENT_QUOTES),
		'post_excerpt' => html_entity_decode($translated_excerpt, ENT_QUOTES),
		'post_status' => 'draft',
		'post_type' => $post_to_translate->post_type,
		'post_modified' => $post_to_translate->post_modified,
		'post_modified_gmt' => $post_to_translate->post_modified_gmt,
		'post_category' => $post_to_translate->post_category,
	));

	foreach (get_post_meta($post_to_translate->ID) as $key => $value) {
		if(
			$key !== 'tweet_id' &&
			$key !== 'facebook_post_id'
		) update_post_meta( $translated_post_id, $key, $value[0] );

		if($key == 'subline') update_post_meta( $translated_post_id, $key, translate_text(array(
			'source_lang' => $source_lang,
			'target_lang' => $target_lang,
			'text' => $value[0]
		)) );
	}

	pll_set_post_language($translated_post_id, $target_lang);
	pll_save_post_translations(array(
		$source_lang => $post_to_translate->ID,
		$target_lang => $translated_post_id
	));


	translate_post_tags(array(
		'source_post_id' => $post_to_translate->ID,
		'target_post_id' => $translated_post_id,
		'source_lang' => $source_lang,
		'target_lang' => $target_lang
	));

	return $translated_post_id;
}

Ich habe das alles jetzt seit einigen Tagen getestet und es funktioniert einwandfrei. Das einzige was ich jetzt noch machen muss ist, dass ich alle Beiträge die ich bis jetzt geschrieben habe korrekturlesen muss und veröffentlichen muss. Das wird am Anfang auf meinen social media Kanälen für chaos sorgen aber später sich dann wieder einpendeln.

Themen

Google Performance php Polylang SEO Social Media Technik WordPress

Beitrag teilen

WhatsAppen

Folgen Sie uns