GIF89a; Mini Shell

Mini Shell

Direktori : /scripts/
Upload File :
Current File : //scripts/locale_export

#!/usr/local/cpanel/3rdparty/bin/perl

# cpanel - scripts/locale_export                   Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

use strict;
use warnings;
use Getopt::Param                  ();
use Cpanel::Locale                 ();
use Cpanel::Locale::Utils::Display ();
use Cpanel::Locale::Utils::XML     ();
use Cpanel::SafeDir::MK            ();

my $prm = Getopt::Param->new(
    {
        'no_args_help' => 1,
        'help_coderef' => sub {
            print <<"END_USAGE";
$0 --locale={locale_tag} [--locale=… --locale=… …] [--quiet] [--export-{locale_tag}={path}]  [--dumper-format] [--exclude-bracketed-strings] [--no-fallback]

Export locales from the Locale database in XML format.

Options:
  --help                       Show this help screen
  --quiet                      Show less output than normal.
  --locale={locale_tag}        Specify a locale to export. You may pass the flag multiple times in order to export multiple locales.
      This creates files in a default location that `/usr/local/cpanel/scripts/locale_import --locale={locale_tag}` knows to use.
  --export-{locale_tag}={file} Save the export of the locale {locale_tag} to {file} instead of the standard place.
      This creates files that can be imported with `/usr/local/cpanel/scripts/locale_import --import={file}`
  --dumper-format              Export into the old format instead of XLIFF (will force an .xml extension on any --export-XX paths)
  --recover                    Try to recover on encountering an ill-formed phrase.
  --exclude-bracketed-strings  Exclude strings that contain bracket notion, which may cause problem on some translation platforms.
  --no-fallback                Do not use orginial strings as fallback if no translation is available, leave target blank.

The XML files that this script creates can be imported via /usr/local/cpanel/scripts/locale_import

If there were problems exporting the script will exit with an error status. To examine the details of what happened do not use --quiet.
END_USAGE
            exit;
        },
    }
);

my $verbose = $prm->get_param('quiet') ? 0 : 1;
my $options = {
    'recover'     => ( $prm->get_param('recover')                   ? 1 : 0 ),
    'no-brackets' => ( $prm->get_param('exclude-bracketed-strings') ? 1 : 0 ),
    'no-fallback' => ( $prm->get_param('no-fallback')               ? 1 : 0 ),
};
my $count  = 0;
my $failed = 0;
my $locale = Cpanel::Locale->get_handle();

my %locale_lookup;

@locale_lookup{ Cpanel::Locale::Utils::Display::get_locale_list($locale) } = ();
my $euid_home;
foreach my $loc ( $prm->get_param('locale') ) {
    $count++;

    if ( !exists $locale_lookup{$loc} ) {
        print "Invalid locale\n" if $verbose;
        $failed++;
        next;
    }

    my $path = $prm->get_param('dumper-format') ? "/var/cpanel/locale/export/$loc.xml" : "/var/cpanel/locale/export/$loc.xlf";
    if ( $prm->get_param("export-$loc") ) {
        $path = $prm->get_param("export-$loc");
        $path =~ s/\.[^.]+$//;    # strip any existing extension …
        if ( $prm->get_param('dumper-format') ) {
            $path .= '.xml';      # … replace it w/ .xml
        }
        else {
            $path .= '.xlf';      # … replace it w/ .xlf
        }
    }

    # expand ~/ that was treated as a string and not expanded by the shell before being put in @ARGV
    if ( substr( $path, 0, 2 ) eq '~/' ) {
        $euid_home ||= ( getpwuid($>) )[7];    # only look it up if needed, and only look it up one time
        substr( $path, 0, 2, "$euid_home/" );
    }

    my ( $head, @dir ) = reverse( split( /\//, $path ) );
    my $dir = join( '/', reverse(@dir) );
    if ( $dir && !-d $dir ) {
        if ( !Cpanel::SafeDir::MK::safemkdir($dir) ) {
            print "Could not create path '$dir': $!\n" if $verbose;
            $failed++;
            next;
        }
    }

    if ( -e $path ) {
        print "Replacing existing export file '$path'\n" if $verbose;
        unlink($path);
        if ( -e $path ) {
            print "Could not unlink '$path': $!\n" if $verbose;
            $failed++;
            next;
        }
    }

    my $error = '';

    if ( Cpanel::Locale::Utils::XML::locale_to_xml( $path, $loc, \$error, $options ) ) {
        print "$error'$loc' has been exported to '$path'.\n" if $verbose;
    }
    else {
        print "Failed to create XML file for locale '$loc': $error\n" if $verbose;
        $failed++;
        next;
    }
}

if ( !$count || $failed ) {
    if ($verbose) {
        if ($failed) {
            print "$failed out of $count failed to export.\n";
        }
        elsif ( !$count ) {
            print "No locales to export.\n";
        }
    }
    exit 1;
}

./BlackJoker Mini Shell 1.0