Files
archived-doc-base/scripts/translation/libqa/SyncFileList.php
Louis-Arnaud 25287dfd9f Add --lang and file listing to sync XML tools (#275)
* Add --lang= parameter and simple file listing to sync XML tools

Allow all qaxml-*.php scripts to accept --lang=XX to specify the
target language directly, without requiring temp/lang from
configure.php. Also accept file paths as positional arguments
for checking specific files instead of the full translation tree.

Existing behavior without parameters is preserved. Relates to #199.

* Rename $files to $filterFiles and warn on missing source files

Address review feedback: rename parameter for clarity and add
STDERR warning when a command-line file is not found in sourceDir.
2026-02-12 17:22:52 -03:00

100 lines
3.3 KiB
PHP

<?php /*
+----------------------------------------------------------------------+
| Copyright (c) 1997-2025 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net, so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: André L F S Bacci <ae php.net> |
+----------------------------------------------------------------------+
# Description
Generates (and caches) the list of files with TranslatedOk status. */
require_once __DIR__ . '/all.php';
class SyncFileList
{
static function load( ?string $lang = null , array $filterFiles = [] )
{
if ( $lang === null )
{
$file = __DIR__ . "/../../../temp/lang";
if ( ! file_exists( $file ) )
{
fwrite( STDERR , "Language not found, run 'doc-base/configure.php' or use '--lang='.\n" );
exit();
}
$lang = trim( file_get_contents( $file ) );
}
$sourceDir = 'en';
$targetDir = $lang;
if ( count( $filterFiles ) > 0 )
{
$ret = [];
foreach ( $filterFiles as $file )
{
if ( ! file_exists( "$sourceDir/$file" ) )
{
fwrite( STDERR , "File not found in source: $sourceDir/$file\n" );
continue;
}
if ( ! file_exists( "$targetDir/$file" ) )
continue;
$item = new SyncFileItem();
$item->sourceDir = $sourceDir;
$item->targetDir = $targetDir;
$item->file = $file;
$ret[] = $item;
}
if ( $ret === [] )
throw new Exception( "No matching files found." );
return $ret;
}
$cacheFilename = __DIR__ . "/../../../temp/qaxml.files.$lang";
if ( file_exists( $cacheFilename ) )
{
return unserialize( gzdecode( file_get_contents( $cacheFilename ) ) );
}
require_once __DIR__ . '/../lib/all.php';
$revFiles = new RevcheckFileList( $sourceDir );
$ret = [];
foreach( $revFiles->iterator() as $file )
{
if ( ! file_exists( "$targetDir/{$file->file}" ) )
continue;
$item = new SyncFileItem();
$item->sourceDir = $sourceDir;
$item->targetDir = $targetDir;
$item->file = $file->file;
$ret[] = $item;
}
if ( $ret === [] )
throw new Exception( "No files found. Called from wrong directory?" );
$contents = gzencode( serialize( $ret ) );
file_put_contents( $cacheFilename , $contents );
return $ret;
}
}