2 Commits eed912b200 ... 6dd47ba234

Autor SHA1 Mensagem Data
  randoman 6dd47ba234 Version 3.3.1 6 anos atrás
  randoman 8f1ce45620 more settings to control caching 6 anos atrás

+ 6 - 1
CHANGELOG.md

@@ -1,4 +1,9 @@
-### 3.3.0
+### 3.3.1
+ * MISC - Options to cache results of regex lookups and whitespace differences
+ * BUG FIX - Fixed 'WhitespaceRemovalStrategy.TrimPerNewline' which was broken to remove all non-repeating whitespace, rather than only the non-repeating whitespace surrounding newlines
+ * BUG FIX - Fully clear translations before reloading (ALT+R)
+
+### 3.3.0
  * FEATURE - Support 'TARC' regex formatting in translation files
  * FEATURE - Much improved handling of whitespace and newlines. Option 'TrimAllText' removed and options for 'WhitespaceRemovalStrategy' changed
  * BUG FIX - Allow hooking of text with components named 'Dummy'

+ 1 - 1
src/XUnity.AutoTranslator.Patcher/Patcher.cs

@@ -29,7 +29,7 @@ namespace XUnity.AutoTranslator.Patcher
       {
          get
          {
-            return "3.3.0";
+            return "3.3.1";
          }
       }
 

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.BepIn-5x/XUnity.AutoTranslator.Plugin.BepIn-5x.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>net35</TargetFramework>
-    <Version>3.3.0</Version>
+    <Version>3.3.1</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.BepIn/XUnity.AutoTranslator.Plugin.BepIn.csproj

@@ -2,7 +2,7 @@
 
    <PropertyGroup>
       <TargetFramework>net35</TargetFramework>
-      <Version>3.3.0</Version>
+      <Version>3.3.1</Version>
    </PropertyGroup>
 
    <ItemGroup>

+ 6 - 6
src/XUnity.AutoTranslator.Plugin.Core/AutoTranslationPlugin.cs

@@ -376,7 +376,7 @@ namespace XUnity.AutoTranslator.Plugin.Core
          var added = endpoint.EnqueueTranslation( ui, key, translationResult, context );
          if( added && translationResult == null )
          {
-            SpamChecker.PerformChecks( key.TrimmedText );
+            SpamChecker.PerformChecks( key.TrimmedTranslatableText );
          }
       }
 
@@ -433,10 +433,10 @@ namespace XUnity.AutoTranslator.Plugin.Core
       {
          if( Settings.CopyToClipboard && Features.SupportsClipboard )
          {
-            if( !_textsToCopyToClipboard.Contains( key.TrimmedText ) )
+            if( !_textsToCopyToClipboard.Contains( key.TrimmedTranslatableText ) )
             {
-               _textsToCopyToClipboard.Add( key.TrimmedText );
-               _textsToCopyToClipboardOrdered.Add( key.TrimmedText );
+               _textsToCopyToClipboard.Add( key.TrimmedTranslatableText );
+               _textsToCopyToClipboardOrdered.Add( key.TrimmedTranslatableText );
 
                _clipboardUpdated = Time.realtimeSinceStartup;
             }
@@ -1397,7 +1397,7 @@ namespace XUnity.AutoTranslator.Plugin.Core
       /// </summary>
       private IEnumerator WaitForTextStablization( UntranslatedText textKey, float delay, Action onTextStabilized, Action onFailed = null )
       {
-         var text = textKey.TrimmedText;
+         var text = textKey.TrimmedTranslatableText;
 
          if( !_immediatelyTranslating.Contains( text ) )
          {
@@ -1668,7 +1668,7 @@ namespace XUnity.AutoTranslator.Plugin.Core
             TextCache.AddTranslationToCache( job.Key.TranslatableText, job.TranslatedText );
          }
 
-         job.Endpoint.AddTranslationToCache( job.Key, job.TranslatedText );
+         job.Endpoint.AddTranslationToCache( job.Key.TranslatableText, job.TranslatedText );
 
          // fix translation results directly on jobs
          foreach( var translationResult in job.TranslationResults )

+ 4 - 0
src/XUnity.AutoTranslator.Plugin.Core/Configuration/Settings.cs

@@ -88,6 +88,8 @@ namespace XUnity.AutoTranslator.Plugin.Core.Configuration
       public static TextPostProcessing TranslationPostProcessing;
       public static bool EnableExperimentalHooks;
       public static bool ForceExperimentalHooks;
+      public static bool CacheRegexLookups;
+      public static bool CacheWhitespaceDifferences;
 
       public static string TextureDirectory;
       public static bool EnableTextureTranslation;
@@ -146,6 +148,8 @@ namespace XUnity.AutoTranslator.Plugin.Core.Configuration
             TranslationPostProcessing = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "TranslationPostProcessing", TextPostProcessing.ReplaceMacronWithCircumflex );
             EnableExperimentalHooks = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "EnableExperimentalHooks", false );
             ForceExperimentalHooks = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "ForceExperimentalHooks", false );
