1
0
mirror of https://github.com/arduino/Arduino.git synced 2024-12-01 12:24:14 +01:00

Testing translation for proper formatting. This test will fail when a

translation uses wrong syntax, thus avoiding any future issue similar to #4095
This commit is contained in:
Federico Fissore 2015-11-06 17:24:26 +01:00
parent fd8cb4649b
commit 2e80ee5bbd
9 changed files with 225 additions and 114 deletions

View File

@ -0,0 +1,56 @@
/*
* This file is part of Arduino.
*
* Copyright 2015 Arduino LLC (http://www.arduino.cc/)
*
* Arduino is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* As a special exception, you may use this file as part of a free software
* library without restriction. Specifically, if other files instantiate
* templates or use macros or inline functions from this file, or you compile
* this file and link it with other files to produce an executable, this
* file does not by itself cause the resulting executable to be covered by
* the GNU General Public License. This exception does not however
* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*/
package cc.arduino.i18n;
public class Language {
private final String name;
private final String originalName;
private final String isoCode;
public Language(String name, String originalName, String isoCode) {
this.name = name;
this.originalName = originalName;
this.isoCode = isoCode;
}
public String toString() {
if (originalName.length() == 0) {
return name;
}
return originalName + " (" + name + ")";
}
public String getIsoCode() {
return isoCode;
}
}

View File

