Mhurd has submitted this change and it was merged. Change subject: Update storyboard strings, qqq files when master files change ......................................................................
Update storyboard strings, qqq files when master files change en.lproj/Main_iPhone.strings now updates automatically when new things appear in Main_iPhone.storyboard. qqq.lproj/*.strings files now have stub entries added for any new entries in en.lproj/*.strings files. These should be very visible in code review if they don't get caught before committing. :) Extra entries from the qqq.lproj no longer in en.lproj are also removed. Change-Id: Ibd01ba5eb754ec9aaafddf0391496c8c527273cc --- M Wikipedia.xcodeproj/project.pbxproj A scripts/update-qqq.php M wikipedia/qqq.lproj/Localizable.strings M wikipedia/qqq.lproj/Main_iPhone.strings 4 files changed, 296 insertions(+), 70 deletions(-) Approvals: Mhurd: Verified; Looks good to me, approved diff --git a/Wikipedia.xcodeproj/project.pbxproj b/Wikipedia.xcodeproj/project.pbxproj index be38747..decc9aa 100644 --- a/Wikipedia.xcodeproj/project.pbxproj +++ b/Wikipedia.xcodeproj/project.pbxproj @@ -174,6 +174,7 @@ D4B0AE0B19366A2C00F0AC90 /* ReadingActionFunnel.m in Sources */ = {isa = PBXBuildFile; fileRef = D4B0AE0A19366A2C00F0AC90 /* ReadingActionFunnel.m */; }; D4B0AE0E19366A5400F0AC90 /* LoginFunnel.m in Sources */ = {isa = PBXBuildFile; fileRef = D4B0AE0D19366A5400F0AC90 /* LoginFunnel.m */; }; D4BC22B4181E9E6300CAC673 /* empty.png in Resources */ = {isa = PBXBuildFile; fileRef = D4BC22B3181E9E6300CAC673 /* empty.png */; }; + D4C16A6819709CDF00CD91AD /* (null) in Resources */ = {isa = PBXBuildFile; }; D4E8A8A4190835C100DA4765 /* DataMigrator.m in Sources */ = {isa = PBXBuildFile; fileRef = D4E8A8A3190835C100DA4765 /* DataMigrator.m */; }; D4E8A8A719084F1300DA4765 /* SQLiteHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D4E8A8A619084F1300DA4765 /* SQLiteHelper.m */; }; D4E8A8A919085CEA00DA4765 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D4E8A8A819085CEA00DA4765 /* libsqlite3.dylib */; }; @@ -470,6 +471,7 @@ C9928B8518AD5C6A00FCCA9A /* DownloadWikipediaZeroMessageOp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DownloadWikipediaZeroMessageOp.m; sourceTree = "<group>"; }; D42E75E918D11237002EA7E5 /* MWLanguageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWLanguageInfo.h; path = "mw-support/MWLanguageInfo.h"; sourceTree = "<group>"; }; D42E75EA18D11237002EA7E5 /* MWLanguageInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWLanguageInfo.m; path = "mw-support/MWLanguageInfo.m"; sourceTree = "<group>"; }; + D442F58619709E540013A2CA /* qqq */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = qqq; path = qqq.lproj/Main_iPhone.strings; sourceTree = "<group>"; }; D44F630618DA77FF00EAD1DD /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = "<group>"; }; D44F630818DA781400EAD1DD /* ast */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ast; path = ast.lproj/InfoPlist.strings; sourceTree = "<group>"; }; D44F630918DA781400EAD1DD /* ast */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ast; path = ast.lproj/Localizable.strings; sourceTree = "<group>"; }; @@ -592,7 +594,7 @@ D4991440181D51DE00E6073C /* Wikipedia-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Wikipedia-Info.plist"; sourceTree = "<group>"; }; D4991444181D51DE00E6073C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; D4991446181D51DE00E6073C /* Wikipedia-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Wikipedia-Prefix.pch"; sourceTree = "<group>"; }; - D4991447181D51DE00E6073C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; + D4991447181D51DE00E6073C /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; D4991448181D51DE00E6073C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; D499144B181D51DE00E6073C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPhone.storyboard; sourceTree = "<group>"; }; D4991453181D51DE00E6073C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = wikipedia/Images.xcassets; sourceTree = "<group>"; }; @@ -674,6 +676,8 @@ D4C16A5F19708AF400CD91AD /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/Main_iPhone.strings; sourceTree = "<group>"; }; D4C16A6019708AFB00CD91AD /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Main_iPhone.strings"; sourceTree = "<group>"; }; D4C16A6119708B0E00CD91AD /* krc */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = krc; path = krc.lproj/Main_iPhone.strings; sourceTree = "<group>"; }; + D4C16A6419709CDF00CD91AD /* qqq */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = qqq; path = qqq.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + D4C16A6519709CDF00CD91AD /* qqq */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = qqq; path = qqq.lproj/Localizable.strings; sourceTree = "<group>"; }; D4CA33D71959FDEC0093588B /* ArticleData 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "ArticleData 2.xcdatamodel"; sourceTree = "<group>"; }; D4DE203018283FF200148CA2 /* CommunicationBridgeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommunicationBridgeTests.m; sourceTree = "<group>"; }; D4E8A8A2190835C100DA4765 /* DataMigrator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataMigrator.h; path = wikipedia/DataMigrator.h; sourceTree = SOURCE_ROOT; }; @@ -1573,9 +1577,11 @@ buildPhases = ( D4991431181D51DE00E6073C /* Sources */, D4991432181D51DE00E6073C /* Frameworks */, - D4991433181D51DE00E6073C /* Resources */, 04272E7619404CDF00CC682F /* ShellScript */, 04272E75193FF7F000CC682F /* ShellScript */, + D4C16A621970946900CD91AD /* ShellScript */, + D4C16A631970949A00CD91AD /* ShellScript */, + D4991433181D51DE00E6073C /* Resources */, ); buildRules = ( ); @@ -1677,6 +1683,7 @@ bik, zza, tg, + qqq, ); mainGroup = D499142C181D51DE00E6073C; productRefGroup = D4991436181D51DE00E6073C /* Products */; @@ -1707,6 +1714,7 @@ 04292FF4185FBA70002A13FC /* SearchResultPrototypeView.xib in Resources */, 04B0EA47190B2319007458AF /* PreviewLicenseView.xib in Resources */, 04CCCFEF1935093A00E3F60C /* SecondaryMenuRowView.xib in Resources */, + D4C16A6819709CDF00CD91AD /* (null) in Resources */, 047E74141860509000916964 /* SavedPagesResultPrototypeView.xib in Resources */, 04123630189C29EA00E0CF8E /* abuse-filter-disallo...@2x.png in Resources */, D4BC22B4181E9E6300CAC673 /* empty.png in Resources */, @@ -1752,6 +1760,37 @@ runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "scripts/run-grunt.sh"; + }; + D4C16A621970946900CD91AD /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/wikipedia/Base.lproj/Main_iPhone.storyboard", + ); + outputPaths = ( + "$(SRCROOT)/wikipedia/en.lproj/Main_iPhone.strings", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "scripts/update-storyboard-strings.php"; + }; + D4C16A631970949A00CD91AD /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/wikipedia/en.lproj/Main_iPhone.strings", + "$(SRCROOT)/wikipedia/en.lproj/InfoPlist.strings", + "$(SRCROOT)/wikipedia/en.lproj/Localizable.strings", + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "scripts/update-qqq.php"; }; /* End PBXShellScriptBuildPhase section */ @@ -1976,6 +2015,7 @@ D467907D195AD43700C4E44D /* or */, D4679084195AD48900C4E44D /* tg-cyrl */, D4679087195AD49300C4E44D /* th */, + D4C16A6419709CDF00CD91AD /* qqq */, ); name = InfoPlist.strings; sourceTree = "<group>"; @@ -2027,6 +2067,7 @@ D467908A195AD49B00C4E44D /* tr */, D467908B195AD4A500C4E44D /* zh-hans */, D467908C195AD4AB00C4E44D /* zh-hant */, + D4C16A6519709CDF00CD91AD /* qqq */, ); name = Localizable.strings; sourceTree = "<group>"; @@ -2035,8 +2076,8 @@ isa = PBXVariantGroup; children = ( D499144B181D51DE00E6073C /* Base */, - D46CD8CC18A1ACA20042959E /* fr */, D4C0464E196F48FF007E921C /* en */, + D46CD8CC18A1ACA20042959E /* fr */, D4C16A20197089CB00CD91AD /* ru */, D4C16A21197089D000CD91AD /* fi */, D4C16A22197089DB00CD91AD /* ar */, @@ -2097,6 +2138,7 @@ D4C16A5F19708AF400CD91AD /* th */, D4C16A6019708AFB00CD91AD /* pt-BR */, D4C16A6119708B0E00CD91AD /* krc */, + D442F58619709E540013A2CA /* qqq */, ); name = Main_iPhone.storyboard; sourceTree = "<group>"; diff --git a/scripts/update-qqq.php b/scripts/update-qqq.php new file mode 100755 index 0000000..abad103 --- /dev/null +++ b/scripts/update-qqq.php @@ -0,0 +1,243 @@ +#!/usr/bin/php -q +<?php + +/** + * AppleFFS class implements support for Apple .strings files. + * This class reads and writes only UTF-8 files. + * + * @author Brion Vibber <bvib...@wikimedia.org> + * + * derived from the AppleFFS in Translate extension, but hacked down + */ +class AppleStringsFile { + // READ + + public function readFromFile( $path ) { + $data = file_get_contents( $path ); + return $this->readFromVariable( $data ); + } + + public function write( $data ) { + return $this->writeReal( $data ); + } + + /** + * @param array $data + * @return array Parsed data. + * @throws Exception + */ + public function readFromVariable( $data ) { + $lines = explode( "\n", $data ); + $authors = $messages = array(); + $linecontinuation = false; + + $value = ''; + foreach ( $lines as $line ) { + if ( $linecontinuation ) { + $linecontinuation = false; + $valuecont = $line; + $value .= $valuecont; + } else { + if ( $line === '' ) { + continue; + } + + if ( substr( $line, 0, 2 ) === '//' ) { + // Single-line comment + $match = array(); + $ok = preg_match( '~//\s*Author:\s*(.*)~', $line, $match ); + if ( $ok ) { + $authors[] = $match[1]; + } + continue; + } + + if ( substr( $line, 0, 2 ) === '/*' ) { + if ( strpos( $line, '*/', 2 ) === false ) { + $linecontinuation = true; + } + continue; + } + + list( $key, $value ) = self::readRow( $line ); + $messages[$key] = $value; + } + } + + return array( + 'AUTHORS' => $authors, + 'MESSAGES' => $messages, + ); + } + + /** + * Parses non-empty strings file row to key and value. + * @param string $line + * @throws Exception + * @return array( string $key, string $val ) + */ + public static function readRow( $line ) { + $match = array(); + if ( preg_match( '/^"((?:\\\"|[^"])*)"\s*=\s*"((?:\\\"|[^"])*)"\s*;\s*$/', $line, $match ) ) { + $key = self::unescapeString( $match[1] ); + $value = self::unescapeString( $match[2] ); + if ( $key === '' ) { + throw new Exception( "Empty key in line $line" ); + } + return array( $key, $value ); + } else { + throw new Exception( "Unrecognized line format: $line" ); + } + } + + // Write + + /** + * @param MessageCollection $collection + * @return string + */ + protected function writeReal( array $collection ) { + $header = $this->doHeader( $collection ); + $header .= $this->doAuthors( $collection ); + $header .= "\n"; + + $output = ''; + + /** + * @var TMessage $m + */ + foreach ( $collection['MESSAGES'] as $key => $m ) { + $value = $m; + + if ( $value === '' ) { + continue; + } + + $output .= self::writeRow( $key, $value ); + } + + if ( $output ) { + $data = $header . $output; + } else { + $data = $header; + } + + return $data; + } + + /** + * Writes well-formed properties file row with key and value. + * @param string $key + * @param string $value + * @return string + */ + public static function writeRow( $key, $value ) { + return self::quoteString( $key ) . ' = ' . self::quoteString( $value ) . ';' . "\n"; + } + + /** + * Quote and escape Obj-C-style strings for .strings format + */ + protected static function quoteString( $str ) { + return '"' . self::escapeString( $str ) . '"'; + } + + /** + * Escape Obj-C-style strings; use backslash-escapes etc. + * + * @param string $str + * @return string + */ + protected static function escapeString( $str ) { + $str = addcslashes( $str, '\\"' ); + $str = str_replace( "\n", '\\n', $str ); + return $str; + } + + /** + * Unescape Obj-C-style strings; can include backslash-escapes + * + * @todo support \UXXXX + * + * @param string $str + * @return string + */ + protected static function unescapeString( $str ) { + return stripcslashes( $str ); + } + + /** + * @param MessageCollection $collection + * @return string + */ + protected function doHeader( array $collection ) { + if ( isset( $this->extra['header'] ) ) { + $output = $this->extra['header']; + } else { + $wgSitename = 'translatewiki.net'; + + $name = 'Message documentation'; + $native = 'Message documentation'; + $output = "// Messages for $name ($native)\n"; + $output .= "// Exported from $wgSitename\n"; + } + + return $output; + } + + /** + * @param MessageCollection $collection + * @return string + */ + protected function doAuthors( array $collection ) { + $output = ''; + $authors = $collection['AUTHORS']; + + foreach ( $authors as $author ) { + $output .= "// Author: $author\n"; + } + + return $output; + } +} + +function fillStubs( &$en, &$qqq ) { + $enKeys = array_keys( $en['MESSAGES'] ); + $qqqKeys = array_keys( $qqq['MESSAGES'] ); + $missing = array_diff( $enKeys, $qqqKeys ); + $extra = array_diff( $qqqKeys, $enKeys ); + + if (count( $missing ) > 0 || count( $extra ) > 0 ) { + foreach( $missing as $key ) { + $qqq['MESSAGES'][$key] = 'MISSING DESCRIPTION; DO NOT COMMIT FILE YET'; + } + foreach( $extra as $key ) { + unset($qqq['MESSAGES'][$key]); + } + return true; + } else { + return false; + } +} + +function processStubs( $filename ) { + $base = realpath( dirname( __DIR__ ) ) . "/wikipedia"; + + $parser = new AppleStringsFile(); + + $file_en = "$base/en.lproj/$filename.strings"; + $file_qqq = "$base/qqq.lproj/$filename.strings"; + + $data_en = $parser->readFromFile( $file_en ); + $data_qqq = $parser->readFromFile( $file_qqq ); + + if (fillStubs( $data_en, $data_qqq )) { + $out = $parser->write( $data_qqq ); + file_put_contents( $file_qqq, $out ); + echo "Updated qqq.lproj/$filename.strings\n"; + } +} + +processStubs('InfoPlist'); +processStubs('Main_iPhone'); +processStubs('Localizable'); diff --git a/wikipedia/qqq.lproj/Localizable.strings b/wikipedia/qqq.lproj/Localizable.strings index aee3ca4..1014768 100644 --- a/wikipedia/qqq.lproj/Localizable.strings +++ b/wikipedia/qqq.lproj/Localizable.strings @@ -8,7 +8,6 @@ "article-languages-downloading" = "Alert text shown when obtaining list of languages in which an article is available"; "article-languages-filter-placeholder" = "Filter languages text box placeholder text."; "language-button-text" = "Label for 'other languages' button in content area footer. %d is placeholder for the number of available languages; note that support for PLURAL string marking is not yet available, so make your message generic if possible for now."; -"language-button-other-languages" = "Label for 'other languages' button in content area. Button also shows the number of available languages, but an indeterminate plural should be used here."; "history-label" = "Header label for screen showing the users' in-app browsing history.\n{{Identical|Recent}}"; "history-section-today" = "Subsection label for list of articles browsed today.\n{{Identical|Today}}"; "history-section-yesterday" = "Subsection label for list of articles browsed yesterday.\n{{Identical|Yesterday}}"; @@ -62,7 +61,6 @@ "wikitext-upload-save-anonymously" = "Button text for saving without logging in"; "wikitext-upload-save-anonymously-warning" = "Button sub-text informing user or draw-backs of not signing in before saving wikitext. Parameters:\n* $1 - sign in button text"; "wikitext-upload-save-terms-and-license" = "Button text for information about the Terms of Use and edit license. Parameters:\n$1 - 'Terms of Use' link\n* $2 - license name link"; -"wikitext-upload-save-terms" = "Formal name of site Terms of Use"; "wikitext-upload-save-license-name" = "Name of license user edits are saved under - presently CC BY-SA 3.0"; "open-link-title" = "Title for popup menu of terms/license link options."; "open-link-cancel" = "Text for cancel button in popup menu of terms/license link options"; @@ -149,3 +147,9 @@ "license-footer-text" = "Brief footer text linking to CC-BY-SA license. '$1' is placeholder for the license-footer-name message"; "license-footer-name" = "License short name; usually leave untranslated as CC-BY-SA 3.0"; "table-of-contents-heading" = "Header text appearing above the first section in the table of contents"; +"wikitext-upload-save-terms-name" = "Formal name of Wikipedia 'Terms of Use' in local language, used as a link"; +"page_protected_autoconfirmed" = "Brief description of Wikipedia 'autoconfirmed' protection level, shown when editing a page that is protected."; +"page_protected_sysop" = "Brief description of Wikipedia 'sysop' protection level, shown when editing a page that is protected."; +"page_protected_other" = "Brief description of Wikipedia unknown protection level, shown when editing a page that is protected."; +"page_protected_can_not_edit" = "Text of alert dialog shown when trying to edit a page that is protected beyond what the user can edit."; +"page_protected_can_not_edit_title" = "Title of alert dialog shown when trying to edit a page that is protected beyond what the user can edit."; diff --git a/wikipedia/qqq.lproj/Main_iPhone.strings b/wikipedia/qqq.lproj/Main_iPhone.strings index 342b360..1ef24b8 100644 --- a/wikipedia/qqq.lproj/Main_iPhone.strings +++ b/wikipedia/qqq.lproj/Main_iPhone.strings @@ -1,99 +1,36 @@ +// Messages for Message documentation (Message documentation) +// Exported from translatewiki.net -/* Class = "IBUIButton"; normalTitle = "Show another captcha"; ObjectID = "21c-U6-yfo"; */ "21c-U6-yfo.normalTitle" = "Label for button on captcha screen to fetch and show another captcha image"; - -/* Class = "IBUILabel"; text = "github repo"; ObjectID = "3gs-D6-glW"; */ "3gs-D6-glW.text" = "label for link to project source on github"; - -/* Class = "IBUILabel"; text = "wikimedia"; ObjectID = "5KU-bp-5Fs"; */ "5KU-bp-5Fs.text" = "label for links to project source"; - -/* Class = "IBUITextField"; placeholder = "User name"; ObjectID = "5cT-2Y-0Ie"; */ "5cT-2Y-0Ie.placeholder" = "Label on login screen "; - -/* Class = "IBUILabel"; text = "NSDate-Extensions"; ObjectID = "6O2-5x-h41"; */ "6O2-5x-h41.text" = "Name of an open-source library used in the project; usually do not translate."; - -/* Class = "IBUILabel"; text = "Saved pages are pretty awesome. Think of them as bookmarks that you can access when you are offline."; ObjectID = "GiD-Rj-wb7"; */ "GiD-Rj-wb7.text" = "Explanatory text shown on saved pages list when no saved pages are present."; - -/* Class = "IBUILabel"; text = "Preview"; ObjectID = "LfM-01-aCF"; */ "LfM-01-aCF.text" = "Button text for 'Preview' button on edit screen"; - -/* Class = "IBUILabel"; text = "Skip"; ObjectID = "P6J-IE-CiO"; */ "P6J-IE-CiO.text" = "Button text for 'Skip' button on onboarding screen that offers to log in or sign up"; - -/* Class = "IBUITextField"; placeholder = "Password"; ObjectID = "PCr-0J-fBj"; */ "PCr-0J-fBj.placeholder" = "Placeholder label text for password field on create-account screen"; - -/* Class = "IBUILabel"; text = "Canonical Language"; ObjectID = "SER-n4-DZC"; */ "SER-n4-DZC.text" = "Unused; do not translate"; - -/* Class = "IBUITextField"; placeholder = "Re-type password"; ObjectID = "UgH-77-lyp"; */ "UgH-77-lyp.placeholder" = "Placeholder label text for second password field on create-account screen"; - -/* Class = "IBUILabel"; text = "No saved pages yet."; ObjectID = "W1c-wQ-1pa"; */ "W1c-wQ-1pa.text" = "Label text shown on saved pages list when there are no saved pages."; - -/* Class = "IBUILabel"; text = "Log in"; ObjectID = "Wff-o9-AdH"; */ "Wff-o9-AdH.text" = "Button text for 'Log in' button"; - -/* Class = "IBUILabel"; text = "Label"; ObjectID = "XkB-Xo-Xq0"; */ "XkB-Xo-Xq0.text" = "Unused; do not translate"; - -/* Class = "IBUILabel"; text = "Test Zero Label Text"; ObjectID = "aCV-ih-PXn"; */ "aCV-ih-PXn.text" = "Unused; do not translate"; - -/* Class = "IBUILabel"; text = "No recent pages yet."; ObjectID = "aUp-0e-F6i"; */ "aUp-0e-F6i.text" = "Label text shown on 'recent pages' list when there are no recent pages."; - -/* Class = "IBUILabel"; text = "Create Account"; ObjectID = "c3c-PU-Exz"; */ "c3c-PU-Exz.text" = "Button to Create Account on the onboarding screen"; - -/* Class = "IBUILabel"; text = "Label"; ObjectID = "cbH-8H-z54"; */ "cbH-8H-z54.text" = "Unused; do not translate"; - -/* Class = "IBUILabel"; text = "Hpple"; ObjectID = "eSk-uQ-Ran"; */ "eSk-uQ-Ran.text" = "Name of an open-source library used in the project; usually do not translate."; - -/* Class = "IBUITextField"; placeholder = "Enter CAPTCHA text from image above"; ObjectID = "gPg-cg-Yjy"; */ "gPg-cg-Yjy.placeholder" = "Placeholder for input text on captcha input screen"; - -/* Class = "IBUILabel"; text = "main repo"; ObjectID = "gzT-kN-7kp"; */ "gzT-kN-7kp.text" = "label for link to project source on Wikimedia Gerrit"; - -/* Class = "IBUILabel"; text = "Already have an account? Log in"; ObjectID = "heA-3K-nhS"; */ "heA-3K-nhS.text" = "Button label on onboarding screen offering to log in instead of creating account"; - -/* Class = "IBUILabel"; text = "Recent pages are not as awesome as Saved pages. They are not available for Offline Reading."; ObjectID = "huU-kO-aYI"; */ "huU-kO-aYI.text" = "Explanatory text shown on recent pages list when there are no recent pages"; - -/* Class = "IBUILabel"; text = "credits"; ObjectID = "ieH-d1-Ds7"; */ "ieH-d1-Ds7.text" = "placeholder text; do not translate"; - -/* Class = "IBUILabel"; text = "Create Account"; ObjectID = "jiW-Cg-oL3"; */ "jiW-Cg-oL3.text" = "Button label to create account"; - -/* Class = "IBUILabel"; text = "Language"; ObjectID = "jxY-ej-I9e"; */ "jxY-ej-I9e.text" = "placeholder text; do not translate"; - -/* Class = "IBUITextField"; placeholder = "Password"; ObjectID = "kVb-lx-d6C"; */ "kVb-lx-d6C.placeholder" = "Placeholder label for login password field"; - -/* Class = "IBUITextField"; placeholder = "User name"; ObjectID = "mAk-1N-jPC"; */ "mAk-1N-jPC.placeholder" = "Placeholder label for login username field"; - -/* Class = "IBUILabel"; text = "Label"; ObjectID = "nI1-bn-0Ii"; */ "nI1-bn-0Ii.text" = "placeholder text; do not translate"; - -/* Class = "IBUILabel"; text = "WikiFont"; ObjectID = "qQl-8k-ux4"; */ "qQl-8k-ux4.text" = "Name of open-source font project on about screen. Usually do not translate."; - -/* Class = "IBUITextField"; placeholder = "Email address (optional)"; ObjectID = "rKI-nq-3p7"; */ "rKI-nq-3p7.placeholder" = "Placeholder text for email field on create account form"; - -/* Class = "IBUILabel"; text = "external"; ObjectID = "ven-ec-xzg"; */ "ven-ec-xzg.text" = "placeholder text; do not translate"; - -/* Class = "IBUILabel"; text = "Create account"; ObjectID = "wkl-j8-wLX"; */ "wkl-j8-wLX.text" = "Button label to go to Create Account form from Login form"; -- To view, visit https://gerrit.wikimedia.org/r/145708 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ibd01ba5eb754ec9aaafddf0391496c8c527273cc Gerrit-PatchSet: 3 Gerrit-Project: apps/ios/wikipedia Gerrit-Branch: master Gerrit-Owner: Brion VIBBER <br...@wikimedia.org> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> Gerrit-Reviewer: Mhurd <mh...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits