import 'dart:convert';
import 'dart:io';
import 'package:csv/csv.dart';
String _translationsUrl(String apiKey) {
const sheetId = "1gOIXPpBFlrWYawp0yt1sN456siIp2jyNVBopcQRra8A";
const sheetName = "translations";
return "https://docs.google.com/spreadsheets/d/$sheetId/gviz/tq?tqx=out:csv&sheet=$sheetName&key=$apiKey";
}
Future<String> _loadApiKeyFromSecrets() async {
final dotEnvFile = File("env/.env");
final lines = await dotEnvFile.readAsLines();
final apiKey = lines.firstWhere(
(line) => line.startsWith("GOOGLE_SHEETS_API_KEY"),
);
return apiKey.split("=")[1].toString();
}
Future<void> main() async {
final http = HttpClient();
final apiKey = await _loadApiKeyFromSecrets();
print("Loading google sheet from ${_translationsUrl(apiKey)}");
final response = await http.getUrl(Uri.parse(_translationsUrl(apiKey)));
print("Writing data to memory...");
final responseBody = await response.close();
print("Decoding data...");
final buffer = StringBuffer();
final data = await responseBody.transform(utf8.decoder).toList();
buffer.writeAll(data);
final dataString = buffer.toString();
final enArb = File("assets/translations/intl_en.arb");
final daArb = File("assets/translations/intl_da.arb");
final csvList = const CsvToListConverter().convert(
dataString,
fieldDelimiter: ',',
textDelimiter: '"',
eol: '\n',
);
final Map<String, dynamic> enJson = {};
final Map<String, dynamic> daJson = {};
for (var i = 1; i < csvList.length; i++) {
final row = csvList[i];
final key = row[0].toString();
final en = row[1].toString();
final da = row[2].toString();
enJson[key] = _parseValue(en);
daJson[key] = _parseValue(da);
}
const encoder = JsonEncoder.withIndent(" ");
await enArb.writeAsString(encoder.convert(enJson));
await daArb.writeAsString(encoder.convert(daJson));
print("Complete");
}
String _parseValue(String value) {
if (value.contains("\\n")) {
return value.replaceAll("\\n", "\n");
}
return value;
}