diff --git a/src/Features/Core/Portable/Extensions/ExtensionFolder.cs b/src/Features/Core/Portable/Extensions/ExtensionFolder.cs index 9a936536c4f65..0b99cc162aff4 100644 --- a/src/Features/Core/Portable/Extensions/ExtensionFolder.cs +++ b/src/Features/Core/Portable/Extensions/ExtensionFolder.cs @@ -118,7 +118,7 @@ public void RegisterAssembly(string assemblyFilePath) // If this throws, it also indicated a bug in gladstone that must be fixed. As such, it is ok if this // tears down the extension service in OOP. if (_assemblyFilePathToHandlers.ContainsKey(assemblyFilePath)) - throw new InvalidOperationException($"Extension '{assemblyFilePath}' is already registered."); + throw new InvalidOperationException(string.Format(FeaturesResources.Extension_0_is_already_registered, assemblyFilePath)); _assemblyFilePathToHandlers = _assemblyFilePathToHandlers.Add( assemblyFilePath, @@ -141,7 +141,7 @@ public void RegisterAssembly(string assemblyFilePath) // If this throws, it also indicated a bug in gladstone that must be fixed. As such, it is ok if this // tears down the extension service in OOP. if (!_assemblyFilePathToHandlers.TryGetValue(assemblyFilePath, out var lazyHandlers)) - throw new InvalidOperationException($"Extension '{assemblyFilePath}' was not registered."); + throw new InvalidOperationException(string.Format(FeaturesResources.Extension_0_was_not_registered, assemblyFilePath)); _assemblyFilePathToHandlers = _assemblyFilePathToHandlers.Remove(assemblyFilePath); return (_assemblyFilePathToHandlers.Count == 0, lazyHandlers); @@ -156,7 +156,7 @@ public async ValueTask GetExtensionMessageNamesAsync(stri // If this throws, it also indicated a bug in gladstone that must be fixed. As such, it is ok if this // tears down the extension service in OOP. if (!_assemblyFilePathToHandlers.TryGetValue(assemblyFilePath, out var lazyHandlers)) - throw new InvalidOperationException($"Extension '{assemblyFilePath}' was not registered."); + throw new InvalidOperationException(string.Format(FeaturesResources.Extension_0_was_not_registered, assemblyFilePath)); // Handlers already encapsulates any extension-level exceptions that occurred when loading the assembly. // As such, we don't need our own try/catch here. We can just return the result directly. diff --git a/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs b/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs index b7393471ed819..773f0cf334557 100644 --- a/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs +++ b/src/Features/Core/Portable/Extensions/ExtensionMessageHandlerService.cs @@ -60,7 +60,7 @@ private sealed partial class ExtensionMessageHandlerService( private static string GetAssemblyFolderPath(string assemblyFilePath) { return Path.GetDirectoryName(assemblyFilePath) - ?? throw new InvalidOperationException($"Unable to get the directory name for {assemblyFilePath}."); + ?? throw new InvalidOperationException(string.Format(FeaturesResources.Unable_to_get_the_directory_name_for_0, assemblyFilePath)); } private void ClearCachedHandlers_WhileUnderLock() @@ -114,7 +114,7 @@ private ValueTask UnregisterExtensionInCurrentProcessAsync(string assemblyFilePa lock (_gate) { if (!_folderPathToExtensionFolder.TryGetValue(assemblyFolderPath, out var extensionFolder)) - throw new InvalidOperationException($"No extension registered as '{assemblyFolderPath}'"); + throw new InvalidOperationException(string.Format(FeaturesResources.No_extension_registered_as_0, assemblyFolderPath)); // Clear out the cached handler names. They will be recomputed the next time we need them. ClearCachedHandlers_WhileUnderLock(); @@ -174,7 +174,7 @@ private async ValueTask GetExtensionMessageNamesInCurrent // Throwing here indicates a bug in the gladstone client itself. So we want this to bubble outwards as a // failure that disables extension running in the OOP process. This must be fixed by gladstone. if (!_folderPathToExtensionFolder.TryGetValue(assemblyFolderPath, out var extensionFolder)) - throw new InvalidOperationException($"No extensions registered at '{assemblyFolderPath}'"); + throw new InvalidOperationException(string.Format(FeaturesResources.No_extensions_registered_at_0, assemblyFolderPath)); // Note if loading the extension assembly failed (due to issues in the extension itself), then the exception // produced by it will be passed outwards as data in the ExtensionMessageNames result. @@ -219,14 +219,14 @@ private async ValueTask HandleExtensionMessageInCurrentP // bug in the gladstone client itself (as it allowed calling into an lsp message that never had // registered handlers). So we want this to bubble outwards as a failure that disables extension // running in the OOP process. This must be fixed by gladstone. - throw new InvalidOperationException($"No handler found for message {messageName}."); + throw new InvalidOperationException(string.Format(FeaturesResources.No_handler_found_for_message_0, messageName)); } // Throwing here indicates a bug in the gladstone client itself (as it allowed calling into an lsp message // that had multiple registered handlers). So we want this to bubble outwards as a failure that disables // extension running in the OOP process. This must be fixed by gladstone. if (handlers.Length > 1) - throw new InvalidOperationException($"Multiple handlers found for message {messageName}."); + throw new InvalidOperationException(string.Format(FeaturesResources.Multiple_handlers_found_for_message_0, messageName)); var handler = (IExtensionMessageHandlerWrapper)handlers[0]; diff --git a/src/Features/Core/Portable/FeaturesResources.resx b/src/Features/Core/Portable/FeaturesResources.resx index 104f2d73245a7..48edca931ab37 100644 --- a/src/Features/Core/Portable/FeaturesResources.resx +++ b/src/Features/Core/Portable/FeaturesResources.resx @@ -3199,4 +3199,25 @@ Zero-width positive lookbehind assertions are typically used at the beginning of Convert to 'field' property {Locked="field"} "field" is C# keyword and should not be localized. + + Extension '{0}' is already registered. + + + Extension '{0}' was not registered. + + + Unable to get the directory name for {0}. + + + No extension registered as '{0}'. + + + No extensions registered at '{0}'. + + + No handler found for message {0}. + + + Multiple handlers found for message {0}. + \ No newline at end of file diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf index f43a70ecd5b2e..08051996c1b76 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf @@ -750,6 +750,16 @@ Ujistěte se, že specifikátor tt použijete pro jazyky, pro které je nezbytn Příklady: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Extrahovat základní třídu... @@ -1215,6 +1225,11 @@ Ujistěte se, že specifikátor tt použijete pro jazyky, pro které je nezbytn Přesunutí {0} vyžaduje restartování aplikace. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Akce kódu .NET @@ -1245,6 +1260,21 @@ Ujistěte se, že specifikátor tt použijete pro jazyky, pro které je nezbytn Žádný společný kořenový uzel pro extrakci + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. V souboru PDB se nenašly žádné informace o zdrojovém dokumentu. @@ -2765,6 +2795,11 @@ Pozitivní kontrolní výrazy zpětného vyhledávání s nulovou délkou se obv Nepovedlo se vytvořit {0} + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Nejde načíst typ {0}: {1} diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf index 8b0670ea18064..145c80278d5b1 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf @@ -750,6 +750,16 @@ Stellen Sie sicher, dass Sie den Bezeichner "tt" für Sprachen verwenden, für d Beispiele: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Basisklasse extrahieren... @@ -1215,6 +1225,11 @@ Stellen Sie sicher, dass Sie den Bezeichner "tt" für Sprachen verwenden, für d Das Verschieben von {0} erfordert einen Neustart der Anwendung. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions .NET Codeaktionen @@ -1245,6 +1260,21 @@ Stellen Sie sicher, dass Sie den Bezeichner "tt" für Sprachen verwenden, für d Kein gemeinsamer Stammknoten für Extraktion. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. In der PDB-Datei wurden keine Quelldokumentinformationen gefunden. @@ -2765,6 +2795,11 @@ Positive Lookbehindassertionen mit Nullbreite werden normalerweise am Anfang reg „{0}“ kann nicht erstellt werden + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Der Typ „{0}“ kann nicht geladen werden: {1} diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf index b2ca126cb9ce1..6d6b42d1d586a 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf @@ -750,6 +750,16 @@ Asegúrese de usar el especificador "tt" para los idiomas para los que es necesa Ejemplos: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Extraer clase base... @@ -1215,6 +1225,11 @@ Asegúrese de usar el especificador "tt" para los idiomas para los que es necesa Para mover {0} es necesario reiniciar la aplicación. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Acciones de código de .NET @@ -1245,6 +1260,21 @@ Asegúrese de usar el especificador "tt" para los idiomas para los que es necesa No hay nodo raíz común para la extracción. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. No se encontró información del documento de origen en PDB. @@ -2765,6 +2795,11 @@ Las aserciones de búsqueda retrasada (lookbehind) positivas de ancho cero se us No se puede crear '{0}' + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' No se ha podido cargar el tipo "{0}": "{1}" diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf index 4385547624c83..7761dbd15121b 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf @@ -750,6 +750,16 @@ Veillez à utiliser le spécificateur "tt" pour les langues où il est nécessai Exemples : Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Extraire la classe de base... @@ -1215,6 +1225,11 @@ Veillez à utiliser le spécificateur "tt" pour les langues où il est nécessai Le déplacement de {0} requiert le redémarrage de l’application. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Actions du code .NET @@ -1245,6 +1260,21 @@ Veillez à utiliser le spécificateur "tt" pour les langues où il est nécessai Pas de nœud racine commun pour l'extraction. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. Aucune information de document source n’a été trouvée dans le fichier PDB. @@ -2765,6 +2795,11 @@ Les assertions arrière positives de largeur nulle sont généralement utilisée Impossible de créer « {0} » + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Désolé, nous ne pouvons pas charger le type « {0} » – « {1} » diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf index 379acd32510b6..c1dcffa42b19c 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf @@ -750,6 +750,16 @@ Assicurarsi di usare l'identificatore "tt" per le lingue per le quali è necessa Esempi: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Estrai classe di base... @@ -1215,6 +1225,11 @@ Assicurarsi di usare l'identificatore "tt" per le lingue per le quali è necessa Se si sposta {0}, è necessario riavviare l'applicazione. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Azioni codice .NET @@ -1245,6 +1260,21 @@ Assicurarsi di usare l'identificatore "tt" per le lingue per le quali è necessa Non esiste un nodo radice comune per l'estrazione. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. Nessuna informazione sul documento di origine trovata nel PDB. @@ -2765,6 +2795,11 @@ Le asserzioni lookbehind positive di larghezza zero vengono usate in genere all' Non è stato possibile creare "{0}" + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Non è possibile caricare il tipo '{0}': '{1}' diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf index 64671cde8e142..fcf8c09f65063 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf @@ -750,6 +750,16 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 例: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... 基底クラスの抽出... @@ -1215,6 +1225,11 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma {0} を移動するには、アプリケーションを再起動する必要があります。 + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions .NET コード アクション @@ -1245,6 +1260,21 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 抽出するための一般的なルート ノードがありません。 + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. PDB にソース ドキュメント情報が見つかりません。 @@ -2765,6 +2795,11 @@ Zero-width positive lookbehind assertions are typically used at the beginning of '{0}' を作成できません + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' 次のタグ型を読み込めません '{0}': '{1}' diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf index d8f285556eb96..a8c33514e4388 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf @@ -750,6 +750,16 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 예: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... 기본 클래스 추출... @@ -1215,6 +1225,11 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma {0}을(를) 이동하려면 애플리케이션을 다시 시작해야 합니다. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions .NET 코드 작업 @@ -1245,6 +1260,21 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 추출에 필요한 일반 루트 노드가 없습니다. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. PDB에서 원본 문서 정보를 찾을 수 없습니다. @@ -2765,6 +2795,11 @@ Zero-width positive lookbehind assertions are typically used at the beginning of {0}(을)를 만들 수 없음 + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' 형식 '{0}'을(를) 로드할 수 없음: '{1}' diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf index cc9ad3648cc0e..7fc7ed2395d23 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf @@ -750,6 +750,16 @@ Pamiętaj, aby nie używać specyfikatora „tt” dla wszystkich języków, w k Przykłady: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Wyodrębnij klasę bazową... @@ -1215,6 +1225,11 @@ Pamiętaj, aby nie używać specyfikatora „tt” dla wszystkich języków, w k Przeniesienie elementu {0} wymaga ponownego uruchomienia aplikacji. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Akcje kodu platformy .NET @@ -1245,6 +1260,21 @@ Pamiętaj, aby nie używać specyfikatora „tt” dla wszystkich języków, w k Brak wspólnego węzła głównego do wyodrębnienia. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. Nie znaleziono informacji o dokumencie źródłowym w pliku PDB. @@ -2765,6 +2795,11 @@ Pozytywne asercje wsteczne o zerowej szerokości są zwykle używane na początk Nie można utworzyć „{0}” + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Nie można załadować typu „{0}”: „{1}”. diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf index 1c7cf0aa5fdea..6341ea277a493 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf @@ -750,6 +750,16 @@ Verifique se o especificador "tt" foi usado para idiomas para os quais é necess Exemplos: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Extrair a classe base... @@ -1215,6 +1225,11 @@ Verifique se o especificador "tt" foi usado para idiomas para os quais é necess Mover {0} requer reiniciar o aplicativo. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Ações de código do .NET @@ -1245,6 +1260,21 @@ Verifique se o especificador "tt" foi usado para idiomas para os quais é necess Nenhum nó de raiz comum para extração. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. Nenhuma informação do documento de origem encontrada no PDB. @@ -2765,6 +2795,11 @@ As declarações de lookbehind positivas de largura zero normalmente são usadas Não é possível criar '{0}' + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Não foi possível carregar o tipo '{0}': '{1}' diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf index df00ac1f9cf31..938af5460fcb6 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf @@ -750,6 +750,16 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma Примеры: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Извлечь базовый класс... @@ -1215,6 +1225,11 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma Для перемещения {0} требуется перезапустить приложение. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions Действия кода .NET @@ -1245,6 +1260,21 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma Нет стандартного корневого узла для извлечения. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. В PDB-файле не найдены сведения об исходном документе. @@ -2765,6 +2795,11 @@ Zero-width positive lookbehind assertions are typically used at the beginning of Не удается создать "{0}" + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' Не удалось загрузить тип "{0}": "{1}" diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf index a89b4abdf8c33..73cd2ccf6d396 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf @@ -750,6 +750,16 @@ AM ve PM arasındaki farkın korunmasının gerekli olduğu diller için "tt" be Örnekler: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... Temel sınıfı ayıkla... @@ -1215,6 +1225,11 @@ AM ve PM arasındaki farkın korunmasının gerekli olduğu diller için "tt" be {0} öğesinin taşınması uygulamanın yeniden başlatılmasını gerektirir. + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions .NET Kod Eylemleri @@ -1245,6 +1260,21 @@ AM ve PM arasındaki farkın korunmasının gerekli olduğu diller için "tt" be Ayıklama için ortak kök düğümü yok. + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. PDB'de kaynak belge bilgisi bulunamadı. @@ -2765,6 +2795,11 @@ Sıfır genişlikli pozitif geri yönlü onaylamalar genellikle normal ifadeleri '{0}' oluşturulamıyor + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' '{0}' türü yüklenemiyor: '{1}' diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf index 0f68d40e57e01..1867780899934 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf @@ -750,6 +750,16 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 示例: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... 提取基类... @@ -1215,6 +1225,11 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 移动 {0} 要求重启应用程序。 + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions .NET 代码操作 @@ -1245,6 +1260,21 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 没有可用于提取的公共根节点。 + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. 未在 PDB 中找到源文档信息。 @@ -2765,6 +2795,11 @@ Zero-width positive lookbehind assertions are typically used at the beginning of 无法创建“{0}” + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' 无法加载类型“{0}”:“{1}” diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf index e1bcb7f676a81..0771af1a2e039 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf @@ -750,6 +750,16 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 範例: Plural form when we have multiple examples to show. + + Extension '{0}' is already registered. + Extension '{0}' is already registered. + + + + Extension '{0}' was not registered. + Extension '{0}' was not registered. + + Extract base class... 擷取基底類別... @@ -1215,6 +1225,11 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 移動 {0} 需要重新啟動應用程式。 + + Multiple handlers found for message {0}. + Multiple handlers found for message {0}. + + .NET Code Actions .NET 程式碼動作 @@ -1245,6 +1260,21 @@ Make sure to use the "tt" specifier for languages for which it's necessary to ma 沒有根節點可供擷取。 + + No extension registered as '{0}'. + No extension registered as '{0}'. + + + + No extensions registered at '{0}'. + No extensions registered at '{0}'. + + + + No handler found for message {0}. + No handler found for message {0}. + + No source document info found in PDB. PDB 中找不到來源文件資訊。 @@ -2765,6 +2795,11 @@ Zero-width positive lookbehind assertions are typically used at the beginning of 無法建立 '{0}' + + Unable to get the directory name for {0}. + Unable to get the directory name for {0}. + + Unable to load type '{0}': '{1}' 無法載入類型 '{0}': '{1}' diff --git a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionDocumentMessageHandler.cs b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionDocumentMessageHandler.cs index d4edae48cf633..77b27b6a297e5 100644 --- a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionDocumentMessageHandler.cs +++ b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionDocumentMessageHandler.cs @@ -31,13 +31,16 @@ public async Task HandleRequestAsync(ExtensionDocument var solution = context.Document.Project.Solution; var service = solution.Services.GetRequiredService(); - var (response, _, exception) = await service.HandleExtensionDocumentMessageAsync( + var (response, extensionWasUnloaded, exception) = await service.HandleExtensionDocumentMessageAsync( context.Document, request.MessageName, request.Message, cancellationToken).ConfigureAwait(false); // Report any exceptions the extension itself caused while handling the request. if (exception is not null) context.Logger.LogException(exception); - return new ExtensionMessageResponse(response!); + return new ExtensionMessageResponse( + response, + extensionWasUnloaded, + ExtensionException.FromException(exception)); } } diff --git a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionMessageResponse.cs b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionMessageResponse.cs index a144ac7d4c087..2f0aa9ee21b40 100644 --- a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionMessageResponse.cs +++ b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionMessageResponse.cs @@ -11,4 +11,7 @@ namespace Microsoft.CodeAnalysis.LanguageServer.Handler.Extensions; /// /// Json response returned by the extension message handler. internal readonly record struct ExtensionMessageResponse( - [property: JsonPropertyName("response")] string Response); + [property: JsonPropertyName("response"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] string? Response, + [property: JsonPropertyName("extensionWasUnloaded"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] bool ExtensionWasUnloaded, + [property: JsonPropertyName("extensionException"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + ExtensionException? ExtensionException); diff --git a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterHandler.cs b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterHandler.cs index 49767c7275737..b36f7f943131c 100644 --- a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterHandler.cs +++ b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterHandler.cs @@ -34,6 +34,9 @@ public async Task HandleRequestAsync(ExtensionRegiste if (handlerNames.ExtensionException is not null) context.Logger.LogException(handlerNames.ExtensionException); - return new(handlerNames.WorkspaceMessageHandlers, handlerNames.DocumentMessageHandlers); + return new( + handlerNames.WorkspaceMessageHandlers, + handlerNames.DocumentMessageHandlers, + ExtensionException.FromException(handlerNames.ExtensionException)); } } diff --git a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterResponse.cs b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterResponse.cs index 503e605797715..6684536326598 100644 --- a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterResponse.cs +++ b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionRegisterResponse.cs @@ -2,16 +2,32 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; using System.Collections.Immutable; using System.Text.Json.Serialization; namespace Microsoft.CodeAnalysis.LanguageServer.Handler.Extensions; +internal sealed record class ExtensionException( + [property: JsonPropertyName("typeName")] string TypeName, + [property: JsonPropertyName("message")] string Message, + [property: JsonPropertyName("stackTrace"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] string? StackTrace, + [property: JsonPropertyName("innerException"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] ExtensionException? InnerException) +{ + public static ExtensionException? FromException(Exception? exception) + => exception is null + ? null + : new ExtensionException(exception.GetType().ToString(), exception.Message, exception.StackTrace, FromException(exception.InnerException)); +} + /// /// Response for the roslyn/extensionRegister request. /// /// Names of the registered non-document-specific extension message handlers. /// Names of the registered document-specific extension message handlers. -internal readonly record struct ExtensionRegisterResponse( +/// Details of any exceptions that occurred during extension registration. +internal sealed record class ExtensionRegisterResponse( [property: JsonPropertyName("workspaceMessageHandlers")] ImmutableArray WorkspaceMessageHandlers, - [property: JsonPropertyName("documentMessageHandlers")] ImmutableArray DocumentMessageHandlers); + [property: JsonPropertyName("documentMessageHandlers")] ImmutableArray DocumentMessageHandlers, + [property: JsonPropertyName("extensionException"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + ExtensionException? ExtensionException); diff --git a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionWorkspaceMessageHandler.cs b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionWorkspaceMessageHandler.cs index ec8a0c3270542..0f77f1dc79b6d 100644 --- a/src/LanguageServer/Protocol/Handler/Extensions/ExtensionWorkspaceMessageHandler.cs +++ b/src/LanguageServer/Protocol/Handler/Extensions/ExtensionWorkspaceMessageHandler.cs @@ -27,13 +27,16 @@ public async Task HandleRequestAsync(ExtensionWorkspac var solution = context.Solution; var service = solution.Services.GetRequiredService(); - var (response, _, exception) = await service.HandleExtensionWorkspaceMessageAsync( + var (response, extensionWasUnloaded, exception) = await service.HandleExtensionWorkspaceMessageAsync( solution, request.MessageName, request.Message, cancellationToken).ConfigureAwait(false); // Report any exceptions the extension itself caused while handling the request. if (exception is not null) context.Logger.LogException(exception); - return new ExtensionMessageResponse(response!); + return new ExtensionMessageResponse( + response, + extensionWasUnloaded, + ExtensionException.FromException(exception)); } } diff --git a/src/Tools/ExternalAccess/Extensions/External/DocumentLinePosition.cs b/src/Tools/ExternalAccess/Extensions/External/DocumentLinePosition.cs index d4cb9f72cfa47..8028602f8acaa 100644 --- a/src/Tools/ExternalAccess/Extensions/External/DocumentLinePosition.cs +++ b/src/Tools/ExternalAccess/Extensions/External/DocumentLinePosition.cs @@ -4,6 +4,7 @@ using System; using System.Text.Json.Serialization; +using Microsoft.CodeAnalysis.ExternalAccess.Extensions; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.Extensions; @@ -25,7 +26,7 @@ public DocumentLinePosition(Document document, LinePosition linePosition) { _ = document ?? throw new ArgumentNullException(nameof(document)); - FilePath = document.FilePath ?? throw new InvalidOperationException("Missing document file path"); + FilePath = document.FilePath ?? throw new InvalidOperationException(ExternalAccessExtensionsResources.Missing_document_file_path); Line = linePosition.Line; Character = linePosition.Character; } diff --git a/src/Tools/ExternalAccess/Extensions/ExternalAccessExtensionsResources.resx b/src/Tools/ExternalAccess/Extensions/ExternalAccessExtensionsResources.resx new file mode 100644 index 0000000000000..4b86398d25d26 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/ExternalAccessExtensionsResources.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cannot create {0}. + + + Missing document file path + + + The message type {0} is not assignable to {1}. + + + Type {0} implements interface {1} more than once. + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerFactory.cs b/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerFactory.cs index 65b8c3eab8d27..4f4dbc66c3a99 100644 --- a/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerFactory.cs +++ b/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerFactory.cs @@ -7,6 +7,7 @@ using System.Composition; using System.Reflection; using System.Threading; +using Microsoft.CodeAnalysis.ExternalAccess.Extensions; using Microsoft.CodeAnalysis.Host.Mef; namespace Microsoft.CodeAnalysis.Extensions; @@ -55,7 +56,7 @@ private static ImmutableArray> Create interfaceType.GetGenericTypeDefinition() == unboundInterfaceType) { if (boundInterfaceType is not null) - throw new InvalidOperationException($"Type {candidateType.FullName} implements interface {unboundInterfaceType.Name} more than once."); + throw new InvalidOperationException(string.Format(ExternalAccessExtensionsResources.Type_0_implements_interface_1_more_than_once, candidateType.FullName, unboundInterfaceType.Name)); boundInterfaceType = interfaceType; } @@ -65,7 +66,7 @@ private static ImmutableArray> Create continue; var handler = Activator.CreateInstance(candidateType) - ?? throw new InvalidOperationException($"Cannot create {candidateType.FullName}."); + ?? throw new InvalidOperationException(string.Format(ExternalAccessExtensionsResources.Cannot_create_0, candidateType.FullName)); resultBuilder.Add(wrapperCreator(handler, boundInterfaceType)); } diff --git a/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerWrapper.cs b/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerWrapper.cs index e7d927fa189f7..7cc16748d45d3 100644 --- a/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerWrapper.cs +++ b/src/Tools/ExternalAccess/Extensions/Internal/ExtensionMessageHandlerWrapper.cs @@ -6,6 +6,7 @@ using System.Reflection; using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis.ExternalAccess.Extensions; namespace Microsoft.CodeAnalysis.Extensions; @@ -41,7 +42,7 @@ protected ExtensionHandlerWrapper(object handler, Type customMessageHandlerInter { if ((message is null && MessageType.IsValueType) || (message is not null && !MessageType.IsAssignableFrom(message.GetType()))) { - throw new InvalidOperationException($"The message type {message?.GetType().FullName ?? "null"} is not assignable to {MessageType.FullName}."); + throw new InvalidOperationException(string.Format(ExternalAccessExtensionsResources.The_message_type_0_is_not_assignable_to_1, message?.GetType().FullName ?? "null", MessageType.FullName)); } var responseTask = ExecuteAsync(_executeAsyncMethod, _handler, message, argument, cancellationToken); @@ -50,7 +51,7 @@ protected ExtensionHandlerWrapper(object handler, Type customMessageHandlerInter if ((response is null && ResponseType.IsValueType) || (response is not null && !ResponseType.IsAssignableFrom(response.GetType()))) { - throw new InvalidOperationException($"The message type {response?.GetType().FullName ?? "null"} is not assignable to {ResponseType.FullName}."); + throw new InvalidOperationException(string.Format(ExternalAccessExtensionsResources.The_message_type_0_is_not_assignable_to_1, response?.GetType().FullName ?? "null", ResponseType.FullName)); } return response; diff --git a/src/Tools/ExternalAccess/Extensions/Microsoft.CodeAnalysis.ExternalAccess.Extensions.csproj b/src/Tools/ExternalAccess/Extensions/Microsoft.CodeAnalysis.ExternalAccess.Extensions.csproj index 96439f3e9b9b6..51024596b5939 100644 --- a/src/Tools/ExternalAccess/Extensions/Microsoft.CodeAnalysis.ExternalAccess.Extensions.csproj +++ b/src/Tools/ExternalAccess/Extensions/Microsoft.CodeAnalysis.ExternalAccess.Extensions.csproj @@ -30,4 +30,7 @@ + + + diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.cs.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.cs.xlf new file mode 100644 index 0000000000000..bc4f3e153e72a --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.cs.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.de.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.de.xlf new file mode 100644 index 0000000000000..86e32b35c9a01 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.de.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.es.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.es.xlf new file mode 100644 index 0000000000000..627e0a92eac5d --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.es.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.fr.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.fr.xlf new file mode 100644 index 0000000000000..2ab84b22fd3f4 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.fr.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.it.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.it.xlf new file mode 100644 index 0000000000000..0ae0979623307 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.it.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ja.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ja.xlf new file mode 100644 index 0000000000000..cad727e62b19c --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ja.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ko.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ko.xlf new file mode 100644 index 0000000000000..6d3eaf995236a --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ko.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.pl.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.pl.xlf new file mode 100644 index 0000000000000..587e14386bf29 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.pl.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.pt-BR.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.pt-BR.xlf new file mode 100644 index 0000000000000..3147df051fd4e --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.pt-BR.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ru.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ru.xlf new file mode 100644 index 0000000000000..ddc6968646107 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.ru.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.tr.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.tr.xlf new file mode 100644 index 0000000000000..2b36e3acd92a3 --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.tr.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.zh-Hans.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.zh-Hans.xlf new file mode 100644 index 0000000000000..9744978c6f6ec --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.zh-Hans.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file diff --git a/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.zh-Hant.xlf b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.zh-Hant.xlf new file mode 100644 index 0000000000000..9066cb9fa434b --- /dev/null +++ b/src/Tools/ExternalAccess/Extensions/xlf/ExternalAccessExtensionsResources.zh-Hant.xlf @@ -0,0 +1,27 @@ + + + + + + Cannot create {0}. + Cannot create {0}. + + + + Missing document file path + Missing document file path + + + + The message type {0} is not assignable to {1}. + The message type {0} is not assignable to {1}. + + + + Type {0} implements interface {1} more than once. + Type {0} implements interface {1} more than once. + + + + + \ No newline at end of file