119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#!/usr/bin/perl 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy @translator_help = ( 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. The strings in e2fsck's problem.c can be very hard to translate,\n", 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. since the strings are expanded in two different ways. First of all,\n", 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. there is an \@-expansion, where strings like \"\@i\" are expanded to\n", 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. \"inode\", and so on. In order to make it easier for translators, the\n", 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. e2fsprogs po template file has been enhanced with comments that show\n", 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. the \@-expansion, for the strings in the problem.c file.\n", 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#.\n", 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. Translators are free to use the \@-expansion facility if they so\n", 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. choose, by providing translations for strings in e2fsck/message.c.\n", 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. These translation can completely replace an expansion; for example,\n", 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. if \"bblock\" (which indicated that \"\@b\" would be expanded to \"block\")\n", 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. is translated as \"ddatenverlust\", then \"\@d\" will be expanded to\n", 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. \"datenverlust\". Alternatively, translators can simply not use the\n", 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. \@-expansion facility at all.\n", 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#.\n", 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. The second expansion which is done for e2fsck's problem.c messages is\n", 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. a dynamic %-expansion, which expands %i as an inode number, and so\n", 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. on. A table of these expansions can be found below. Note that\n", 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %-expressions that begin with \"%D\" and \"%I\" are two-character\n", 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. expansions; so for example, \"%Iu\" expands to the inode's user id\n", 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. ownership field (inode->i_uid).\n", 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. \n", 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %b <blk> block number\n", 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %B <blkcount> integer\n", 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %c <blk2> block number\n", 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Di <dirent> -> ino inode number\n", 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Dn <dirent> -> name string\n", 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Dr <dirent> -> rec_len\n", 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Dl <dirent> -> name_len\n", 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Dt <dirent> -> filetype\n", 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %d <dir> inode number\n", 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %g <group> integer\n", 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %i <ino> inode number\n", 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Is <inode> -> i_size\n", 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %IS <inode> -> i_extra_isize\n", 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Ib <inode> -> i_blocks\n", 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Il <inode> -> i_links_count\n", 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Im <inode> -> i_mode\n", 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %IM <inode> -> i_mtime\n", 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %IF <inode> -> i_faddr\n", 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %If <inode> -> i_file_acl\n", 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Id <inode> -> i_dir_acl\n", 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Iu <inode> -> i_uid\n", 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Ig <inode> -> i_gid\n", 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %j <ino2> inode number\n", 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %m <com_err error message>\n", 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %N <num>\n", 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %p ext2fs_get_pathname of directory <ino>\n", 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %P ext2fs_get_pathname of <dirent>->ino with <ino2> as\n", 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. the containing directory. (If dirent is NULL\n", 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. then return the pathname of directory <ino2>)\n", 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %q ext2fs_get_pathname of directory <dir>\n", 5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %Q ext2fs_get_pathname of directory <ino> with <dir> as\n", 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. the containing directory.\n", 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %s <str> miscellaneous string\n", 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %S backup superblock\n", 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#. %X <num> hexadecimal format\n", 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project "#.\n"); 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy $is_problem_file = 0; 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy $save_msg; 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy $msg_accum = ""; 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy $msg; 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy $expanded = 0; 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectmy $lines = 0; 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectsub do_expand { 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@a/extended attribute/g; 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@A/error allocating/g; 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@b/block/g; 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@B/bitmap/g; 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@c/compress/g; 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@C/conflicts with some other fs block/g; 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@i/inode/g; 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@I/illegal/g; 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@j/journal/g; 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@D/deleted/g; 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@d/directory/g; 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@e/entry/g; 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@E/entry '%Dn' in %p (%i)/g; 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@f/filesystem/g; 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@F/for inode %i (%Q) is/g; 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@g/group/g; 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@h/HTREE directory inode/g; 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@l/lost+found/g; 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@L/is a link/g; 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@m/multiply-claimed/g; 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@n/invalid/g; 9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@o/orphaned/g; 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@p/problem in/g; 9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@r/root inode/g; 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@s/should be/g; 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@S/superblock/g; 9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@u/unattached/g; 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@v/device/g; 993984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt $msg =~ s/\@x/extent/g; 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@z/zero-length/g; 10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg =~ s/\@\@/@/g; 10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectwhile (<>) { 10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $lines++; 10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ($lines == 6) { 10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project print @translator_help; 10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (/^#: /) 11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project { 11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $is_problem_file = (/^#: e2fsck\/problem/) ? 1 : 0; 11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg = ""; 11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (/^msgid / && $is_problem_file) { 11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ($msg) = /^msgid "(.*)"$/; 11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $save_msgid = $_; 11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ($msg =~ /\@/) { 11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $expanded++; 12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project &do_expand(); 12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ($msg ne "") { 12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg_accum = $msg_accum . "#. \@-expanded: $msg\n"; 12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next; 12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (/^"/ && $is_problem_file) { 12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ($msg) = /^"(.*)"$/; 12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $save_msgid = $save_msgid . $_; 13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ($msg =~ /\@/) { 13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $expanded++; 13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project &do_expand(); 13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg_accum = $msg_accum . "#. \@-expanded: $msg\n"; 13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project next; 13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (/^msgstr / && $is_problem_file) { 13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ($expanded) { 13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project print $msg_accum; 14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project print $save_msgid; 14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $msg_accum = ""; 14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project $expanded = 0; 14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project print $_; 14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 147