web-dev-qa-db-fra.com

Internationaliser/traduire des types de poteaux personnalisés et des taxonomies

J'ai créé un type de message personnalisé et une taxonomie via un générateur, mais je ne sais pas trop comment le rendre traduisible. Google n'aide pas en cela. Je ne sais pas où placer text-domain ici et ce que j'ai essayé de faire fait que les taxonomies ne fonctionnent pas du tout.

Merci d'avance.

Le code:

    add_action( 'init', 'register_cpt_portfolio' );
    function register_cpt_portfolio() {

        $labels = array( 
            'name' => _x( 'Portfolios',  'portfolio'),
            'singular_name' => _x( 'single-portfolio',  'portfolio' ),
            'add_new' => _x( 'Add New', 'portfolio' ),
            'add_new_item' => _x( 'Add New Portfolio', 'portfolio' ),
            'edit_item' => _x( 'Edit Portfolio',  'portfolio' ),
            'new_item' => _x( 'New Portfolio', 'portfolio' ),
            'view_item' => _x( 'View Portfolio',  'portfolio' ),
            'search_items' => _x( 'Search Portfolios',  'portfolio' ),
            'not_found' => __( 'No portfolios found',  'portfolio' ),
            'not_found_in_trash' => _x( 'No portfolios found in Trash',  'portfolio' ),
            'parent_item_colon' => _x( 'Parent Portfolio:', 'portfolio' ),
            'menu_name' => _x( 'Portfolio',  'portfolio' ),
        );

        $args = array( 
            'labels' => $labels,
            'hierarchical' => false,
            'supports' => array( 'title', 'editor', 'thumbnail' ),
            'taxonomies' => array( 'portfolio_taxonomy' ),
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'show_in_nav_menus' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'has_archive' => true,
            'query_var' => true,
            'can_export' => true,
            'rewrite' => true,
            'capability_type' => 'post'
        );

        register_post_type( 'portfolio', $args );
    }    


    add_action( 'init', 'register_taxonomy_portfolio_taxonomy' );

    function register_taxonomy_portfolio_taxonomy() {

        $labels = array( 
            'name' => _x( 'Portfolio Categories',  'portfolio_taxonomy' ),
            'singular_name' => _x( 'Portfolio Category', 'portfolio_taxonomy' ),
            'search_items' => _x('Search Portfolio Categories',  'portfolio_taxonomy'),
            'popular_items' => _x( 'Popular Portfolio Categories',  'portfolio_taxonomy' ),
            'all_items' => _x('All Portfolio Categories', 'portfolio_taxonomy' ),
            'parent_item' => _x('Parent Portfolio Category',  'portfolio_taxonomy' ),
            'parent_item_colon' => _x( 'Parent Portfolio Category:',  'portfolio_taxonomy' ),
            'edit_item' => _x( 'Edit Portfolio Category', 'portfolio_taxonomy' ),
            'update_item' => _x( 'Update Portfolio Category', 'portfolio_taxonomy' ),
            'add_new_item' => _x( 'Add New Portfolio Category', 'portfolio_taxonomy'),
            'new_item_name' => _x( 'New Portfolio Category',  'portfolio_taxonomy' ),
            'separate_items_with_commas' => _x( 'Separate portfolio categories with commas', 'portfolio_taxonomy'),
            'add_or_remove_items' => _x( 'Add or remove portfolio categories',  'portfolio_taxonomy' ),
            'choose_from_most_used' => _x( 'Choose from the most used portfolio categories', 'portfolio_taxonomy' ),
            'menu_name' => _x( 'Portfolio Categories','portfolio_taxonomy'),
        );

        $args = array( 
            'labels' => $labels,
            'public' => true,
            'show_in_nav_menus' => true,
            'show_ui' => true,
            'show_tagcloud' => true,
            'hierarchical' => true,
            'rewrite' => true,
            'query_var' => true
        );

        register_taxonomy( 'portfolio_taxonomy', array('portfolio'), $args );
    }
1
denoizzed

Puisque vous avez déjà compris le domaine textuel (dernier paramètre de __()), je souhaite ajouter quelque chose que la plupart des gens oublient lorsque les types de publication personnalisés ou les taxonomies sont traduits: les slugs.

Votre type de message ou votre nom de taxonomie peuvent signifier quelque chose de très différent, voire d'embarrassant dans une autre langue. Ou il peut contenir des lettres qui ne sont pas disponibles (comme le célèbre i en turc ) et donc difficiles à taper.

Voir les slugs non traduisibles comme des bugs dans votre code.

L'argument rewrite pour register_taxonomy() et register_post_type() accepte un tableau. L'une des clés du tableau est slug. Utilisez-le, rendez-le traduisible aussi:

register_post_type( 
    'post_type_name', 
    array (
        'rewrite' => array (
            'slug' => _x( 'post_type_name', 'URL slug', 'your_text_domain' )
        )
    )
);
register_taxonomy( 
    'taxonomy_name',
    array ( 'post', 'post_type_name' ), 
    array (
        'rewrite' => array (
            'slug' => _x( 'taxonomy_name', 'URL slug', 'your_text_domain' )
        )
    )
);

La fonction _x() utilise un paramètre de contexte. Cela aidera les traducteurs à voir où la chaîne sera utilisée.

3
fuxia