Support Log in

35. Translating REST API Responses

Developer Guide
Prefer video? Watch the Lang Forge tutorials 9 short guides covering every feature Watch

How to add language-aware data to your own custom REST API endpoints.

Adding Language Fields to Custom Endpoints

php
/**
 * Register a custom REST endpoint that returns language-aware data.
 */
add_action('rest_api_init', function () {
    register_rest_route('mytheme/v1', '/content/(?P<lang>[a-z]{2})', [
        'methods'  => 'GET',
        'callback' => function (WP_REST_Request $request) {
            $lang = $request->get_param('lang');
            $languages = lf_get_languages();

            if (!isset($languages[$lang])) {
                return new WP_Error('invalid_language', 'Language not found', ['status' => 404]);
            }

            $posts = get_posts([
                'post_type'      => 'post',
                'posts_per_page' => 10,
                'meta_key'       => '_lf_language',
                'meta_value'     => $lang,
            ]);

            $data = [];
            foreach ($posts as $post) {
                $translations = lf_get_post_translations($post->ID);
                $data[] = [
                    'id'           => $post->ID,
                    'title'        => $post->post_title,
                    'language'     => $lang,
                    'translations' => $translations,
                    'permalink'    => get_permalink($post->ID),
                ];
            }

            return rest_ensure_response($data);
        },
        'permission_callback' => '__return_true',
    ]);
});
Example: Add translated strings to a custom REST response
php
add_action('rest_api_init', function () {
    register_rest_route('mytheme/v1', '/strings/(?P<lang>[a-z]{2})', [
        'methods'  => 'GET',
        'callback' => function (WP_REST_Request $request) {
            $lang = $request->get_param('lang');

            // Temporarily switch to the requested language
            global $wpdb;
            $strings = $wpdb->get_results($wpdb->prepare(
                "SELECT string_name, string_value FROM {$wpdb->prefix}lf_strings
                 WHERE string_domain = %s AND string_language = %s",
                'theme', $lang
            ));

            $result = [];
            foreach ($strings as $s) {
                $result[$s->string_name] = $s->string_value;
            }

            return rest_ensure_response($result);
        },
        'permission_callback' => '__return_true',
    ]);
});

Forge AI Assistant Online

Hi! I'm the Lang Forge AI assistant. Ask me anything about the plugin — setup, features, troubleshooting, or development.

Just now
Powered by Forge AI · Browse docs