-
Notifications
You must be signed in to change notification settings - Fork 2
/
rus-package.php
158 lines (132 loc) · 4.43 KB
/
rus-package.php
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
/**
* Plugin Name: Rus Package
* Description: Snippets for Russian-language blog. Cyrillic to Latin converation in slugs and declension of nouns on dates.
* Version: 1.2
* Author: Anton Lukin
* Author URI: https://lukin.me/
* Plugin URI: https://github.com/antonlukin/rus-package
* Text Domain: rus-package
*/
if ( ! defined( 'WPINC' ) ) {
die;
}
add_action( 'init', function() {
load_plugin_textdomain( 'rus-package', false, basename(__DIR__) . '/lang' );
new Rus_Transliteration;
} );
class Rus_Transliteration {
/**
* Set public actions and filters
*/
public function __construct()
{
add_action( 'sanitize_title', array( $this, 'sanitize_title' ), 9 );
add_action( 'sanitize_file_name', array( $this, 'sanitize_file_name' ), 9 );
add_filter( 'the_date', array( $this, 'update_date' ) );
add_filter( 'the_time', array( $this, 'update_date' ) );
add_filter( 'get_the_time', array( $this, 'update_date' ) );
add_filter( 'get_the_date', array( $this, 'update_date' ) );
add_filter( 'get_post_time', array( $this, 'update_date' ) );
add_filter( 'get_comment_date', array( $this, 'update_date' ) );
add_filter( 'the_modified_time', array( $this, 'update_date' ) );
add_filter( 'get_the_modified_date', array( $this, 'update_date' ) );
}
/**
* Replace latin with cyrillic using ISO 9
*/
private function replace_latin( $name )
{
$replace = array(
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH', 'З' => 'Z', 'И' => 'I',
'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N',
'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'CZ', 'Ч' => 'CH',
'Ш' => 'SH', 'Щ' => 'SHH', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '',
'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA',
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i',
'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'cz', 'ч' => 'ch',
'ш' => 'sh', 'щ' => 'shh', 'ъ' => '', 'ы' => 'y', 'ь' => '',
'э' => 'e', 'ю' => 'yu', 'я' => 'ya'
);
$name = strtr( $name, $replace );
return $name;
}
/**
* Leave only latin chars and digits in slugs
*/
public function sanitize_title( $name )
{
$name = $this->replace_latin( $name );
// Leave only latin chars and digits in slugs
$name = preg_replace( '/[^a-z0-9]/i', '-', $name );
return $name;
}
/**
* Update file names
*/
public function sanitize_file_name( $name )
{
$name = $this->replace_latin( $name );
if ( seems_utf8( $name ) ) {
$name = urldecode( $name );
}
return $name;
}
/**
* Replace english dates with russian names
*/
public function update_date( $date = '' )
{
$replace = array(
"Январь" => "января",
"Февраль" => "февраля",
"Март" => "марта",
"Апрель" => "апреля",
"Май" => "мая",
"Июнь" => "июня",
"Июль" => "июля",
"Август" => "августа",
"Сентябрь" => "сентября",
"Октябрь" => "октября",
"Ноябрь" => "ноября",
"Декабрь" => "декабря",
"January" => "января",
"February" => "февраля",
"March" => "марта",
"April" => "апреля",
"May" => "мая",
"June" => "июня",
"July" => "июля",
"August" => "августа",
"September" => "сентября",
"October" => "октября",
"November" => "ноября",
"December" => "декабря",
"Sunday" => "воскресенье",
"Monday" => "понедельник",
"Tuesday" => "вторник",
"Wednesday" => "среда",
"Thursday" => "четверг",
"Friday" => "пятница",
"Saturday" => "суббота",
"Sun" => "воскресенье",
"Mon" => "понедельник",
"Tue" => "вторник",
"Wed" => "среда",
"Thu" => "четверг",
"Fri" => "пятница",
"Sat" => "суббота",
"th" => "",
"st" => "",
"nd" => "",
"rd" => ""
);
$date = strtr( $date, $replace );
return $date;
}
}