web-dev-qa-db-fra.com

détecter la langue dans laquelle un message est écrit

Existe-t-il un moyen d'évaluer la langue dans laquelle un article/une page est écrit? Je construis un site multilingue et je me tire presque les cheveux en essayant de faire en sorte que la navigation frontale prenne en compte la langue choisie. Jusqu'ici, le plugin polylang http://wordpress.org/extend/plugins/polylang/ a bien fonctionné pour tout le reste.

3
tembamazingi

La langue principale d'un article doit être sauvegardée dans un champ méta. Il n'y a aucun moyen de détecter cela automatiquement. Même les heuristiques de Google échouent régulièrement avec cela.

Donc, ajoutez un champ personnalisé lang et vérifiez avec…

$language = get_post_meta( get_the_ID(), 'lang', TRUE );

… Dans quelle langue le message a été écrit.

Mettre à jour

Voici un exemple très simple pour un sélecteur de langue. Il sera visible sur chaque type d'article avec un Publish metabox.

enter image description here

get_post_meta( get_the_ID(), '_language', TRUE ); 

… Renverra la langue de la publication si disponible.

add_action( 'post_submitbox_misc_actions', 't5_language_selector' );
add_action( 'save_post', 't5_save_language' );

function t5_language_selector()
{
    print '<div class="misc-pub-section">
        <label for="t5_language_id">Language</label>
        <select name="t5_language" id="t5_language_id">';

    $current = get_post_meta( get_the_ID(), '_language', TRUE );
    $languages = array (
        'en' => 'English',
        'de' => 'Deutsch',
        'ja' => '日本人'
    );

    foreach ( $languages as $key => $language )
        printf(
            '<option value="%1$s" %2$s>%3$s</option>',
            $key,
            selected( $key, $current, FALSE ),
            $language
        );

    print '</select></div>';
}


function t5_save_language( $id )
{
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
        return;

    if ( ! current_user_can( 'edit_post', $id ) )
        return;

    if ( ! isset ( $_POST['t5_language'] ) )
        return delete_post_meta( $id, '_language' );

    if ( ! in_array( $_POST['t5_language'], array ( 'en', 'de', 'ja' ) ) )
        return;

    update_post_meta( $id, '_language', $_POST['t5_language'] );
}
3
fuxia

Pour le reste api, wp-graphql et le wp eval-file de wp-cli je devais le faire

wp_get_post_terms( $post->ID, 'language' )[0]->slug
0
Epeli