@@ -246,38 +246,55 @@ public function install( $args, $assoc_args ) {
246246 public function uninstall ( $ args , $ assoc_args ) {
247247 global $ wp_filesystem ;
248248
249+ $ dir = 'core ' === $ this ->obj_type ? '' : "/ $ this ->obj_type " ;
250+ $ files = scandir ( WP_LANG_DIR . $ dir );
251+ if ( ! $ files ) {
252+ WP_CLI ::error ( 'No files found in language directory. ' );
253+ }
254+
249255 $ language_codes = (array ) $ args ;
250256
251257 $ available = $ this ->get_installed_languages ();
252258
253- foreach ( $ language_codes as $ language_code ) {
259+ $ current_locale = get_locale ();
254260
261+ foreach ( $ language_codes as $ language_code ) {
255262 if ( ! in_array ( $ language_code , $ available , true ) ) {
256263 WP_CLI ::error ( 'Language not installed. ' );
257264 }
258265
259- $ dir = 'core ' === $ this ->obj_type ? '' : "/ $ this ->obj_type " ;
260- $ files = scandir ( WP_LANG_DIR . $ dir );
261- if ( ! $ files ) {
262- WP_CLI ::error ( 'No files found in language directory. ' );
263- }
264-
265- $ current_locale = get_locale ();
266266 if ( $ language_code === $ current_locale ) {
267267 WP_CLI ::warning ( "The ' {$ language_code }' language is active. " );
268268 exit ;
269269 }
270270
271+ $ files_to_remove = array (
272+ "$ language_code.po " ,
273+ "$ language_code.mo " ,
274+ "$ language_code.l10n.php " ,
275+ "admin- $ language_code.po " ,
276+ "admin- $ language_code.mo " ,
277+ "admin- $ language_code.l10n.php " ,
278+ "admin-network- $ language_code.po " ,
279+ "admin-network- $ language_code.mo " ,
280+ "admin-network- $ language_code.l10n.php " ,
281+ "continents-cities- $ language_code.po " ,
282+ "continents-cities- $ language_code.mo " ,
283+ "continents-cities- $ language_code.l10n.php " ,
284+ );
285+
271286 // As of WP 4.0, no API for deleting a language pack
272287 WP_Filesystem ();
273288 $ deleted = false ;
274289 foreach ( $ files as $ file ) {
275290 if ( '. ' === $ file [0 ] || is_dir ( $ file ) ) {
276291 continue ;
277292 }
278- $ extension_length = strlen ( $ language_code ) + 4 ;
279- $ ending = substr ( $ file , -$ extension_length );
280- if ( ! in_array ( $ file , array ( $ language_code . '.po ' , $ language_code . '.mo ' ), true ) && ! in_array ( $ ending , array ( '- ' . $ language_code . '.po ' , '- ' . $ language_code . '.mo ' ), true ) ) {
293+
294+ if (
295+ ! in_array ( $ file , $ files_to_remove , true ) &&
296+ ! preg_match ( "/ $ language_code-\w{32}\.json/ " , $ file )
297+ ) {
281298 continue ;
282299 }
283300
0 commit comments