+            CacheRegexLookups = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "CacheRegexLookups", false );
+            CacheWhitespaceDifferences = PluginEnvironment.Current.Preferences.GetOrDefault( "Behaviour", "CacheWhitespaceDifferences", true );
 
             TextureDirectory = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "TextureDirectory", @"Translation\Texture" );
             EnableTextureTranslation = PluginEnvironment.Current.Preferences.GetOrDefault( "Texture", "EnableTextureTranslation", false );

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.Core/Constants/PluginData.cs

@@ -23,6 +23,6 @@ namespace XUnity.AutoTranslator.Plugin.Core.Constants
       /// <summary>
       /// Gets the version of the plugin.
       /// </summary>
-      public const string Version = "3.3.0";
+      public const string Version = "3.3.1";
    }
 }

+ 13 - 16
src/XUnity.AutoTranslator.Plugin.Core/Endpoints/TranslationEndpointManager.cs

@@ -70,7 +70,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
             return result;
          }
 
-         var modifiedKey = key.TrimmedText;
+         var modifiedKey = key.TrimmedTranslatableText;
          result = _translations.TryGetValue( modifiedKey, out value );
          if( result )
          {
@@ -87,8 +87,11 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
 
       private void AddTranslation( string key, string value )
       {
-         _translations[ key ] = value;
-         _reverseTranslations[ value ] = key;
+         if( key != null && value != null )
+         {
+            _translations[ key ] = value;
+            _reverseTranslations[ value ] = key;
+         }
       }
 
       private void QueueNewTranslationForDisk( string key, string value )
@@ -96,12 +99,6 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
          // FIXME: Implement
       }
 
-      public void AddTranslationToCache( UntranslatedText key, string value )
-      {
-         // UNRELEASED: Not included in current release
-         //AddTranslationToCache( key.GetDictionaryLookupKey(), value );
-      }
-
       public void AddTranslationToCache( string key, string value )
       {
          // UNRELEASED: Not included in current release
@@ -142,7 +139,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
                _unstartedJobs.Remove( key );
                Manager.UnstartedTranslations--;
 
-               var untranslatedText = job.Key.TrimmedText;
+               var untranslatedText = job.Key.TrimmedTranslatableText;
                if( CanTranslate( untranslatedText ) )
                {
                   jobs.Add( job );
@@ -199,7 +196,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
             _unstartedJobs.Remove( key );
             Manager.UnstartedTranslations--;
 
-            var untranslatedText = job.Key.TrimmedText;
+            var untranslatedText = job.Key.TrimmedTranslatableText;
             if( CanTranslate( untranslatedText ) )
             {
                _ongoingJobs[ key ] = job;
@@ -249,7 +246,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
 
                RemoveOngoingTranslation( job.Key );
 
-               XuaLogger.Current.Info( $"Completed: '{job.Key.TrimmedText}' => '{job.TranslatedText}'" );
+               XuaLogger.Current.Info( $"Completed: '{job.Key.TrimmedTranslatableText}' => '{job.TranslatedText}'" );
 
                Manager.InvokeJobCompleted( job );
             }
@@ -286,7 +283,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
 
          RemoveOngoingTranslation( job.Key );
 
-         XuaLogger.Current.Info( $"Completed: '{job.Key.TrimmedText}' => '{job.TranslatedText}'" );
+         XuaLogger.Current.Info( $"Completed: '{job.Key.TrimmedTranslatableText}' => '{job.TranslatedText}'" );
 
          Manager.InvokeJobCompleted( job );
       }
@@ -338,7 +335,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
 
                RemoveOngoingTranslation( key );
 
-               RegisterTranslationFailureFor( key.TrimmedText );
+               RegisterTranslationFailureFor( key.TrimmedTranslatableText );
 
                Manager.InvokeJobFailed( job );
             }
@@ -411,7 +408,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
             }
          }
 