@ -0,0 +1,117 @@
/*
* This file is part of Arduino.
*
* Copyright 2015 Arduino LLC (http://www.arduino.cc/)
*
* Arduino is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* As a special exception, you may use this file as part of a free software
* library without restriction. Specifically, if other files instantiate
* templates or use macros or inline functions from this file, or you compile
* this file and link it with other files to produce an executable, this
* file does not by itself cause the resulting executable to be covered by
* the GNU General Public License. This exception does not however
* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*/
package cc.arduino.i18n;
import static processing.app.I18n.tr;
public class Languages {
public static final Language[] languages;
// Languages that are not translated at least to 65% are
// kept in the "missingLanguages" array until they have enough
// translated strings.
@SuppressWarnings("unused")
public static final Language[] missingLanguages;
static {
languages = new Language[]{
new Language(tr("System Default"), "", ""),
new Language(tr("Albanian"), "shqip", "sq"),
new Language(tr("Arabic"), "العربية", "ar"),
new Language(tr("Aragonese"), "Aragonés", "an"),
new Language(tr("Basque"), "Euskara", "eu"),
new Language(tr("Belarusian"), "Беларуская мова", "be"),
new Language(tr("Bulgarian"), "български", "bg"),
new Language(tr("Canadian French"), "Canadienne-français", "fr_CA"),
new Language(tr("Catalan"), "Català", "ca"),
new Language(tr("Chinese (China)"), "简体中文", "zh_CN"),
new Language(tr("Chinese (Taiwan)"), "", "zh_TW"),
new Language(tr("Croatian"), "Hrvatski", "hr_HR"),
new Language(tr("Czech (Czech Republic)"), "český (Czech Republic)", "cs_CZ"),
new Language(tr("Dutch"), "Nederlands", "nl"),
new Language(tr("English"), "English", "en"),
new Language(tr("English (United Kingdom)"), "English (United Kingdom)", "en_GB"),
new Language(tr("Estonian"), "Eesti", "et"),
new Language(tr("Estonian (Estonia)"), "Eesti keel", "et_EE"),
new Language(tr("Filipino"), "Pilipino", "fil"),
new Language(tr("Finnish"), "Suomi", "fi"),
new Language(tr("French"), "Français", "fr"),
new Language(tr("Galician"), "Galego", "gl"),
new Language(tr("Galician (Spain)"), "Galego (Spain)", "gl_ES"),
new Language(tr("Georgian"), "საქართველოს", "ka_GE"),
new Language(tr("German"), "Deutsch", "de_DE"),
new Language(tr("Hebrew"), "עברית", "he"),
new Language(tr("Hindi"), "हिंदी", "hi"),
new Language(tr("Indonesian"), "Bahasa Indonesia", "id"),
new Language(tr("Italian"), "Italiano", "it_IT"),
new Language(tr("Japanese"), "日本語", "ja_JP"),
new Language(tr("Korean"), "한국어", "ko_KR"),
new Language(tr("Latvian"), "Latviešu", "lv_LV"),
new Language(tr("Norwegian Bokmål"), "Norsk bokmål", "nb_NO"),
new Language(tr("Persian"), "فارسی", "fa"),
new Language(tr("Polish"), "Język Polski", "pl"),
new Language(tr("Portugese"), "Português", "pt"),
new Language(tr("Portuguese (Brazil)"), "Português (Brazil)", "pt_BR"),
new Language(tr("Portuguese (Portugal)"), "Português (Portugal)", "pt_PT"),
new Language(tr("Romanian"), "Română", "ro"),
new Language(tr("Russian"), "Русский", "ru"),
new Language(tr("Slovak"), "Slovenčina", "sk"),
new Language(tr("Slovenian"), "Slovenščina", "sl_SI"),
new Language(tr("Spanish"), "Español", "es"),
new Language(tr("Swedish"), "Svenska", "sv"),
new Language(tr("Tamil"), "தமிழ்", "ta"),
new Language(tr("Turkish"), "Türk", "tr"),
new Language(tr("Ukrainian"), "Український", "uk"),
new Language(tr("Vietnamese"), "Tiếng Việt", "vi"),
};
missingLanguages = new Language[]{
new Language(tr("Afrikaans"), "Afrikaans", "af"),
new Language(tr("Armenian"), "Հայերեն", "hy"),
new Language(tr("Asturian"), "Asturianu", "ast"),
new Language(tr("Bosnian"), "Bosanski", "bs"),
new Language(tr("Burmese (Myanmar)"), "ဗမာစကား", "my_MM"),
new Language(tr("Chinese (Taiwan) (Big5)"), "", "zh_TW.Big5"),
new Language(tr("Danish (Denmark)"), "Dansk (Denmark)", "da_DK"),
new Language(tr("Dutch (Netherlands)"), "Nederlands", "nl_NL"),
new Language(tr("Greek"), "ελληνικά", "el_GR"),
new Language(tr("Hungarian"), "Magyar", "hu"),
new Language(tr("Lithuaninan"), "Lietuvių Kalba", "lt_LT"),
new Language(tr("Marathi"), "मराठी", "mr"),
new Language(tr("Nepali"), "नेपाली", "ne"),
new Language(tr("Persian (Iran)"), "فارسی (Iran)", "fa_IR"),
new Language(tr("Talossan"), "Talossan", "tzl"),
new Language(tr("Western Frisian"), "Western Frisian", "fy")
};
}
}

View File

@ -244,7 +244,7 @@
</Component>
<Component class="javax.swing.JComboBox" name="comboLanguage">
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JComboBox(languages)"/>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JComboBox(Languages.languages)"/>
</AuxValues>
</Component>
<Component class="javax.swing.JLabel" name="requiresRestartLabel">

View File

