Editor: Fix escaping issues with POT generator
This commit is contained in:
parent
54ba3cf768
commit
aac4a3611d
|
@ -99,14 +99,15 @@ void POTGenerator::_write_to_pot(const String &p_file) {
|
|||
return;
|
||||
}
|
||||
|
||||
String project_name = GLOBAL_GET("application/config/name");
|
||||
String project_name = GLOBAL_GET("application/config/name").operator String().replace("\n", "\\n");
|
||||
Vector<String> files = GLOBAL_GET("internationalization/locale/translations_pot_files");
|
||||
String extracted_files = "";
|
||||
for (int i = 0; i < files.size(); i++) {
|
||||
extracted_files += "# " + files[i] + "\n";
|
||||
extracted_files += "# " + files[i].replace("\n", "\\n") + "\n";
|
||||
}
|
||||
const String header =
|
||||
"# LANGUAGE translation for " + project_name + " for the following files:\n" + extracted_files +
|
||||
"# LANGUAGE translation for " + project_name + " for the following files:\n" +
|
||||
extracted_files +
|
||||
"#\n"
|
||||
"# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n"
|
||||
"#\n"
|
||||
|
@ -114,7 +115,8 @@ void POTGenerator::_write_to_pot(const String &p_file) {
|
|||
"msgid \"\"\n"
|
||||
"msgstr \"\"\n"
|
||||
"\"Project-Id-Version: " +
|
||||
project_name + "\\n\"\n"
|
||||
project_name +
|
||||
"\\n\"\n"
|
||||
"\"MIME-Version: 1.0\\n\"\n"
|
||||
"\"Content-Type: text/plain; charset=UTF-8\\n\"\n"
|
||||
"\"Content-Transfer-Encoding: 8-bit\\n\"\n";
|
||||
|
@ -134,12 +136,12 @@ void POTGenerator::_write_to_pot(const String &p_file) {
|
|||
|
||||
// Write file locations.
|
||||
for (const String &E : locations) {
|
||||
file->store_line("#: " + E.trim_prefix("res://"));
|
||||
file->store_line("#: " + E.trim_prefix("res://").replace("\n", "\\n"));
|
||||
}
|
||||
|
||||
// Write context.
|
||||
if (!context.is_empty()) {
|
||||
file->store_line("msgctxt \"" + context + "\"");
|
||||
file->store_line("msgctxt " + context.c_escape().quote());
|
||||
}
|
||||
|
||||
// Write msgid.
|
||||
|
@ -158,30 +160,34 @@ void POTGenerator::_write_to_pot(const String &p_file) {
|
|||
}
|
||||
|
||||
void POTGenerator::_write_msgid(Ref<FileAccess> r_file, const String &p_id, bool p_plural) {
|
||||
// Split \\n and \n.
|
||||
Vector<String> msg_lines;
|
||||
Vector<String> temp = p_id.split("\\n");
|
||||
for (int i = 0; i < temp.size(); i++) {
|
||||
msg_lines.append_array(temp[i].split("\n"));
|
||||
}
|
||||
|
||||
// Add \n.
|
||||
for (int i = 0; i < msg_lines.size() - 1; i++) {
|
||||
msg_lines.set(i, msg_lines[i] + "\\n");
|
||||
}
|
||||
|
||||
if (p_plural) {
|
||||
r_file->store_string("msgid_plural ");
|
||||
} else {
|
||||
r_file->store_string("msgid ");
|
||||
}
|
||||
|
||||
if (msg_lines.size() > 1) {
|
||||
if (p_id.is_empty()) {
|
||||
r_file->store_line("\"\"");
|
||||
return;
|
||||
}
|
||||
|
||||
const Vector<String> lines = p_id.split("\n");
|
||||
const String &last_line = lines[lines.size() - 1]; // `lines` cannot be empty.
|
||||
int pot_line_count = lines.size();
|
||||
if (last_line.is_empty()) {
|
||||
pot_line_count--;
|
||||
}
|
||||
|
||||
if (pot_line_count > 1) {
|
||||
r_file->store_line("\"\"");
|
||||
}
|
||||
|
||||
for (int i = 0; i < msg_lines.size(); i++) {
|
||||
r_file->store_line("\"" + msg_lines[i] + "\"");
|
||||
for (int i = 0; i < lines.size() - 1; i++) {
|
||||
r_file->store_line((lines[i] + "\n").c_escape().quote());
|
||||
}
|
||||
|
||||
if (!last_line.is_empty()) {
|
||||
r_file->store_line(last_line.c_escape().quote());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue