Търся програмист за разработване на скрипт за транслитерация + няколко правила

paradoxkc

Member
Търся програмист за разработване на скрипт за транслитерация на голям обем файлове в локална среда.

При задаване на destination, да се преименуват имената на папките и файловете с правилата за транслитерация https://slovored.com/transliteration/ от кирилица на латиница.
След транслитерацията да приложат правилата в посочената последователност:

Replace all uppercase letters with lowercase letters

IF find „+“ replace with „–„

IF find „.“ replace with empty value

IF find „,“ replace with empty value

IF find „()“ replace with empty value

IF find "--" replace with „–„

IF find "---" replace with „–„

IF find triple space replace with single space

IF find double space replace with single space

IF find single space replace with „–„

Нагледно https://www.loom.com/share/1e613eb9194444f5a768666fa88b11a9

Заинтересованите да се свържат с мен на ЛС или email: [email protected]
 

alexkuzmov

Active Member
Търся програмист за разработване на скрипт за транслитерация на голям обем файлове в локална среда.

При задаване на destination, да се преименуват имената на папките и файловете с правилата за транслитерация https://slovored.com/transliteration/ от кирилица на латиница.
След транслитерацията да приложат правилата в посочената последователност:

Replace all uppercase letters with lowercase letters

IF find „+“ replace with „–„

IF find „.“ replace with empty value

IF find „,“ replace with empty value

IF find „()“ replace with empty value

IF find "--" replace with „–„

IF find "---" replace with „–„

IF find triple space replace with single space

IF find double space replace with single space

IF find single space replace with „–„

Нагледно https://www.loom.com/share/1e613eb9194444f5a768666fa88b11a9

Заинтересованите да се свържат с мен на ЛС или email: [email protected]
Готов си, само си допиши символите.

Код:
<?php

function transliterate($string) {

    $symbols = [
        'А' => 'A', 'а' => 'a',
        'Б' => 'B', 'б' => 'b',
        //...
    ];
   
    $string = str_replace(array_keys($symbols), array_values($symbols), $string);

    // Remove repeat chars
    $string = preg_replace(["/\s+/", "/\-+/"], [' ', '-'], $string);
   
    return $string;
}

function replaceAndRename($source) {
    if (!is_dir($source)) {
        return;
    }

    $dirs = scandir($source);

    foreach ($dirs as $dir) {
       
        if ($dir == '.' || $dir == '..') {
            continue;
        }
       
        $path = $source . '/' . $dir;
       
        if (is_file($path)) {

            $newPath = transliterate($path);

            if ($path != $newPath){
                rename($path, $newPath);
            }
        } else if (is_dir($path)) {

            $newPath = transliterate($path);
           
            if ($path != $newPath){
                rename($path, $newPath);
            }
           
            replaceAndRename($path);
        }
    }
}

$root = "/path/to/dir";

replaceAndRename($root);
 

paradoxkc

Member
Готов си, само си допиши символите.

Код:
<?php

function transliterate($string) {

    $symbols = [
        'А' => 'A', 'а' => 'a',
        'Б' => 'B', 'б' => 'b',
        //...
    ];
  
    $string = str_replace(array_keys($symbols), array_values($symbols), $string);

    // Remove repeat chars
    $string = preg_replace(["/\s+/", "/\-+/"], [' ', '-'], $string);
  
    return $string;
}

function replaceAndRename($source) {
    if (!is_dir($source)) {
        return;
    }

    $dirs = scandir($source);

    foreach ($dirs as $dir) {
      
        if ($dir == '.' || $dir == '..') {
            continue;
        }
      
        $path = $source . '/' . $dir;
      
        if (is_file($path)) {

            $newPath = transliterate($path);

            if ($path != $newPath){
                rename($path, $newPath);
            }
        } else if (is_dir($path)) {

            $newPath = transliterate($path);
          
            if ($path != $newPath){
                rename($path, $newPath);
            }
          
            replaceAndRename($path);
        }
    }
}

$root = "/path/to/dir";

replaceAndRename($root);

Супер, много благодаря, писах на ЛС.
 

Горе