@ -30,6 +30,8 @@
package cc.arduino.view.preferences;
import cc.arduino.Constants;
import cc.arduino.i18n.Language;
import cc.arduino.i18n.Languages;
import processing.app.Base;
import processing.app.BaseNoGui;
import processing.app.I18n;
@ -47,41 +49,9 @@ import static processing.app.I18n.tr;
public class Preferences extends javax.swing.JDialog {
private final Language[] languages;
// Languages that are not translated at least to 65% are
// kept in the "missingLanguages" array until they have enough
// translated strings.
@SuppressWarnings("unused")
private final Language[] missingLanguages;
private final WarningItem[] warningItems;
private final Base base;
public static class Language {
private final String name;
private final String originalName;
private final String isoCode;
public Language(String name, String originalName, String isoCode) {
this.name = name;
this.originalName = originalName;
this.isoCode = isoCode;
}
public String toString() {
if (originalName.length() == 0) {
return name;
}
return originalName + " (" + name + ")";
}
public String getIsoCode() {
return isoCode;
}
}
private static class WarningItem {
private final String value;
private final String translation;
@ -105,76 +75,6 @@ public class Preferences extends javax.swing.JDialog {
super(parent);
this.base = base;
this.languages = new Language[]{
new Language(tr("System Default"), "", ""),
new Language(tr("Albanian"), "shqip", "sq"),
new Language(tr("Arabic"), "العربية", "ar"),
new Language(tr("Aragonese"), "Aragonés", "an"),
new Language(tr("Basque"), "Euskara", "eu"),
new Language(tr("Belarusian"), "Беларуская мова", "be"),
new Language(tr("Bulgarian"), "български", "bg"),
new Language(tr("Canadian French"), "Canadienne-français", "fr_CA"),
new Language(tr("Catalan"), "Català", "ca"),
new Language(tr("Chinese (China)"), "简体中文", "zh_CN"),
new Language(tr("Chinese (Taiwan) (Big5)"), "", "zh_TW.Big5"),
new Language(tr("Chinese (Taiwan)"), "", "zh_TW"),
new Language(tr("Croatian"), "Hrvatski", "hr_HR"),
new Language(tr("Czech (Czech Republic)"), "český (Czech Republic)", "cs_CZ"),
new Language(tr("Dutch"), "Nederlands", "nl"),
new Language(tr("English"), "English", "en"),
new Language(tr("English (United Kingdom)"), "English (United Kingdom)", "en_GB"),
new Language(tr("Estonian"), "Eesti", "et"),
new Language(tr("Estonian (Estonia)"), "Eesti keel", "et_EE"),
new Language(tr("Filipino"), "Pilipino", "fil"),
new Language(tr("Finnish"), "Suomi", "fi"),
new Language(tr("French"), "Français", "fr"),
new Language(tr("Galician"), "Galego", "gl"),
new Language(tr("Galician (Spain)"), "Galego (Spain)", "gl_ES"),
new Language(tr("Georgian"), "საქართველოს", "ka_GE"),
new Language(tr("German"), "Deutsch", "de_DE"),
new Language(tr("Hebrew"), "עברית", "he"),
new Language(tr("Hindi"), "हिंदी", "hi"),
new Language(tr("Indonesian"), "Bahasa Indonesia", "id"),
new Language(tr("Italian"), "Italiano", "it_IT"),
new Language(tr("Japanese"), "日本語", "ja_JP"),
new Language(tr("Korean"), "한국어", "ko_KR"),
new Language(tr("Latvian"), "Latviešu", "lv_LV"),
new Language(tr("Norwegian Bokmål"), "Norsk bokmål", "nb_NO"),
new Language(tr("Persian"), "فارسی", "fa"),
new Language(tr("Polish"), "Język Polski", "pl"),
new Language(tr("Portugese"), "Português", "pt"),
new Language(tr("Portuguese (Brazil)"), "Português (Brazil)", "pt_BR"),
new Language(tr("Portuguese (Portugal)"), "Português (Portugal)", "pt_PT"),
new Language(tr("Romanian"), "Română", "ro"),
new Language(tr("Russian"), "Русский", "ru"),
new Language(tr("Slovak"), "Slovenčina", "sk"),
new Language(tr("Slovenian"), "Slovenščina", "sl_SI"),
new Language(tr("Spanish"), "Español", "es"),
new Language(tr("Swedish"), "Svenska", "sv"),
new Language(tr("Tamil"), "தமிழ்", "ta"),
new Language(tr("Turkish"), "Türk", "tr"),
new Language(tr("Ukrainian"), "Український", "uk"),
new Language(tr("Vietnamese"), "Tiếng Việt", "vi"),
};
this.missingLanguages = new Language[]{
new Language(tr("Afrikaans"), "Afrikaans", "af"),
new Language(tr("Armenian"), "Հայերեն", "hy"),
new Language(tr("Asturian"), "Asturianu", "ast"),
new Language(tr("Bosnian"), "Bosanski", "bs"),
new Language(tr("Burmese (Myanmar)"), "ဗမာစကား", "my_MM"),
new Language(tr("Danish (Denmark)"), "Dansk (Denmark)", "da_DK"),
new Language(tr("Dutch (Netherlands)"), "Nederlands", "nl_NL"),
new Language(tr("Greek"), "ελληνικά", "el_GR"),
new Language(tr("Hungarian"), "Magyar", "hu"),
new Language(tr("Lithuaninan"), "Lietuvių Kalba", "lt_LT"),
new Language(tr("Marathi"), "मराठी", "mr"),
new Language(tr("Nepali"), "नेपाली", "ne"),
new Language(tr("Persian (Iran)"), "فارسی (Iran)", "fa_IR"),
new Language(tr("Talossan"), "Talossan", "tzl"),
new Language(tr("Western Frisian"), "Western Frisian", "fy")
};
this.warningItems = new WarningItem[]{
new WarningItem("none", tr("None")),
new WarningItem("default", tr("Default")),
@ -207,7 +107,7 @@ public class Preferences extends javax.swing.JDialog {
sketchbookLocationField = new javax.swing.JTextField();
javax.swing.JButton browseButton = new javax.swing.JButton();
javax.swing.JLabel comboLanguageLabel = new javax.swing.JLabel();
comboLanguage = new JComboBox(languages);
comboLanguage = new JComboBox(Languages.languages);
javax.swing.JLabel requiresRestartLabel = new javax.swing.JLabel();
javax.swing.JLabel fontSizeLabel = new javax.swing.JLabel();
fontSizeField = new javax.swing.JTextField();
@ -831,7 +731,7 @@ public class Preferences extends javax.swing.JDialog {
sketchbookLocationField.setText(PreferencesData.get("sketchbook.path"));
String currentLanguageISOCode = PreferencesData.get("editor.languages.current");
for (Language language : languages) {
for (Language language : Languages.languages) {
if (language.getIsoCode().equals(currentLanguageISOCode)) {
comboLanguage.setSelectedItem(language);
}

View File

@ -33,7 +33,10 @@ import org.junit.Test;
import processing.app.AbstractWithPreferencesTest;
import processing.app.I18n;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import static org.junit.Assert.assertEquals;
@ -50,7 +53,38 @@ public class I18NTest extends AbstractWithPreferencesTest {
public void testMessageFormatFromExternalProcess() throws Exception {
Map<String, Object> output = new ExternalProcessOutputParser().parse("===WARNING: Category '{0}' in library {1} is not valid. Setting to '{2}' ||| [ Wire Uncategorized]");
String actual = I18n.format((String) output.get("msg"), (Object[])output.get("args"));
String actual = I18n.format((String) output.get("msg"), (Object[]) output.get("args"));
assertEquals("WARNING: Category '' in library Wire is not valid. Setting to 'Uncategorized'", actual);
}
@Test
public void testAllLocales() {
for (Language language : Languages.languages) {
if (!language.getIsoCode().equals("")) {
Locale locale = toLocale(language);
ResourceBundle bundle = ResourceBundle.getBundle("processing.app.i18n.Resources", locale);
if (locale.equals(bundle.getLocale())) {
Collections.list(bundle.getKeys()).stream().map(bundle::getString).filter(key -> !key.contains("<html")).forEach(key -> {
try {
I18n.format(key);
} catch (IllegalArgumentException e) {
System.out.println(language);
System.out.println(key);
throw e;
}
});
} else {
System.out.println("Missing locale: " + locale);
}
}
}
}
private Locale toLocale(Language language) {
String[] languageParts = language.getIsoCode().split("_");
if (languageParts.length == 2) {
return new Locale(languageParts[0], languageParts[1]);
}
return new Locale(languageParts[0]);
}
}

View File

@ -13,6 +13,7 @@
# amas89 <amas89@gmail.com>, 2012
# belal affouri <belal@eshtre.com>, 2015
# belal affouri <belal@eshtre.com>, 2012
# Federico Fissore <f.fissore@arduino.cc>, 2015
# JAMAL ELMERABETE <jmerabet@procyonst.com>, 2014-2015
# Khaled Saleem Baleesh <Kbaleesh@gmail.com>, 2015
# Mubarak Qahtani <abu-q76@hotmail.com>, 2015
@ -21,7 +22,7 @@ msgstr ""
"Project-Id-Version: Arduino IDE 1.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-29 10:24-0400\n"
"PO-Revision-Date: 2015-11-02 12:05+0000\n"
"PO-Revision-Date: 2015-11-06 15:54+0000\n"
"Last-Translator: Federico Fissore <f.fissore@arduino.cc>\n"
"Language-Team: Arabic (http://www.transifex.com/mbanzi/arduino-ide-15/language/ar/)\n"
"MIME-Version: 1.0\n"
@ -939,7 +940,7 @@ msgstr "تصدير الترجمة باللغة الثنائية"
#: ../../../processing/app/Base.java:416
#, java-format
msgid "Failed to open sketch: \"{0}\""
msgstr "فشل في فتح ketch : \n\"{ 0}\""
msgstr "فشل في فتح ketch : \n\"{0}\""
#: Editor.java:491
msgid "File"

View File

@ -13,10 +13,11 @@
# amas89 <amas89@gmail.com>, 2012
# belal affouri <belal@eshtre.com>, 2015
# belal affouri <belal@eshtre.com>, 2012
# Federico Fissore <f.fissore@arduino.cc>, 2015
# JAMAL ELMERABETE <jmerabet@procyonst.com>, 2014-2015
# Khaled Saleem Baleesh <Kbaleesh@gmail.com>, 2015
# Mubarak Qahtani <abu-q76@hotmail.com>, 2015
!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-11-02 12\:05+0000\nLast-Translator\: Federico Fissore <f.fissore@arduino.cc>\nLanguage-Team\: Arabic (http\://www.transifex.com/mbanzi/arduino-ide-15/language/ar/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ar\nPlural-Forms\: nplurals\=6; plural\=n\=\=0 ? 0 \: n\=\=1 ? 1 \: n\=\=2 ? 2 \: n%100>\=3 && n%100<\=10 ? 3 \: n%100>\=11 && n%100<\=99 ? 4 \: 5;\n
!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-11-06 15\:54+0000\nLast-Translator\: Federico Fissore <f.fissore@arduino.cc>\nLanguage-Team\: Arabic (http\://www.transifex.com/mbanzi/arduino-ide-15/language/ar/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ar\nPlural-Forms\: nplurals\=6; plural\=n\=\=0 ? 0 \: n\=\=1 ? 1 \: n\=\=2 ? 2 \: n%100>\=3 && n%100<\=10 ? 3 \: n%100>\=11 && n%100<\=99 ? 4 \: 5;\n
#: Preferences.java:358 Preferences.java:374
\ \ (requires\ restart\ of\ Arduino)=(\u064a\u062a\u0637\u0644\u0628 \u0627\u0639\u0627\u062f\u0629 \u062a\u0634\u063a\u064a\u0644 \u0644\u0644\u0623\u0631\u062f\u0648\u064a\u0646\u0648)
@ -677,7 +678,7 @@ Export\ compiled\ Binary=\u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u062a\u0631
#: ../../../processing/app/Base.java:416
#, java-format
Failed\ to\ open\ sketch\:\ "{0}"=\u0641\u0634\u0644 \u0641\u064a \u0641\u062a\u062d ketch \: \n"{ 0}"
Failed\ to\ open\ sketch\:\ "{0}"=\u0641\u0634\u0644 \u0641\u064a \u0641\u062a\u062d ketch \: \n"{0}"
#: Editor.java:491
File=\u0645\u0644\u0641

View File

@ -9,6 +9,7 @@
# Translators:
# Translators:
# Translators:
# Federico Fissore <f.fissore@arduino.cc>, 2015
# Gaurav Waghmare <gauravwaghmare30@gmail.com>, 2015
# Nishant Sood <nishant@winacro.com>, 2012
# Parimal Naigaonkar <parimal.86@gmail.com>, 2012
@ -17,7 +18,7 @@ msgstr ""
"Project-Id-Version: Arduino IDE 1.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-29 10:24-0400\n"
"PO-Revision-Date: 2015-11-02 12:05+0000\n"
"PO-Revision-Date: 2015-11-06 15:57+0000\n"
"Last-Translator: Federico Fissore <f.fissore@arduino.cc>\n"
"Language-Team: Hindi (http://www.transifex.com/mbanzi/arduino-ide-15/language/hi/)\n"
"MIME-Version: 1.0\n"
@ -615,7 +616,7 @@ msgstr "स्केच संग्रह नहीं किया जा स
#: Sketch.java:1647
msgid "Couldn't determine program size: {0}"
msgstr "कार्य क्रम का आकार नहीं जान पाया गया {}0"
msgstr "कार्य क्रम का आकार नहीं जान पाया गया {0}"
#: Sketch.java:616
msgid "Couldn't do it"

View File

@ -9,10 +9,11 @@
# Translators:
# Translators:
# Translators:
# Federico Fissore <f.fissore@arduino.cc>, 2015
# Gaurav Waghmare <gauravwaghmare30@gmail.com>, 2015
# Nishant Sood <nishant@winacro.com>, 2012
# Parimal Naigaonkar <parimal.86@gmail.com>, 2012
!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-11-02 12\:05+0000\nLast-Translator\: Federico Fissore <f.fissore@arduino.cc>\nLanguage-Team\: Hindi (http\://www.transifex.com/mbanzi/arduino-ide-15/language/hi/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: hi\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n
!=Project-Id-Version\: Arduino IDE 1.5\nReport-Msgid-Bugs-To\: \nPOT-Creation-Date\: 2012-03-29 10\:24-0400\nPO-Revision-Date\: 2015-11-06 15\:57+0000\nLast-Translator\: Federico Fissore <f.fissore@arduino.cc>\nLanguage-Team\: Hindi (http\://www.transifex.com/mbanzi/arduino-ide-15/language/hi/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: hi\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n
#: Preferences.java:358 Preferences.java:374
\ \ (requires\ restart\ of\ Arduino)=(\u0905\u0930\u094d\u0926\u0941\u0907\u0928\u094b \u0915\u094b \u092b\u093f\u0930 \u0938\u0947 \u091a\u093e\u0932\u0942 \u0915\u0930\u0928\u0947 \u0915\u0940 \u0906\u0935\u0936\u094d\u092f\u0915)
@ -435,7 +436,7 @@ Could\ not\ replace\ {0}={0} \u0915\u0940 \u091c\u0917\u0939 \u0928\u0939\u0940\
Couldn't\ archive\ sketch=\u0938\u094d\u0915\u0947\u091a \u0938\u0902\u0917\u094d\u0930\u0939 \u0928\u0939\u0940\u0902 \u0915\u093f\u092f\u093e \u091c\u093e \u0938\u0915\u093e
#: Sketch.java:1647
Couldn't\ determine\ program\ size\:\ {0}=\u0915\u093e\u0930\u094d\u092f \u0915\u094d\u0930\u092e \u0915\u093e \u0906\u0915\u093e\u0930 \u0928\u0939\u0940\u0902 \u091c\u093e\u0928 \u092a\u093e\u092f\u093e \u0917\u092f\u093e {}0
Couldn't\ determine\ program\ size\:\ {0}=\u0915\u093e\u0930\u094d\u092f \u0915\u094d\u0930\u092e \u0915\u093e \u0906\u0915\u093e\u0930 \u0928\u0939\u0940\u0902 \u091c\u093e\u0928 \u092a\u093e\u092f\u093e \u0917\u092f\u093e {0}
#: Sketch.java:616
Couldn't\ do\ it=\u092f\u0939 \u0915\u093f\u092f\u093e \u0928\u0939\u0940\u0902 \u091c\u093e \u0938\u0915\u093e