class-wpml-language-records.php
1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
class WPML_Language_Records {
private $wpdb;
private $languages;
/** @var null|array $locale_lang_map */
private $locale_lang_map;
public function __construct( wpdb $wpdb ) {
$this->wpdb = $wpdb;
}
public function is_valid( $code ) {
if ( ! $this->languages ) {
$this->load();
}
return in_array( $code, $this->languages );
}
private function load() {
$this->languages = $this->wpdb->get_col( "SELECT code FROM {$this->get_table()}" );
}
/**
* @param string $lang_code
*
* @return string|null
*/
public function get_locale( $lang_code ) {
$this->init_locale_lang_map();
$locale = array_search( $lang_code, $this->locale_lang_map, true );
return $locale ? $locale : null;
}
/**
* @param string $locale
*
* @return string|null
*/
public function get_language_code( $locale ) {
$this->init_locale_lang_map();
return isset( $this->locale_lang_map[ $locale ] ) ? $this->locale_lang_map[ $locale ] : null;
}
private function init_locale_lang_map() {
if ( null === $this->locale_lang_map ) {
$this->locale_lang_map = array();
$sql = "SELECT default_locale, code FROM {$this->get_table()}";
$rowset = $this->wpdb->get_results( $sql );
foreach ( $rowset as $row ) {
$this->locale_lang_map[ $row->default_locale ?: $row->code ] = $row->code;
}
}
}
/**
* @return array
*/
public function get_locale_lang_map() {
$this->init_locale_lang_map();
return $this->locale_lang_map;
}
private function get_table() {
return $this->wpdb->prefix . 'icl_languages';
}
}