Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 49
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
LanguageService
0.00% covered (danger)
0.00%
0 / 49
0.00% covered (danger)
0.00%
0 / 3
56
0.00% covered (danger)
0.00%
0 / 1
 get_all_languages
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
20
 get_languages_for_selection
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 get_fallback_languages
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace NewfoldLabs\WP\Module\Onboarding\Services;
4
5/**
6 * Class LanguageService
7 *
8 * Handles language-related operations for the onboarding module.
9 */
10class LanguageService {
11
12    /**
13     * Get all available languages including the default English.
14     *
15     * @return array List of language data
16     */
17    public static function get_all_languages() {
18        // Load translation-install.php if the function doesn't exist
19        if ( ! function_exists( 'wp_get_available_translations' ) ) {
20            require_once ABSPATH . 'wp-admin/includes/translation-install.php';
21        }
22
23        // Get all available translations from WordPress API
24        $translations = \wp_get_available_translations();
25
26        // If translations API fails, provide basic fallback
27        if ( empty( $translations ) ) {
28            return self::get_fallback_languages();
29        }
30
31        // Format data for response - include English as default
32        $formatted_languages = array(
33            array(
34                'code'        => 'en_US',
35                'name'        => 'English (United States)',
36                'native_name' => 'English (United States)',
37            ),
38        );
39
40        // Add translated languages with proper format
41        foreach ( $translations as $locale => $translation ) {
42            $formatted_languages[] = array(
43                'code'        => $locale,
44                'name'        => $translation['english_name'],
45                'native_name' => $translation['native_name'],
46            );
47        }
48
49        return $formatted_languages;
50    }
51
52    /**
53     * Get language data array formatted for the language selection component.
54     * Returns array of [language_name, language_code] pairs.
55     *
56     * @return array Array of language name and code pairs
57     */
58    public static function get_languages_for_selection() {
59        $languages     = self::get_all_languages();
60        $language_list = array();
61
62        foreach ( $languages as $language ) {
63            $language_list[] = array(
64                $language['name'],
65                $language['code'],
66            );
67        }
68
69        return $language_list;
70    }
71
72    /**
73     * Get fallback languages in case the translations API fails.
74     *
75     * @return array Basic list of language data
76     */
77    private static function get_fallback_languages() {
78        return array(
79            array(
80                'code'        => 'en_US',
81                'name'        => 'English (United States)',
82                'native_name' => 'English (United States)',
83            ),
84            array(
85                'code'        => 'es_ES',
86                'name'        => 'Spanish (Spain)',
87                'native_name' => 'Español',
88            ),
89            array(
90                'code'        => 'fr_FR',
91                'name'        => 'French (France)',
92                'native_name' => 'Français',
93            ),
94            array(
95                'code'        => 'de_DE',
96                'name'        => 'German',
97                'native_name' => 'Deutsch',
98            ),
99        );
100    }
101}