This repository has been archived by the owner on Sep 11, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 833
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into…
… t3chguy/electron_settings
- Loading branch information
Showing
91 changed files
with
5,619 additions
and
777 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
#!/usr/bin/perl | ||
|
||
use strict; | ||
use warnings; | ||
use Cwd 'abs_path'; | ||
|
||
# script which checks how out of sync the i18ns are drifting | ||
|
||
# example i18n format: | ||
# "%(oneUser)sleft": "%(oneUser)sleft", | ||
|
||
$|=1; | ||
|
||
$0 =~ /^(.*\/)/; | ||
my $i18ndir = abs_path($1."/../src/i18n/strings"); | ||
my $srcdir = abs_path($1."/../src"); | ||
|
||
my $en = read_i18n($i18ndir."/en_EN.json"); | ||
|
||
my $src_strings = read_src_strings($srcdir); | ||
my $src = {}; | ||
|
||
print "Checking strings in src\n"; | ||
foreach my $tuple (@$src_strings) { | ||
my ($s, $file) = (@$tuple); | ||
$src->{$s} = $file; | ||
if (!$en->{$s}) { | ||
if ($en->{$s . '.'}) { | ||
printf ("%50s %24s\t%s\n", $file, "en_EN has fullstop!", $s); | ||
} | ||
else { | ||
$s =~ /^(.*)\.?$/; | ||
if ($en->{$1}) { | ||
printf ("%50s %24s\t%s\n", $file, "en_EN lacks fullstop!", $s); | ||
} | ||
else { | ||
printf ("%50s %24s\t%s\n", $file, "Translation missing!", $s); | ||
} | ||
} | ||
} | ||
} | ||
|
||
print "\nChecking en_EN\n"; | ||
my $count = 0; | ||
my $remaining_src = {}; | ||
foreach (keys %$src) { $remaining_src->{$_}++ }; | ||
|
||
foreach my $k (sort keys %$en) { | ||
# crappy heuristic to ignore country codes for now... | ||
next if ($k =~ /^(..|..-..)$/); | ||
|
||
if ($en->{$k} ne $k) { | ||
printf ("%50s %24s\t%s\n", "en_EN", "en_EN is not symmetrical", $k); | ||
} | ||
|
||
if (!$src->{$k}) { | ||
if ($src->{$k. '.'}) { | ||
printf ("%50s %24s\t%s\n", $src->{$k. '.'}, "src has fullstop!", $k); | ||
} | ||
else { | ||
$k =~ /^(.*)\.?$/; | ||
if ($src->{$1}) { | ||
printf ("%50s %24s\t%s\n", $src->{$1}, "src lacks fullstop!", $k); | ||
} | ||
else { | ||
printf ("%50s %24s\t%s\n", '???', "Not present in src?", $k); | ||
} | ||
} | ||
} | ||
else { | ||
$count++; | ||
delete $remaining_src->{$k}; | ||
} | ||
} | ||
printf ("$count/" . (scalar keys %$src) . " strings found in src are present in en_EN\n"); | ||
foreach (keys %$remaining_src) { | ||
print "missing: $_\n"; | ||
} | ||
|
||
opendir(DIR, $i18ndir) || die $!; | ||
my @files = readdir(DIR); | ||
closedir(DIR); | ||
foreach my $lang (grep { -f "$i18ndir/$_" && !/(basefile|en_EN)\.json/ } @files) { | ||
print "\nChecking $lang\n"; | ||
|
||
my $map = read_i18n($i18ndir."/".$lang); | ||
my $count = 0; | ||
|
||
my $remaining_en = {}; | ||
foreach (keys %$en) { $remaining_en->{$_}++ }; | ||
|
||
foreach my $k (sort keys %$map) { | ||
{ | ||
no warnings 'uninitialized'; | ||
my $vars = {}; | ||
while ($k =~ /%\((.*?)\)s/g) { | ||
$vars->{$1}++; | ||
} | ||
while ($map->{$k} =~ /%\((.*?)\)s/g) { | ||
$vars->{$1}--; | ||
} | ||
foreach my $var (keys %$vars) { | ||
if ($vars->{$var} != 0) { | ||
printf ("%10s %24s\t%s\n", $lang, "Broken var ($var)s", $k); | ||
} | ||
} | ||
} | ||
|
||
if ($en->{$k}) { | ||
if ($map->{$k} eq $k) { | ||
printf ("%10s %24s\t%s\n", $lang, "Untranslated string?", $k); | ||
} | ||
$count++; | ||
delete $remaining_en->{$k}; | ||
} | ||
else { | ||
if ($en->{$k . "."}) { | ||
printf ("%10s %24s\t%s\n", $lang, "en_EN has fullstop!", $k); | ||
next; | ||
} | ||
|
||
$k =~ /^(.*)\.?$/; | ||
if ($en->{$1}) { | ||
printf ("%10s %24s\t%s\n", $lang, "en_EN lacks fullstop!", $k); | ||
next; | ||
} | ||
|
||
printf ("%10s %24s\t%s\n", $lang, "Not present in en_EN", $k); | ||
} | ||
} | ||
|
||
if (scalar keys %$remaining_en < 100) { | ||
foreach (keys %$remaining_en) { | ||
printf ("%10s %24s\t%s\n", $lang, "Not yet translated", $_); | ||
} | ||
} | ||
|
||
printf ("$count/" . (scalar keys %$en) . " strings translated\n"); | ||
} | ||
|
||
sub read_i18n { | ||
my $path = shift; | ||
my $map = {}; | ||
$path =~ /.*\/(.*)$/; | ||
my $lang = $1; | ||
|
||
open(FILE, "<", $path) || die $!; | ||
while(<FILE>) { | ||
if ($_ =~ m/^(\s+)"(.*?)"(: *)"(.*?)"(,?)$/) { | ||
my ($indent, $src, $colon, $dst, $comma) = ($1, $2, $3, $4, $5); | ||
$src =~ s/\\"/"/g; | ||
$dst =~ s/\\"/"/g; | ||
|
||
if ($map->{$src}) { | ||
printf ("%10s %24s\t%s\n", $lang, "Duplicate translation!", $src); | ||
} | ||
$map->{$src} = $dst; | ||
} | ||
} | ||
close(FILE); | ||
|
||
return $map; | ||
} | ||
|
||
sub read_src_strings { | ||
my $path = shift; | ||
|
||
use File::Find; | ||
use File::Slurp; | ||
|
||
my $strings = []; | ||
|
||
my @files; | ||
find( sub { push @files, $File::Find::name if (-f $_ && /\.jsx?$/) }, $path ); | ||
foreach my $file (@files) { | ||
my $src = read_file($file); | ||
$src =~ s/'\s*\+\s*'//g; | ||
$src =~ s/"\s*\+\s*"//g; | ||
|
||
$file =~ s/^.*\/src/src/; | ||
while ($src =~ /_t\(\s*'(.*?[^\\])'/sg) { | ||
my $s = $1; | ||
$s =~ s/\\'/'/g; | ||
push @$strings, [$s, $file]; | ||
} | ||
while ($src =~ /_t\(\s*"(.*?[^\\])"/sg) { | ||
push @$strings, [$1, $file]; | ||
} | ||
} | ||
|
||
return $strings; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#!/usr/bin/perl -ni | ||
|
||
use strict; | ||
use warnings; | ||
|
||
# script which synchronises i18n strings to include punctuation. | ||
# i've cherry-picked ones which seem to have diverged between the different translations | ||
# from TextForEvent, causing missing events all over the place | ||
|
||
BEGIN { | ||
$::fixups = [split(/\n/, <<EOT | ||
%(targetName)s accepted the invitation for %(displayName)s. | ||
%(targetName)s accepted an invitation. | ||
%(senderName)s requested a VoIP conference. | ||
%(senderName)s invited %(targetName)s. | ||
%(senderName)s banned %(targetName)s. | ||
%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s. | ||
%(senderName)s set their display name to %(displayName)s. | ||
%(senderName)s removed their display name (%(oldDisplayName)s). | ||
%(senderName)s removed their profile picture. | ||
%(senderName)s changed their profile picture. | ||
%(senderName)s set a profile picture. | ||
VoIP conference started. | ||
%(targetName)s joined the room. | ||
VoIP conference finished. | ||
%(targetName)s rejected the invitation. | ||
%(targetName)s left the room. | ||
%(senderName)s unbanned %(targetName)s. | ||
%(senderName)s kicked %(targetName)s. | ||
%(senderName)s withdrew %(targetName)s's inivitation. | ||
%(targetName)s left the room. | ||
%(senderDisplayName)s changed the topic to "%(topic)s". | ||
%(senderDisplayName)s changed the room name to %(roomName)s. | ||
%(senderDisplayName)s sent an image. | ||
%(senderName)s answered the call. | ||
%(senderName)s ended the call. | ||
%(senderName)s placed a %(callType)s call. | ||
%(senderName)s sent an invitation to %(targetDisplayName)s to join the room. | ||
%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s). | ||
%(senderName)s changed the power level of %(powerLevelDiffText)s. | ||
For security, this session has been signed out. Please sign in again. | ||
You need to log back in to generate end-to-end encryption keys for this device and submit the public key to your homeserver. This is a once off; sorry for the inconvenience. | ||
A new password must be entered. | ||
Guests can't set avatars. Please register. | ||
Failed to set avatar. | ||
Unable to verify email address. | ||
Guests can't use labs features. Please register. | ||
A new password must be entered. | ||
Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved. | ||
Guests cannot join this room even if explicitly invited. | ||
EOT | ||
)]; | ||
} | ||
|
||
# example i18n format: | ||
# "%(oneUser)sleft": "%(oneUser)sleft", | ||
|
||
# script called with the line of the file to be checked | ||
my $sub = 0; | ||
if ($_ =~ m/^(\s+)"(.*?)"(: *)"(.*?)"(,?)$/) { | ||
my ($indent, $src, $colon, $dst, $comma) = ($1, $2, $3, $4, $5); | ||
$src =~ s/\\"/"/g; | ||
$dst =~ s/\\"/"/g; | ||
|
||
foreach my $fixup (@{$::fixups}) { | ||
my $dotless_fixup = substr($fixup, 0, -1); | ||
|
||
if ($src eq $dotless_fixup) { | ||
print STDERR "fixing up src: $src\n"; | ||
$src .= '.'; | ||
$sub = 1; | ||
} | ||
|
||
if ($src eq $fixup && $dst !~ /\.$/) { | ||
print STDERR "fixing up dst: $dst\n"; | ||
$dst .= '.'; | ||
$sub = 1; | ||
} | ||
|
||
if ($sub) { | ||
$src =~ s/"/\\"/g; | ||
$dst =~ s/"/\\"/g; | ||
print qq($indent"$src"$colon"$dst"$comma\n); | ||
last; | ||
} | ||
} | ||
} | ||
|
||
if (!$sub) { | ||
print $_; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.