-         XuaLogger.Current.Debug( "Queued: '" + key.TrimmedText + "'" );
+         XuaLogger.Current.Debug( "Queued: '" + key.TrimmedTranslatableText + "'" );
 
          var saveResultGlobally = checkOtherEndpoints;
          var newJob = new TranslationJob( this, key, saveResultGlobally );
@@ -476,7 +473,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Endpoints
 
          foreach( var job in unstartedJobs )
          {
-            XuaLogger.Current.Warn( $"Dequeued: '{job.Key.TrimmedText}'" );
+            XuaLogger.Current.Warn( $"Dequeued: '{job.Key.TrimmedTranslatableText}'" );
             job.Value.State = TranslationJobState.Failed;
             job.Value.ErrorMessage = "Translation failed because all jobs on endpoint was cleared.";
 

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.Core/Hooks/IMGUIHooks.cs

@@ -27,7 +27,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.Hooks.IMGUI
          typeof( GUI_DoButton_Hook ),
          typeof( GUI_DoModalWindow_Hook ),
          typeof( GUI_DoWindow_Hook ),
-         typeof( GUI_DoTextField_Hook ),
+         //typeof( GUI_DoTextField_Hook ), // Why did I think this was a good idea?
          typeof( GUI_DoButtonGrid_Hook ),
          typeof( GUI_DoToggle_Hook ),
       };

+ 48 - 23
src/XUnity.AutoTranslator.Plugin.Core/TextTranslationCache.cs

@@ -53,6 +53,8 @@ namespace XUnity.AutoTranslator.Plugin.Core
 
                _registeredRegexes.Clear();
                _defaultRegexes.Clear();
+               _translations.Clear();
+               _reverseTranslations.Clear();
 
                var mainTranslationFile = Settings.AutoTranslationsFilePath;
                LoadTranslationsInFile( mainTranslationFile );
@@ -110,9 +112,9 @@ namespace XUnity.AutoTranslator.Plugin.Core
                            // also add a modified version of the translation
                            var ukey = new UntranslatedText( key, false, false );
                            var uvalue = new UntranslatedText( value, false, false );
-                           if( ukey.TrimmedText != key )
+                           if( ukey.TrimmedTranslatableText != key )
                            {
-                              AddTranslation( ukey.TrimmedText, uvalue.TrimmedText );
+                              AddTranslation( ukey.TrimmedTranslatableText, uvalue.TrimmedTranslatableText );
                            }
                         }
                         break;
@@ -203,8 +205,11 @@ namespace XUnity.AutoTranslator.Plugin.Core
 
       private void AddTranslation( string key, string value )
       {
-         _translations[ key ] = value;
-         _reverseTranslations[ value ] = key;
+         if( key != null && value != null )
+         {
+            _translations[ key ] = value;
+            _reverseTranslations[ value ] = key;
+         }
       }
 
       private void QueueNewTranslationForDisk( string key, string value )
