diff --git a/src/nls/cs/strings.js b/src/nls/cs/strings.js
index 1081d9a485b..d04a3981323 100644
--- a/src/nls/cs/strings.js
+++ b/src/nls/cs/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Chyba při mazání souboru",
"ERROR_DELETING_FILE" : "Došlo k chybě při mazání souboru {0}. {1}",
"INVALID_FILENAME_TITLE" : "Špatné jméno souboru",
- "INVALID_FILENAME_MESSAGE" : "Jméno souboru nemůže obsahovat znaky: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "Jméno souboru nemůže obsahovat znaky: {0}",
"FILE_ALREADY_EXISTS" : "Soubor {0} již existuje.",
"ERROR_CREATING_FILE_TITLE" : "Chyba při tvorbě souboru",
"ERROR_CREATING_FILE" : "Došlo k chybě při vytváření souboru {0}. {1}",
diff --git a/src/nls/de/strings.js b/src/nls/de/strings.js
index 7e697f42e67..7440fc79c58 100644
--- a/src/nls/de/strings.js
+++ b/src/nls/de/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Fehler beim Löschen der Datei",
"ERROR_DELETING_FILE" : "Beim Löschen der Datei {0} ist ein Fehler aufgetreten. {1}",
"INVALID_FILENAME_TITLE" : "Ungültiger {0}name",
- "INVALID_FILENAME_MESSAGE" : "Dateinamen dürfen folgende Zeichen nicht enthalten: /?*:;{}<>\\| Auch dürfen keine vom System reservierten Wörter vorkommen.",
+ "INVALID_FILENAME_MESSAGE" : "Dateinamen dürfen folgende Zeichen nicht enthalten: {0} Auch dürfen keine vom System reservierten Wörter vorkommen.",
"FILE_ALREADY_EXISTS" : "{0} {1} existiert bereits.", // TODO: depends on {0} gender
"ERROR_CREATING_FILE_TITLE" : "Fehler beim Erstellen von {0}", // TODO: depends on {0} gender
"ERROR_CREATING_FILE" : "Beim Erstellen von {0} {1} ist ein Fehler aufgetreten: {2}", // TODO: depends on {0} gender
diff --git a/src/nls/el/strings.js b/src/nls/el/strings.js
index 3c008ab4a56..77abb381232 100644
--- a/src/nls/el/strings.js
+++ b/src/nls/el/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Σφάλμα διαγραφής αρχείου",
"ERROR_DELETING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία διαγραφής του αρχείου {0}. {1}",
"INVALID_FILENAME_TITLE" : "Μη έγκυρο {0} όνομα",
- "INVALID_FILENAME_MESSAGE" : "Τα όνομα αρχείων δεν μπορούν να περιέχουν τους ακόλουθους χαρακτήρες: /?*:;{}<>\\| ή οποιεσδήποτε system reserved λέξεις.",
+ "INVALID_FILENAME_MESSAGE" : "Τα όνομα αρχείων δεν μπορούν να περιέχουν τους ακόλουθους χαρακτήρες: {0} ή οποιεσδήποτε system reserved λέξεις.",
"FILE_ALREADY_EXISTS" : "Το {0} {1} υπάρχει ήδη.",
"ERROR_CREATING_FILE_TITLE" : "Σφάλμα δημιουργίας {0}",
"ERROR_CREATING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία δημιουργίας του {0} {1}. {2}",
diff --git a/src/nls/es/strings.js b/src/nls/es/strings.js
index f460037933e..8ee2dd025de 100644
--- a/src/nls/es/strings.js
+++ b/src/nls/es/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Error eliminando archivo",
"ERROR_DELETING_FILE" : "Ha ocurrido un error al intentar eliminar el archivo {0}. {1}",
"INVALID_FILENAME_TITLE" : "Nombre de {0} inválido",
- "INVALID_FILENAME_MESSAGE" : "Los nombres de archivo no pueden contener los siguientes caracteres: /?*:;{}<>\\| o usar palabras reservadas del sistema",
+ "INVALID_FILENAME_MESSAGE" : "Los nombres de archivo no pueden contener los siguientes caracteres: {0} o usar palabras reservadas del sistema",
"FILE_ALREADY_EXISTS" : "El {0} {0} ya existe.",
"ERROR_CREATING_FILE_TITLE" : "Error creando {0}",
"ERROR_CREATING_FILE" : "Ha ocurrido un error al intentar crear el {0} {1}. {2}",
diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js
index 860688c8861..720d41b7669 100644
--- a/src/nls/fa-ir/strings.js
+++ b/src/nls/fa-ir/strings.js
@@ -60,7 +60,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "خطا در حذف پرونده",
"ERROR_DELETING_FILE" : "بروز خطا بهنگام تلاش برای جذف پرونده {0}. {1}",
"INVALID_FILENAME_TITLE" : "مقدار وارد شده {0} معتبر نمی باشد",
- "INVALID_FILENAME_MESSAGE" : "نام پرونده نمی تواند شامل مقادیر زیر باشد: /?*:;{}<>\\| or use any system reserved words.",
+ "INVALID_FILENAME_MESSAGE" : "نام پرونده نمی تواند شامل مقادیر زیر باشد: {0} or use any system reserved words.",
"FILE_ALREADY_EXISTS" : "پرونده ای با نام {0} {1} وجود دارد.",
"ERROR_CREATING_FILE_TITLE" : "خطا در ایجاد {0}",
"ERROR_CREATING_FILE" : "بروز خطا بهنگام ایجاد {0} {1}. {2}",
diff --git a/src/nls/fi/strings.js b/src/nls/fi/strings.js
index 3c250a617b6..2342aa1d427 100644
--- a/src/nls/fi/strings.js
+++ b/src/nls/fi/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Virhe poistettaessa tiedostoa",
"ERROR_DELETING_FILE" : "Tapahtui virhe yrittäessä poistaa tiedosto {0}. {1}",
"INVALID_FILENAME_TITLE" : "Kelpaamaton {0}nimi",
- "INVALID_FILENAME_MESSAGE" : "Tiedostonimi ei voi sisältää seuraavia merkkejä: /?*:;{}<>\\| tai mitään järjestelmän varaamia sanoja.",
+ "INVALID_FILENAME_MESSAGE" : "Tiedostonimi ei voi sisältää seuraavia merkkejä: {0} tai mitään järjestelmän varaamia sanoja.",
"FILE_ALREADY_EXISTS" : "{0} {1} on jo olemassa.",
"ERROR_CREATING_FILE_TITLE" : "Virhe luodessa {0}a",
"ERROR_CREATING_FILE" : "Virhe yrittäessä luoda {0}a {1}. {2}",
diff --git a/src/nls/hu/strings.js b/src/nls/hu/strings.js
index 6895d597e72..7115e3e5c81 100644
--- a/src/nls/hu/strings.js
+++ b/src/nls/hu/strings.js
@@ -56,7 +56,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Hiba történt a fájl törlése közben",
"ERROR_DELETING_FILE" : "Hiba történt a fájl törlése közben: {0}. {1}",
"INVALID_FILENAME_TITLE" : "Helytelen fájlnév",
- "INVALID_FILENAME_MESSAGE" : "A fájl neve nem tartalmazhatja a következő karaktereket: /?*:;{}<>\\| és foglalt rendszer neveket.",
+ "INVALID_FILENAME_MESSAGE" : "A fájl neve nem tartalmazhatja a következő karaktereket: {0} és foglalt rendszer neveket.",
"FILE_ALREADY_EXISTS" : "A fájl {0} már létezik.",
"ERROR_CREATING_FILE_TITLE" : "Hiba történt a fájl létrehozása közben.",
"ERROR_CREATING_FILE" : "Hiba történt a fájl létrehozása közben: {0}. {1}",
diff --git a/src/nls/it/strings.js b/src/nls/it/strings.js
index 39433596fd2..4bb7e78369c 100644
--- a/src/nls/it/strings.js
+++ b/src/nls/it/strings.js
@@ -53,7 +53,7 @@ define({
"ERROR_RENAMING_FILE_TITLE" : "Errore durante il tentativo di rinominare il file",
"ERROR_RENAMING_FILE" : "Errore durante il tentativo di rinominare il file {0}. {1}",
"INVALID_FILENAME_TITLE" : "Il nome del file non è valido",
- "INVALID_FILENAME_MESSAGE" : "Il nome del file non può contenere i seguenti caratteri: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "Il nome del file non può contenere i seguenti caratteri: {0}",
"FILE_ALREADY_EXISTS" : "Il file {0} esiste già.",
"ERROR_CREATING_FILE_TITLE" : "Errore durante la creazione del file",
"ERROR_CREATING_FILE" : "Errore durante il tentativo di creare il file {0}. {1}",
diff --git a/src/nls/ko/strings.js b/src/nls/ko/strings.js
index 7b4301018f8..a3af613deb8 100644
--- a/src/nls/ko/strings.js
+++ b/src/nls/ko/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE": "파일 삭제 에러",
"ERROR_DELETING_FILE": "파일을 삭제할 때 에러가 발생했습니다 {0}. {1}",
"INVALID_FILENAME_TITLE": "잘못된 {0}이름",
- "INVALID_FILENAME_MESSAGE": "파일 이름에는 다음 문자를 포함 할 수 없습니다: /?*:;{}<>\\| 또는 시스템의 모든 예약어",
+ "INVALID_FILENAME_MESSAGE": "파일 이름에는 다음 문자를 포함 할 수 없습니다: {0} 또는 시스템의 모든 예약어",
"FILE_ALREADY_EXISTS": "{0} {1}은 이미 존재 합니다.",
"ERROR_CREATING_FILE_TITLE": "{0}를 만들 때 에러가 발생했습니다",
"ERROR_CREATING_FILE": "{0} {1}를 만들 때 에러가 발생했습니다.{2}",
diff --git a/src/nls/nb/strings.js b/src/nls/nb/strings.js
index 236b198b60d..0df1165455d 100644
--- a/src/nls/nb/strings.js
+++ b/src/nls/nb/strings.js
@@ -50,7 +50,7 @@ define({
"ERROR_SAVING_FILE_TITLE" : "Feil ved lagring av fil",
"ERROR_SAVING_FILE" : "Det oppstod en feil ved forsøk på å lagre filen {0}. {1}",
"INVALID_FILENAME_TITLE" : "Ugyldig filnavn",
- "INVALID_FILENAME_MESSAGE" : "Filnavn kan ikke inneholde følgende tegn: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "Filnavn kan ikke inneholde følgende tegn: {0}",
"FILE_ALREADY_EXISTS" : "Filen {0} eksisterer allerede.",
"ERROR_CREATING_FILE_TITLE" : "Feil ved oppretting av fil",
"ERROR_CREATING_FILE" : "Det oppstod en feil ved forsøk på å opprette filen {0}. {1}",
diff --git a/src/nls/nl/strings.js b/src/nls/nl/strings.js
index b33ca3d7a7f..540c9b12ac4 100644
--- a/src/nls/nl/strings.js
+++ b/src/nls/nl/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Probleem bij het verwijderen van een bestand",
"ERROR_DELETING_FILE" : "Er is een fout opgetreden bij het verwijderen van het bestand {0}. {1}",
"INVALID_FILENAME_TITLE" : "Ongeldige {0} naam",
- "INVALID_FILENAME_MESSAGE" : "Bestandsnamen kunnen de volgende karakters niet bevatten: /?*:;{}<>\\| of gebruik maken van woorden die door het systeem zijn gereserveerd.",
+ "INVALID_FILENAME_MESSAGE" : "Bestandsnamen kunnen de volgende karakters niet bevatten: {0} of gebruik maken van woorden die door het systeem zijn gereserveerd.",
"FILE_ALREADY_EXISTS" : "Het {0} {1} bestaat al.",
"ERROR_CREATING_FILE_TITLE" : "Probleem bij het aanmaken van een {0}",
"ERROR_CREATING_FILE" : "Er is een fout opgetreden bij het aanmaken van het {0} {1}. {2}",
diff --git a/src/nls/pl/strings.js b/src/nls/pl/strings.js
index deeb259ac6b..41e61bede79 100644
--- a/src/nls/pl/strings.js
+++ b/src/nls/pl/strings.js
@@ -53,7 +53,7 @@ define({
"ERROR_RENAMING_FILE_TITLE" : "Nie można zmienić nazwy",
"ERROR_RENAMING_FILE" : "Wystąpił błąd podczas próby zmiany nazwy pliku {0}. {1}",
"INVALID_FILENAME_TITLE" : "Niewłaściwa nazwa pliku",
- "INVALID_FILENAME_MESSAGE" : "Nazwa pliku nie może zawierać następujących znaków: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "Nazwa pliku nie może zawierać następujących znaków: {0}",
"FILE_ALREADY_EXISTS" : "Plik {0} już istnieje.",
"ERROR_CREATING_FILE_TITLE" : "Nie można utworzyć pliku",
"ERROR_CREATING_FILE" : "Wystąpił błąd podczas próby utworzenia pliku {0}. {1}",
diff --git a/src/nls/pt-br/strings.js b/src/nls/pt-br/strings.js
index 69c767ef19c..4ec6e71e18b 100644
--- a/src/nls/pt-br/strings.js
+++ b/src/nls/pt-br/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Erro ao excluir arquivo",
"ERROR_DELETING_FILE" : "Ocorreu um erro ao tentar excluir o arquivo {0}. {1}",
"INVALID_FILENAME_TITLE" : "Nome de {0} inválido",
- "INVALID_FILENAME_MESSAGE" : "Nomes de arquivos não podem conter os seguintes caracteres: /?*:;{}<>\\| nem usar palavras reservadas do sistema.",
+ "INVALID_FILENAME_MESSAGE" : "Nomes de arquivos não podem conter os seguintes caracteres: {0} nem usar palavras reservadas do sistema.",
"FILE_ALREADY_EXISTS" : "Já existe um {0} chamado {1}.",
"ERROR_CREATING_FILE_TITLE" : "Erro ao criar {0}",
"ERROR_CREATING_FILE" : "Ocorreu um erro ao tentar criar o {0} {1}. {2}",
diff --git a/src/nls/pt-pt/strings.js b/src/nls/pt-pt/strings.js
index 67907ca8c4d..c3c516b039a 100644
--- a/src/nls/pt-pt/strings.js
+++ b/src/nls/pt-pt/strings.js
@@ -53,7 +53,7 @@ define({
"ERROR_RENAMING_FILE_TITLE" : "Erro ao renomear ficheiro",
"ERROR_RENAMING_FILE" : "Ocorreu um erro ao tentar renomear o ficheiro {0}. {1}",
"INVALID_FILENAME_TITLE" : "Nome do ficheiro inválido",
- "INVALID_FILENAME_MESSAGE" : "O nome do ficheiro não pode conter os seguintes caracteres: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "O nome do ficheiro não pode conter os seguintes caracteres: {0}",
"FILE_ALREADY_EXISTS" : "O ficheiro {0} já existe.",
"ERROR_CREATING_FILE_TITLE" : "Erro ao criar ficheiro.",
"ERROR_CREATING_FILE" : "Ocorreu um erro ao tentar criar o ficheiro {0}. {1}",
diff --git a/src/nls/ro/strings.js b/src/nls/ro/strings.js
index 92a33908811..cbb90f1df18 100644
--- a/src/nls/ro/strings.js
+++ b/src/nls/ro/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Eroare la ștergerea fișierului",
"ERROR_DELETING_FILE" : "S-a produs o eroare la încercarea de a șterge fișierul {0}. {1}",
"INVALID_FILENAME_TITLE" : "Numele {0} e invalid",
- "INVALID_FILENAME_MESSAGE" : "Numele fișierului nu poate conține următoarele caractere: /?*:;{}<>\\| sau să fie un cuvânt rezervat de sistemul de operare.",
+ "INVALID_FILENAME_MESSAGE" : "Numele fișierului nu poate conține următoarele caractere: {0} sau să fie un cuvânt rezervat de sistemul de operare.",
"FILE_ALREADY_EXISTS" : "Fișierul {0} {1} există deja.",
"ERROR_CREATING_FILE_TITLE" : "Eroare la crearea fișierului {0}",
"ERROR_CREATING_FILE" : "S-a produs o eroare la încercarea de a crea fișierul {0} {1}. {2}",
diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js
index 39591c369bb..dfe831c51b4 100644
--- a/src/nls/root/strings.js
+++ b/src/nls/root/strings.js
@@ -60,7 +60,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Error deleting file",
"ERROR_DELETING_FILE" : "An error occurred when trying to delete the file {0}. {1}",
"INVALID_FILENAME_TITLE" : "Invalid {0} name",
- "INVALID_FILENAME_MESSAGE" : "Filenames cannot contain the following characters: /?*:;{}<>\\| or use any system reserved words.",
+ "INVALID_FILENAME_MESSAGE" : "Filenames cannot contain the following characters: {0} or use any system reserved words.",
"FILE_ALREADY_EXISTS" : "The {0} {1} already exists.",
"ERROR_CREATING_FILE_TITLE" : "Error creating {0}",
"ERROR_CREATING_FILE" : "An error occurred when trying to create the {0} {1}. {2}",
diff --git a/src/nls/ru/strings.js b/src/nls/ru/strings.js
index 8c3d0ca8019..583a22be80a 100644
--- a/src/nls/ru/strings.js
+++ b/src/nls/ru/strings.js
@@ -53,7 +53,7 @@ define({
"ERROR_RENAMING_FILE_TITLE" : "Ошибка переименования файла",
"ERROR_RENAMING_FILE" : "Произошла ошибка при попытке переименовать файл {0}. {1}",
"INVALID_FILENAME_TITLE" : "Неверное имя файла",
- "INVALID_FILENAME_MESSAGE" : "Имена файлов не могут содержать следующие символы: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "Имена файлов не могут содержать следующие символы: {0}",
"FILE_ALREADY_EXISTS" : "Файл {0} уже существует.",
"ERROR_CREATING_FILE_TITLE" : "Ошибка создания файла",
"ERROR_CREATING_FILE" : "Произошла ошибка при попытке создать файл {0}. {1}",
diff --git a/src/nls/sk/strings.js b/src/nls/sk/strings.js
index 5fe9b380875..541cc3e38d3 100644
--- a/src/nls/sk/strings.js
+++ b/src/nls/sk/strings.js
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Chyba pri zmazaní súboru",
"ERROR_DELETING_FILE" : "Nastala chyba pri zmazaní súboru {0}. {1}",
"INVALID_FILENAME_TITLE" : "Neplatný {0} názov",
- "INVALID_FILENAME_MESSAGE" : "Názvy súboru nesmú obsahovať nasledujúce znaky: /?*:;{}<>\\| alebo používať rezervované systémové slová.",
+ "INVALID_FILENAME_MESSAGE" : "Názvy súboru nesmú obsahovať nasledujúce znaky: {0} alebo používať rezervované systémové slová.",
"FILE_ALREADY_EXISTS" : "Súbor {0} {1} už existuje.",
"ERROR_CREATING_FILE_TITLE" : "Chyba pri vytváraní súboru {0}",
"ERROR_CREATING_FILE" : "Nastala chyba pri vytváraní súboru {0} {1}. {2}",
diff --git a/src/nls/sr/strings.js b/src/nls/sr/strings.js
index 3c2ec0264aa..d28fe5c8ce5 100644
--- a/src/nls/sr/strings.js
+++ b/src/nls/sr/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Грешка при брисању датотеке",
"ERROR_DELETING_FILE" : "Дошло је до грешке приликом покушаја да се обрише датотека {0}. {1}",
"INVALID_FILENAME_TITLE" : "Име {0} није валидно",
- "INVALID_FILENAME_MESSAGE" : "Имена датотека не смеју садржати следеће карактере: /?*:;{}<>\\| или системски резервисане речи.",
+ "INVALID_FILENAME_MESSAGE" : "Имена датотека не смеју садржати следеће карактере: {0} или системски резервисане речи.",
"FILE_ALREADY_EXISTS" : "{0} {1} већ постоји.",
"ERROR_CREATING_FILE_TITLE" : "Грешка при креирању {0}",
"ERROR_CREATING_FILE" : "Дошло је до грешке приликом покушаја да се креира {0} {1}. {2}",
diff --git a/src/nls/sv/strings.js b/src/nls/sv/strings.js
index 4adc0022cda..6174c41a814 100644
--- a/src/nls/sv/strings.js
+++ b/src/nls/sv/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "Filen kunde inte raderas",
"ERROR_DELETING_FILE" : "Ett fel uppstod när filen {0} skulle tas bort. {1}",
"INVALID_FILENAME_TITLE" : "Ogiltigt filnamn",
- "INVALID_FILENAME_MESSAGE" : "Filnamn får inte innehålla följande tecken: /?*:;{}<>\\| eller innehålla ord som reserverats av systemet.",
+ "INVALID_FILENAME_MESSAGE" : "Filnamn får inte innehålla följande tecken: {0} eller innehålla ord som reserverats av systemet.",
"FILE_ALREADY_EXISTS" : "En fil med namnet {0} existerar redan.",
"ERROR_CREATING_FILE_TITLE" : "Filen {0} kunde inte skapas",
"ERROR_CREATING_FILE" : "Ett fel uppstod när {0} {1} skulle skapas. {2}",
diff --git a/src/nls/tr/strings.js b/src/nls/tr/strings.js
index 464c7621619..d4014fe3ab3 100644
--- a/src/nls/tr/strings.js
+++ b/src/nls/tr/strings.js
@@ -53,7 +53,7 @@ define({
"ERROR_RENAMING_FILE_TITLE" : "Dosya ismi değiştirilirken hata",
"ERROR_RENAMING_FILE" : "{0} dosyasının ismi değiştirilirken hata meydana geldi. {1}",
"INVALID_FILENAME_TITLE" : "Hatalı dosya ismi",
- "INVALID_FILENAME_MESSAGE" : "Dosya isimleri yandaki karakterleri bulunduramaz: /?*:;{}<>\\|",
+ "INVALID_FILENAME_MESSAGE" : "Dosya isimleri yandaki karakterleri bulunduramaz: {0}",
"FILE_ALREADY_EXISTS" : "{0} dosyası zaten bulunmakta",
"ERROR_CREATING_FILE_TITLE" : "Dosya yaratılırken hata",
"ERROR_CREATING_FILE" : "{0} dosyası yaratılırken hata meydana geldi. {1}",
diff --git a/src/nls/zh-cn/strings.js b/src/nls/zh-cn/strings.js
index 99de97ac00e..00a36f9728a 100644
--- a/src/nls/zh-cn/strings.js
+++ b/src/nls/zh-cn/strings.js
@@ -59,7 +59,7 @@ define({
"ERROR_DELETING_FILE_TITLE" : "删除文件失败",
"ERROR_DELETING_FILE" : "试图删除该文件时出现错误, 文件: {0}. {1}",
"INVALID_FILENAME_TITLE" : "无效文件名: {0}",
- "INVALID_FILENAME_MESSAGE" : "文件名不得包含: /?*:;{}<>\\| 或使用操作系统保留文件名",
+ "INVALID_FILENAME_MESSAGE" : "文件名不得包含: {0} 或使用操作系统保留文件名",
"FILE_ALREADY_EXISTS" : "该文件 {0} {1} 已经存在.",
"ERROR_CREATING_FILE_TITLE" : "创建文件 {0} 错误",
"ERROR_CREATING_FILE" : "试图创建 {0} {1} 时出现错误. {2}",
diff --git a/src/project/ProjectManager.js b/src/project/ProjectManager.js
index 8d58c5e2a9c..2c5f63f6dd5 100644
--- a/src/project/ProjectManager.js
+++ b/src/project/ProjectManager.js
@@ -175,6 +175,15 @@ define(function (require, exports, module) {
*/
var _projectInitialLoad = null;
+ /**
+ * @private
+ * A string containing all invalid characters for a specific platform.
+ * This will be used to construct a regular expression for checking invalid filenames.
+ * When a filename with one of these invalid characters are detected, then it is
+ * also used to substitute the place holder of the error message.
+ */
+ var _invalidChars;
+
/**
* @private
* RegEx to validate if a filename is not allowed even if the system allows it.
@@ -756,6 +765,7 @@ define(function (require, exports, module) {
if (entry.isDirectory) {
jsonEntry.children = [];
jsonEntry.state = "closed";
+ jsonEntry.data = _.escape(jsonEntry.data);
} else {
jsonEntry.data = ViewUtils.getFileEntryDisplay(entry);
}
@@ -1419,6 +1429,9 @@ define(function (require, exports, module) {
* @private
* Check a filename for illegal characters. If any are found, show an error
* dialog and return false. If no illegal characters are found, return true.
+ * Although Mac and Linux allow ?*| characters, we still cannot allow them
+ * since these have special meaning for all file systems.
+ *
* @param {string} filename
* @param {boolean} isFolder
* @return {boolean} Returns true if no illegal characters are found
@@ -1427,11 +1440,12 @@ define(function (require, exports, module) {
// Validate file name
// Checks for valid Windows filenames:
// See http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
- if ((filename.search(/[\/?*:;\{\}<>\\|]+/) !== -1) || filename.match(_illegalFilenamesRegEx)) {
+ if ((filename.search(new RegExp("[" + _invalidChars + "]+")) !== -1) ||
+ filename.match(_illegalFilenamesRegEx)) {
Dialogs.showModalDialog(
DefaultDialogs.DIALOG_ID_ERROR,
StringUtils.format(Strings.INVALID_FILENAME_TITLE, isFolder ? Strings.DIRECTORY : Strings.FILE),
- Strings.INVALID_FILENAME_MESSAGE
+ StringUtils.format(Strings.INVALID_FILENAME_MESSAGE, _invalidChars)
);
return false;
}
@@ -1718,14 +1732,16 @@ define(function (require, exports, module) {
var isFolder = $selected.hasClass("jstree-open") || $selected.hasClass("jstree-closed");
_projectTree.one("rename.jstree", function (event, data) {
- // Make sure the file was actually renamed
- var changed = (data.rslt.old_name !== data.rslt.new_name);
+ var unescapedOldName = _.unescape(data.rslt.old_name),
+ unescapedNewName = _.unescape(data.rslt.new_name),
+ // Make sure the file was actually renamed
+ changed = (unescapedOldName !== unescapedNewName);
var _resetOldFilename = function () {
_projectTree.jstree("set_text", $selected, ViewUtils.getFileEntryDisplay(entry));
};
- if (!changed || !_checkForValidFilename(data.rslt.new_name, isFolder)) {
+ if (!changed || !_checkForValidFilename(unescapedNewName, isFolder)) {
// No change or invalid filename. Reset the old name and bail.
_resetOldFilename();
return;
@@ -1735,8 +1751,8 @@ define(function (require, exports, module) {
// Folder paths have to end with a slash. Use look-head (?=...) to only replace the folder's name, not the slash as well
var oldNameEndPattern = isFolder ? "(?=\/$)" : "$";
- var oldNameRegex = new RegExp(StringUtils.regexEscape(data.rslt.old_name) + oldNameEndPattern);
- var newName = oldFullPath.replace(oldNameRegex, data.rslt.new_name);
+ var oldNameRegex = new RegExp(StringUtils.regexEscape(unescapedOldName) + oldNameEndPattern);
+ var newName = oldFullPath.replace(oldNameRegex, unescapedNewName);
renameItem(oldFullPath, newName, isFolder)
.done(function () {
@@ -1768,8 +1784,9 @@ define(function (require, exports, module) {
});
});
- // since html_titles are enabled, we have to reset the text without markup
- _projectTree.jstree("set_text", $selected, entry.name);
+ // Since html_titles are enabled, we have to reset the text without markup.
+ // And we also need to explicitly escape all html-sensitive characters.
+ _projectTree.jstree("set_text", $selected, _.escape(entry.name));
_projectTree.jstree("rename");
});
// No fail handler: silently no-op if file doesn't exist in tree
@@ -2138,6 +2155,15 @@ define(function (require, exports, module) {
CommandManager.register(Strings.CMD_PROJECT_SETTINGS, Commands.FILE_PROJECT_SETTINGS, _projectSettings);
CommandManager.register(Strings.CMD_FILE_REFRESH, Commands.FILE_REFRESH, refreshFileTree);
+ // Init invalid characters string
+ if (brackets.platform === "mac") {
+ _invalidChars = "?*|:";
+ } else if (brackets.platform === "linux") {
+ _invalidChars = "?*|/";
+ } else {
+ _invalidChars = "/?*:<>\\|\""; // invalid characters on Windows
+ }
+
// Define public API
exports.getProjectRoot = getProjectRoot;
exports.getBaseUrl = getBaseUrl;
diff --git a/src/project/SidebarView.js b/src/project/SidebarView.js
index abb24279451..684d437aa6f 100644
--- a/src/project/SidebarView.js
+++ b/src/project/SidebarView.js
@@ -50,7 +50,8 @@ define(function (require, exports, module) {
Strings = require("strings"),
EditorManager = require("editor/EditorManager"),
Global = require("utils/Global"),
- Resizer = require("utils/Resizer");
+ Resizer = require("utils/Resizer"),
+ _ = require("thirdparty/lodash");
// These vars are initialized by the htmlReady handler
// below since they refer to DOM elements
@@ -72,7 +73,7 @@ define(function (require, exports, module) {
displayName = "/";
}
- $projectTitle.html(displayName);
+ $projectTitle.html(_.escape(displayName));
$projectTitle.attr("title", fullPath);
// Trigger a scroll on the project files container to
diff --git a/src/utils/ViewUtils.js b/src/utils/ViewUtils.js
index 671793d553d..ff4b213a6d1 100644
--- a/src/utils/ViewUtils.js
+++ b/src/utils/ViewUtils.js
@@ -396,7 +396,10 @@ define(function (require, exports, module) {
i = name.lastIndexOf(".");
if (i >= 0) {
- name = name.substring(0, i) + "" + name.substring(i) + "";
+ // Escape all HTML-sensitive characters in filename.
+ name = _.escape(name.substring(0, i)) + "" + _.escape(name.substring(i)) + "";
+ } else {
+ name = _.escape(name);
}
return name;
diff --git a/test/spec/ProjectManager-test.js b/test/spec/ProjectManager-test.js
index d5c5d63bc48..4f385f09a15 100644
--- a/test/spec/ProjectManager-test.js
+++ b/test/spec/ProjectManager-test.js
@@ -152,11 +152,18 @@ define(function (require, exports, module) {
});
it("should fail when file name contains special characters", function () {
- var chars = "/?*:;{}<>\\";
+ var chars = "/?*:<>\\|\""; // invalid characters on Windows
var i = 0;
- var len = chars.length;
+ var len = 0;
var charAt, didCreate, gotError;
+ if (brackets.platform === "mac") {
+ chars = "?*|:";
+ } else if (brackets.platform === "linux") {
+ chars = "?*|/";
+ }
+ len = chars.length;
+
function createFile() {
// skip rename
ProjectManager.createNewItem(tempDir, "file" + charAt + ".js", true)