$language_target ) { // Check languages target format if ( ! empty( $language_target['id'] ) && isset( $language_target['flag'] ) ) { // Check if language is valid if ( wplng_is_valid_language_id( $language_target['id'] ) ) { $language = wplng_get_language_by_id( $language_target['id'] ); if ( false !== $language ) { $languages_target_clear[] = $language; } } } } return $languages_target_clear; } /** * Get target languages IDs * * @return array */ function wplng_get_languages_target_ids() { $languages_target = wplng_get_languages_target(); $languages_target_ids = array(); foreach ( $languages_target as $language_target ) { $languages_target_ids[] = $language_target['id']; } return $languages_target_ids; } /** * Get current language ID * * @return string */ function wplng_get_language_current_id() { global $wplng_request_uri; $current_path = $wplng_request_uri; $languages_target = wplng_get_languages_target_ids(); if ( ! wplng_url_is_translatable() || empty( $current_path ) || ! is_string( $current_path ) ) { return wplng_get_language_website_id(); } foreach ( $languages_target as $language ) { if ( substr( $current_path, 0, 4 ) === '/' . $language . '/' || substr( $current_path, 0, 3 ) === $language . '/' ) { return $language; break; } } return wplng_get_language_website_id(); } /** * Get languages data from languages IDs list * * @param array $language_ids * @return array */ function wplng_get_languages_by_ids( $language_ids ) { $all_languages = wplng_get_languages_all(); $languages = array(); foreach ( $language_ids as $language_id ) { foreach ( $all_languages as $language ) { if ( ! empty( $language['id'] ) && $language['id'] === $language_id ) { $languages[] = $language; break; } } } return $languages; } /** * Get language data from ID * * @param string $language_id * @return array */ function wplng_get_language_by_id( $language_id ) { $all_languages = wplng_get_languages_all(); foreach ( $all_languages as $language ) { if ( ! empty( $language['id'] ) && $language['id'] === $language_id ) { return $language; } } // Return a default value if $language_id not exist return wplng_get_language_by_id( 'en' ); } /** * Check if a language ID is valid * * @param string $language_id * @return bool */ function wplng_is_valid_language_id( $language_id ) { // If $language_id format is not valid, return default data if ( empty( $language_id ) || ! is_string( $language_id ) || strlen( $language_id ) !== 2 ) { return false; } // Check if $language_id is in languages data $languages_data = wplng_data_languages(); foreach ( $languages_data as $language_data ) { if ( $language_data['id'] === $language_id ) { return true; } } return false; } /** * Check if a list of language ID are valid * * @param array $language_id_list * @return bool */ function wplng_is_valid_language_ids( $language_id_list ) { if ( ! is_array( $language_id_list ) ) { return false; } foreach ( $language_id_list as $language_id ) { if ( ! wplng_is_valid_language_id( $language_id ) ) { return false; } } return true; } /** * Get data of all languages * * @return array */ function wplng_get_languages_all() { $languages = wplng_data_languages(); $source_language = get_option( 'wplng_website_language' ); $source_flag = get_option( 'wplng_website_flag' ); $target_flags = get_option( 'wplng_target_languages' ); if ( empty( $target_flags ) || ! is_string( $target_flags ) ) { $target_flags = '[]'; } $target_flags = json_decode( $target_flags, true ); if ( empty( $source_language ) ) { $source_language = 'en'; } foreach ( $languages as $key => $language ) { $flags_style = wplng_get_switcher_flags_style() . '/'; if ( 'none/' === $flags_style ) { $flags_style = 'rectangular/'; } // Set custom website flag if defined if ( ! empty( $source_language ) && $language['id'] == $source_language && ! empty( $source_flag ) ) { $languages[ $key ]['flag'] = $source_flag; } else { $languages[ $key ]['flag'] = plugins_url() . '/wplingua/assets/images/' . $flags_style . $language['flag'] . '.png'; } // Set custom target flag if defined foreach ( $target_flags as $target_key => $target_flag ) { if ( ! empty( $target_flag['id'] ) && $target_flag['id'] == $language['id'] ) { $languages[ $key ]['flag'] = $target_flag['flag']; break; } } // Transform flags to URL foreach ( $languages[ $key ]['flags'] as $key_flag => $flag ) { $languages[ $key ]['flags'][ $key_flag ]['flag'] = plugins_url() . '/wplingua/assets/images/' . $flags_style . $flag['flag'] . '.png'; } // Add default DIR as LTR if not specified or invalid if ( empty( $language['dir'] ) || 'rtl' !== $language['dir'] ) { $languages[ $key ]['dir'] = 'ltr'; } } return $languages; } /** * Get data of all languages allowed * * @return array */ function wplng_get_languages_allow() { $languages_alow = wplng_get_api_languages_target(); $languages = array(); if ( 'all' === $languages_alow ) { return wplng_get_languages_all(); } elseif ( empty( $languages_alow ) || ! is_array( $languages_alow ) ) { return array(); } foreach ( $languages_alow as $language_id_alow ) { $languages[] = wplng_get_language_by_id( $language_id_alow ); } return $languages; }