@@ -220,6 +225,15 @@ namespace XUnity.AutoTranslator.Plugin.Core
          if( !HasTranslated( key ) )
          {
             AddTranslation( key, value );
+
+            // also add a trimmed version of the translation
+            var ukey = new UntranslatedText( key, false, false );
+            var uvalue = new UntranslatedText( value, false, false );
+            if( ukey.TrimmedTranslatableText != key && !HasTranslated( ukey.TrimmedTranslatableText ) )
+            {
+               AddTranslation( ukey.TrimmedTranslatableText, uvalue.TrimmedTranslatableText );
+            }
+
             if( persistToDisk )
             {
                QueueNewTranslationForDisk( key, value );
@@ -236,40 +250,51 @@ namespace XUnity.AutoTranslator.Plugin.Core
             return result;
          }
 
-         var modifiedKey = key.TrimmedText;
-         result = _translations.TryGetValue( modifiedKey, out value );
-         if( result )
+         var modifiedKey = key.TrimmedTranslatableText;
+         if( modifiedKey != unmodifiedKey )
          {
-            // add an unmodifiedKey to the dictionary
-            var unmodifiedValue = key.LeadingWhitespace + value + key.TrailingWhitespace;
+            result = _translations.TryGetValue( modifiedKey, out value );
+            if( result )
+            {
+               // add an unmodifiedKey to the dictionary
+               var unmodifiedValue = key.LeadingWhitespace + value + key.TrailingWhitespace;
 
-            XuaLogger.Current.Info( $"Whitespace difference: '{key.TrimmedText}' => '{value}'" );
-            AddTranslationToCache( unmodifiedKey, unmodifiedValue, false );
+               XuaLogger.Current.Info( $"Whitespace difference: '{key.TrimmedTranslatableText}' => '{value}'" );
+               AddTranslationToCache( unmodifiedKey, unmodifiedValue, Settings.CacheWhitespaceDifferences );
 
-            value = unmodifiedValue;
-            return result;
+               value = unmodifiedValue;
+               return result;
+            }
          }
 
          if( allowRegex )
          {
             bool found = false;
 
-            var len = _defaultRegexes.Count;
-            for( int i = 0; i < len; i++ )
+            for( int i = _defaultRegexes.Count - 1; i > -1; i-- )
             {
                var regex = _defaultRegexes[ i ];
-               var match = regex.CompiledRegex.Match( unmodifiedKey );
-               if( !match.Success ) continue;
+               try
+               {
+                  var match = regex.CompiledRegex.Match( unmodifiedKey );
+                  if( !match.Success ) continue;
 
-               var translation = regex.CompiledRegex.Replace( unmodifiedKey, regex.Translation );
+                  var translation = regex.CompiledRegex.Replace( unmodifiedKey, regex.Translation );
 
-               AddTranslationToCache( unmodifiedKey, translation, false ); // Would store it to file... Should we????
+                  AddTranslationToCache( unmodifiedKey, translation, Settings.CacheRegexLookups ); // Would store it to file... Should we????
 
-               value = translation;
-               found = true;
+                  value = translation;
+                  found = true;
 
-               XuaLogger.Current.Info( $"Regex lookup: '{key.TrimmedText}' => '{value}'" );
-               break;
+                  XuaLogger.Current.Info( $"Regex lookup: '{key.TrimmedTranslatableText}' => '{value}'" );
+                  break;
+               }
+               catch( Exception e )
+               {
+                  _defaultRegexes.RemoveAt( i );
+
+                  XuaLogger.Current.Error( e, $"Failed while attempting to replace or match text of regex '{regex.Original}'. Removing that regex from the cache." );
+               }
             }
 
             if( found )

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.Core/UI/AggregatedTranslationViewModel.cs

@@ -39,7 +39,7 @@ namespace XUnity.AutoTranslator.Plugin.Core.UI
                if( _started.HasValue )
                {
                   var timeSince = Time.realtimeSinceStartup - _started.Value;
-                  if( timeSince > 1.0f )
+                  if( timeSince > 2.0f )
                   {
                      foreach( var additionTranslation in AggregatedTranslations )
                      {

+ 73 - 31
src/XUnity.AutoTranslator.Plugin.Core/UntranslatedText.cs

@@ -71,48 +71,90 @@ namespace XUnity.AutoTranslator.Plugin.Core
                builder.Append( LeadingWhitespace );
             }
 
-            char currentWhitespaceChar = default( char );
-            bool addedCurrentWhitespace = false;
+            int whitespaceStart = -1;
             for( i = firstNonWhitespace; i <= lastNonWhitespace; i++ )
             {
                var c = text[ i ];
-               if( !char.IsWhiteSpace( c ) )
-               {
-                  builder.Append( c );
 
-                  currentWhitespaceChar = default( char );
-               }
-               else
+               if( c == '\n' )
                {
-                  // keep repeating whitespace
-                  if( c == currentWhitespaceChar )
+                  // find first non-whitespace
+                  int u = i - 1;
+                  while( u > firstNonWhitespace && char.IsWhiteSpace( text[ u ] ) ) u--;
+
+                  int o = i + 1;
+                  while( o < lastNonWhitespace && char.IsWhiteSpace( text[ o ] ) ) o++;
+
+                  u++;
+                  o--;
+                  int l = o - u;
+                  if( l > 0 )
                   {
-                     if( !addedCurrentWhitespace )
+                     char currentWhitespaceChar = text[ u ];
+                     bool addedCurrentWhitespace = false;
+                     u++;
+
+                     for( int k = u; k <= o; k++ )
                      {
-                        builder.Append( currentWhitespaceChar );
-                        addedCurrentWhitespace = true;
+                        var ch = text[ k ];
+
+                        // keep repeating whitespace
+                        if( ch == currentWhitespaceChar )
+                        {
+                           if( !addedCurrentWhitespace )
+                           {
+                              builder.Append( currentWhitespaceChar );
+                              addedCurrentWhitespace = true;
+                           }
+
+                           builder.Append( ch );
+                        }
+                        else
+                        {
+                           addedCurrentWhitespace = false;
+                           currentWhitespaceChar = ch;
+                        }
+
+                        if( Settings.UsesWhitespaceBetweenWords && ( ch == '\n' || ch == '\r' ) )
+                        {
+                           if( builder.Length > 0 && builder[ builder.Length - 1 ] != ' ' )
+                           {
+                              builder.Append( ' ' );
+                           }
+
+                           var nextK = k + 1;
+                           if( nextK < lastNonWhitespace && text[ nextK ] == '\n' )
+                           {
+                              k++;
+                           }
+                        }
                      }
-
-                     builder.Append( c );
                   }
-                  else
-                  {
-                     addedCurrentWhitespace = false;
-                     currentWhitespaceChar = c;
-                  }
-               }
 
-               if( Settings.UsesWhitespaceBetweenWords && ( c == '\n' || c == '\r' ) )
+                  i = o;
+                  whitespaceStart = -1;
+               }
+               else if( !char.IsWhiteSpace( c ) )
                {
-                  if( builder.Length > 0 && builder[ builder.Length - 1 ] != ' ' )
+                  if( whitespaceStart != -1 )
                   {
-                     builder.Append( ' ' );
+                     // add from whitespaceStart to i - 1 of characters
+                     for( int b = whitespaceStart; b < i; b++ )
+                     {
+                        builder.Append( text[ b ] );
+                     }
+
+                     whitespaceStart = -1;
                   }
 
-                  var nextI = i + 1;
-                  if( nextI < lastNonWhitespace && text[ nextI ] == '\n' )
+                  builder.Append( c );
+               }
+               else
+               {
+                  // is whitespace char different from \n
+                  if( whitespaceStart == -1 )
                   {
-                     i++;
+                     whitespaceStart = i;
                   }
                }
             }
@@ -134,11 +176,11 @@ namespace XUnity.AutoTranslator.Plugin.Core
 
          if( leadingWhitespaceCount > 0 || trailingWhitespaceCount > 0 )
          {
-            TrimmedText = TranslatableText.Substring( leadingWhitespaceCount, TranslatableText.Length - trailingWhitespaceCount - leadingWhitespaceCount );
+            TrimmedTranslatableText = TranslatableText.Substring( leadingWhitespaceCount, TranslatableText.Length - trailingWhitespaceCount - leadingWhitespaceCount );
          }
          else
          {
-            TrimmedText = TranslatableText;
+            TrimmedTranslatableText = TranslatableText;
          }
       }
 
@@ -146,10 +188,10 @@ namespace XUnity.AutoTranslator.Plugin.Core
 
       public string TrailingWhitespace { get; }
 
-      public string TrimmedText { get; }
-
       public string TranslatableText { get; }
 
+      public string TrimmedTranslatableText { get; }
+
       public string OriginalText { get; }
 
       public TemplatedString TemplatedText { get; }

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.Core/XUnity.AutoTranslator.Plugin.Core.csproj

@@ -2,7 +2,7 @@
 
    <PropertyGroup>
       <TargetFramework>net35</TargetFramework>
-      <Version>3.3.0</Version>
+      <Version>3.3.1</Version>
    </PropertyGroup>
 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.IPA/XUnity.AutoTranslator.Plugin.IPA.csproj

@@ -2,7 +2,7 @@
 
    <PropertyGroup>
       <TargetFramework>net35</TargetFramework>
-      <Version>3.3.0</Version>
+      <Version>3.3.1</Version>
    </PropertyGroup>
 
    <ItemGroup>

+ 1 - 1
src/XUnity.AutoTranslator.Plugin.UnityInjector/XUnity.AutoTranslator.Plugin.UnityInjector.csproj

@@ -2,7 +2,7 @@
 
    <PropertyGroup>
       <TargetFramework>net35</TargetFramework>
-      <Version>3.3.0</Version>
+      <Version>3.3.1</Version>
    </PropertyGroup>
 
    <ItemGroup>

+ 1 - 1
src/XUnity.AutoTranslator.Setup/XUnity.AutoTranslator.Setup.csproj

@@ -4,7 +4,7 @@
       <OutputType>Exe</OutputType>
       <TargetFramework>net40</TargetFramework>
       <AssemblyName>SetupReiPatcherAndAutoTranslator</AssemblyName>
-      <Version>3.3.0</Version>
+      <Version>3.3.1</Version>
       <ApplicationIcon>icon.ico</ApplicationIcon>
       <Win32Resource />
    </PropertyGroup>

+ 15 - 7
test/XUnity.AutoTranslator.Plugin.Core.Tests/UntranslatedTextTests.cs

@@ -19,41 +19,49 @@ namespace XUnity.AutoTranslator.Plugin.Core.Tests
          var untranslatedText = new UntranslatedText( input, false, false );
 
          Assert.Equal( input, untranslatedText.TranslatableText );
-         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedText );
+         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedTranslatableText );
          Assert.Equal( expectedLeadingWhitespace, untranslatedText.LeadingWhitespace );
          Assert.Equal( expectedTrailingWhitespace, untranslatedText.TrailingWhitespace );
       }
 
       [Theory( DisplayName = "Can_Trim_Internal_Whitespace" )]
