Skip to content

Commit 8f5bc56

Browse files
authored
Merge pull request #585 from woocommerce/feature/add-metadata-translations
Feature/add metadata translations
2 parents a61f5bc + 8bafbd9 commit 8f5bc56

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+499
-0
lines changed

fastlane/Deliverfile

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# The Deliverfile allows you to store various App Store Connect metadata
2+
# For more information, check out the docs
3+
# https://docs.fastlane.tools/actions/deliver/
4+
5+
########################################
6+
# App Metadata
7+
########################################
8+
9+
# This folder has to include one folder for each language
10+
screenshots_path "./screenshots/"
11+
app_identifier "com.automattic.woocommerce"
12+
13+
# Make sure to update these keys for a new version
14+
app_version "1.0"
15+
16+
privacy_url({
17+
'default' => 'https://automattic.com/privacy/',
18+
})
19+
20+
copyright('2019 WooCommerce')
21+
22+
skip_binary_upload true
23+
overwrite_screenshots true
24+
phased_release true

fastlane/download_metadata.swift

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
#!/usr/bin/env swift
2+
3+
import Foundation
4+
5+
let glotPressSubtitleKey = "app_store_subtitle"
6+
let glotPressWhatsNewKey = "v1.0-whats-new"
7+
let glotPressDescriptionKey = "app_store_desc"
8+
let glotPressKeywordsKey = "app_store_keywords"
9+
let baseFolder = "./metadata"
10+
11+
// iTunes Connect language code: GlotPress code
12+
let languages = [
13+
"de-DE": "de",
14+
"default": "en-us", // Technically not a real GlotPress language
15+
"en-US": "en-us", // Technically not a real GlotPress language
16+
"es-ES": "es",
17+
"fr-FR": "fr",
18+
"id": "id",
19+
"it": "it",
20+
"ja": "ja",
21+
"ko": "ko",
22+
"nl-NL": "nl",
23+
"pt-BR": "pt-br",
24+
"ru": "ru",
25+
"sv": "sv",
26+
"tr": "tr",
27+
"zh-Hans": "zh-cn",
28+
"zh-Hant": "zh-tw",
29+
]
30+
31+
func downloadTranslation(languageCode: String, folderName: String) {
32+
let languageCodeOverride = languageCode == "en-us" ? "es" : languageCode
33+
let glotPressURL = "https://translate.wordpress.com/projects/woocommerce/woocommerce-ios/release-notes/\(languageCodeOverride)/default/export-translations?format=json"
34+
let requestURL: URL = URL(string: glotPressURL)!
35+
let urlRequest: URLRequest = URLRequest(url: requestURL)
36+
let session = URLSession.shared
37+
38+
let sema = DispatchSemaphore( value: 0)
39+
40+
print("Downloading Language: \(languageCode)")
41+
42+
let task = session.dataTask(with: urlRequest) {
43+
(data, response, error) -> Void in
44+
45+
defer {
46+
sema.signal()
47+
}
48+
49+
guard let data = data else {
50+
print(" Invalid data downloaded.")
51+
return
52+
}
53+
54+
guard let json = try? JSONSerialization.jsonObject(with: data, options: []),
55+
let jsonDict = json as? [String: Any] else {
56+
print(" JSON was not returned")
57+
return
58+
}
59+
60+
var subtitle: String?
61+
var whatsNew: String?
62+
var keywords: String?
63+
var storeDescription: String?
64+
65+
jsonDict.forEach({ (key: String, value: Any) in
66+
67+
guard let index = key.index(of: Character(UnicodeScalar(0004))) else {
68+
return
69+
}
70+
71+
let keyFirstPart = String(key[..<index])
72+
73+
guard let value = value as? [String],
74+
let firstValue = value.first else {
75+
print(" No translation for \(keyFirstPart)")
76+
return
77+
}
78+
79+
var originalLanguage = String(key[index...])
80+
originalLanguage.remove(at: originalLanguage.startIndex)
81+
let translation = languageCode == "en-us" ? originalLanguage : firstValue
82+
83+
switch keyFirstPart {
84+
case glotPressSubtitleKey:
85+
subtitle = translation
86+
case glotPressKeywordsKey:
87+
keywords = translation
88+
case glotPressWhatsNewKey:
89+
whatsNew = translation
90+
case glotPressDescriptionKey:
91+
storeDescription = translation
92+
default:
93+
print(" Unknown key: \(keyFirstPart)")
94+
}
95+
})
96+
97+
let languageFolder = "\(baseFolder)/\(folderName)"
98+
99+
let fileManager = FileManager.default
100+
try? fileManager.createDirectory(atPath: languageFolder, withIntermediateDirectories: true, attributes: nil)
101+
102+
/// This sort of hack-ey – we're not actually downloading anything here, but the idea is
103+
/// to keep all of the metadata generation code in the same place. By keeping this in the
104+
/// same file, it should be easier to find, and update if necessary.
105+
let marketingURL = "https://woocommerce.com/mobile/"
106+
107+
do {
108+
try subtitle?.write(toFile: "\(languageFolder)/subtitle.txt", atomically: true, encoding: .utf8)
109+
try whatsNew?.write(toFile: "\(languageFolder)/release_notes.txt", atomically: true, encoding: .utf8)
110+
try keywords?.write(toFile: "\(languageFolder)/keywords.txt", atomically: true, encoding: .utf8)
111+
try storeDescription?.write(toFile: "\(languageFolder)/description.txt", atomically: true, encoding: .utf8)
112+
113+
// Don't add the marketing URL unless there's other metadata that's been downloaded
114+
if try fileManager.contentsOfDirectory(atPath: languageFolder).count > 0 {
115+
try marketingURL.write(toFile: "\(languageFolder)/marketing_url.txt", atomically: true, encoding: .utf8)
116+
}
117+
} catch {
118+
print(" Error writing: \(error)")
119+
}
120+
}
121+
122+
task.resume()
123+
sema.wait()
124+
}
125+
126+
func deleteExistingMetadata() {
127+
let fileManager = FileManager.default
128+
let url = URL(fileURLWithPath: baseFolder, isDirectory: true)
129+
try? fileManager.removeItem(at: url)
130+
try? fileManager.createDirectory(at: url, withIntermediateDirectories: false)
131+
}
132+
133+
134+
deleteExistingMetadata()
135+
136+
languages.forEach( { (key: String, value: String) in
137+
downloadTranslation(languageCode: value, folderName: key)
138+
})
139+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
BESTELLUNGEN ANZEIGEN UND VERWALTEN
2+
Scrolle durch deine Bestellungen, filtere oder durchsuche sie. Tippe zum Anzeigen von Bestellinformationen wie Produkt(e), Wert, Kundendaten, Versanddetails und Hinweisen.
3+
4+
DEINEN SHOP VERFOLGEN
5+
Erfahre, welche Produkte am beliebtesten sind. Überprüfe deine Gesamteinnahmen und lasse dir Bestellungen und Besucherdaten nach Woche, Monat und Jahr sortiert anzeigen.
6+
7+
BESTELLBENACHRICHTIGUNGEN IN ECHTZEIT
8+
Erhalte Benachrichtigungen zu Shopaktivitäten wie neuen Bestellungen und Produktbewertungen.
9+
10+
WooCommerce bietet die flexibelste E-Commerce-Plattform zum Aufbau deines Online-Geschäfts. Sie ist mit WordPress erstellt und in die weltweit besten Content-Management-Tools integriert. Von Kaffee-Abos über Spanischkurse und Mitgliedschaften im Fitnessstudio bis hin zu komplexem E-Commerce auf Unternehmensniveau – erstelle jetzt einen neuen Shop unter WooCommerce.com/start und bring deine Idee auf den Markt.
11+
12+
Anforderungen: WooCommerce 3.5 oder höher, Jetpack-Plugin.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
WooCommerce, WooCommerce-App, WooCommerce mobil, Woo-App, WooCommerce-Bestellung, WordPress, E-Comm
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
https://woocommerce.com/mobile/
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Mit der mobilen WooCommerce-App hast du überall Zugriff auf deinen Online-Shop: So kannst du auch unterwegs Bestellungen verwalten, Verkaufsbenachrichtigungen empfangen und wichtige Kennzahlen einsehen.
2+
3+
Trommelwirbel für unsere allererste Veröffentlichung! Wir freuen uns bereits auf häufige Beiträge in Kürze. Gerne kannst du uns Feedback und Verbesserungsvorschläge geben.
4+
Du erreichst uns über den „Support“ in der App oder kontaktiere uns unter ideas.woocommerce.com.
5+
6+
Ein Dankeschön an alle, die an der Entwicklung und den Frühtests mitgewirkt haben!
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Deinen Shop überall verwalten
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
VIEW AND MANAGE ORDERS
2+
Scroll through, filter, or look up specific orders. Tap to view order information – including product(s), value, customer data, shipping details, and notes.
3+
4+
TRACK YOUR STORE
5+
See which products are performing best. Check your overall revenue and view order and visitor data by week, month, and year.
6+
7+
REAL-TIME ORDER ALERTS
8+
Get notifications about store activity – including new orders and product reviews.
9+
10+
WooCommerce is the most customizable eCommerce platform for building your online business. Built on WordPress, it is integrated with the world’s best content management tools. From coffee subscriptions to Spanish lessons to gym memberships to complex enterprise-level eCommerce – visit WooCommerce.com/start to launch a new store and ship your idea.
11+
12+
Requirements: WooCommerce v3.5+, the Jetpack plugin.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Woocommerce, woocommerce app, woocommerce mobile, woo app, woocommerce order alert, wordpress, eComm
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
https://woocommerce.com/mobile/

0 commit comments

Comments
 (0)