1#!/usr/bin/perl -w 2 3use strict; 4use warnings; 5use File::Find; 6 7my $prefix = 'I18N_OPENXPKI_UI_'; 8 9my @MANIFEST; 10 11my %tags = (); 12my $basedir = ''; 13 14foreach my $dir (@ARGV) { 15 $basedir = $dir; 16 @MANIFEST = (); 17 if (-e "$dir/MANIFEST") { 18 open my $MAN, '<', "$dir/MANIFEST"; 19 @MANIFEST = <$MAN>; 20 close $MAN; 21 foreach my $man (@MANIFEST) { 22 chomp $man; 23 } 24 } 25 find(\&extract_tags, $dir); 26} 27 28sub extract_tags { 29 my $filename = $_; 30 my $rel_name = $File::Find::name; 31 my $dir_name = $File::Find::topdir; 32 $rel_name =~ s/$basedir\///; 33 if ($File::Find::name !~ m{ \.svn }xms) { 34 if (scalar @MANIFEST > 0 && ! grep {$_ eq $rel_name} @MANIFEST) { 35 # if we have a MANIFEST file, the file needs to be in it 36 # to be searched for tags 37 return; 38 } 39 # skip hidden files or backup files 40 if ($filename =~ m{ \A \. }xms || $filename =~ m{ ~ \z }xms) { 41 return; 42 } 43 # dont scan po files itself (files in config/contrib/) 44 if ($filename =~ m{ \A openxpki.po }xms ) { 45 return; 46 } 47 open my $FILE, '<', $filename; 48 while (my $line = <$FILE>) { 49 while ($line =~ s{ ($prefix [A-Z0-9\_]+[A-Z0-9]) }{}xms) { 50 $tags{$1} = 1; 51 } 52 } 53 close $FILE; 54 } 55} 56 57print <<'XEOF'; 58 59# OpenXPKI i18n language files - these files are autogenerated by make! 60# Copyright (C) 2019 OpenXPKI Foundation 61# This file is distributed under the same license as the OpenXPKI core. 62 63msgid "" 64msgstr "" 65"Project-Id-Version: PACKAGE VERSION\n" 66"Report-Msgid-Bugs-To: \n" 67"POT-Creation-Date: 2004-09-08 14:02+0200\n" 68"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 69"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 70"Language-Team: LANGUAGE <LL@li.org>\n" 71"MIME-Version: 1.0\n" 72"Content-Type: text/plain; charset=UTF-8\n" 73"Content-Transfer-Encoding: 8bit\n" 74 75XEOF 76 77foreach my $tag (sort keys %tags) { 78 print qq{msgid "$tag"\n} . qq{msgstr ""\n}; 79} 80