-      [InlineData( "Hel lo", "Hello" )]
+      [InlineData( "Hel lo", "Hel lo" )]
       [InlineData( "Hel\r\n lo", "Hello" )]
+      [InlineData( "Hel\n\nlo", "Hel\n\nlo" )]
       public void Can_Trim_Internal_Whitespace( string input, string expectedTrimmedText )
       {
          var untranslatedText = new UntranslatedText( input, false, true );
          
-         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedText );
+         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedTranslatableText );
       }
 
       [Theory( DisplayName = "Can_Trim_Internal_And_Surrounding_Whitespace" )]
-      [InlineData( "\r\n \r\nHe llo", "Hello", "\r\n \r\n", null )]
+      [InlineData( "\r\n \r\nHe llo", "He llo", "\r\n \r\n", null )]
+      [InlineData( "\r\n \r\nHe   llo", "He   llo", "\r\n \r\n", null )]
       [InlineData( "\r\n \r\nHel\r\nlo\n", "Hello", "\r\n \r\n", "\n" )]
+      [InlineData( "\r\n \r\nHel\n\nlo\n", "Hel\n\nlo", "\r\n \r\n", "\n" )]
+      [InlineData( "\r\n \r\nHel\n\n lo\n", "Hel\n\nlo", "\r\n \r\n", "\n" )]
+      [InlineData( "\r\n \r\nHel\n\n  lo\n", "Hel\n\n  lo", "\r\n \r\n", "\n" )]
+      [InlineData( "\r\n \r\nHel  \n\n  lo\n", "Hel  \n\n  lo", "\r\n \r\n", "\n" )]
+      [InlineData( "\r\n \r\nHel  \n  lo\n", "Hel    lo", "\r\n \r\n", "\n" )]
+      [InlineData( "\r\n \r\nHel \n lo\n", "Hello", "\r\n \r\n", "\n" )]
       [InlineData( "\r\r\r\r\n \n Hell\no  \r\n", "Hello", "\r\r\r\r\n \n ", "  \r\n" )]
       public void Can_Trim_Internal_And_Surrounding_Whitespace( string input, string expectedTrimmedText, string expectedLeadingWhitespace, string expectedTrailingWhitespace )
       {
          var untranslatedText = new UntranslatedText( input, false, true );
 
-         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedText );
+         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedTranslatableText );
          Assert.Equal( expectedLeadingWhitespace, untranslatedText.LeadingWhitespace );
          Assert.Equal( expectedTrailingWhitespace, untranslatedText.TrailingWhitespace );
       }
 
       [Theory( DisplayName = "Can_Trim_Internal_And_Surrounding_Whitespace_And_Template" )]
-      [InlineData( "\r\n \r\nFPS: 60.53", "FPS:{{A}}", "\r\n \r\n", null )]
+      [InlineData( "\r\n \r\nFPS: 60.53", "FPS: {{A}}", "\r\n \r\n", null )]
       public void Can_Trim_Internal_And_Surrounding_Whitespace_And_Template( string input, string expectedTrimmedText, string expectedLeadingWhitespace, string expectedTrailingWhitespace )
       {
          var untranslatedText = new UntranslatedText( input, true, true );
 
-         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedText );
+         Assert.Equal( expectedTrimmedText, untranslatedText.TrimmedTranslatableText );
          Assert.Equal( expectedLeadingWhitespace, untranslatedText.LeadingWhitespace );
          Assert.Equal( expectedTrailingWhitespace, untranslatedText.TrailingWhitespace );
       }