Search & replace multiple words/terms in pre-translated segments?

I often find myself doing multiple search & replace of the same words again and again in pre-translated segments and I'm thinking there's got to be a way to automate that somewhow, perhaps using a script. Any ideas?

emoji
Parents
  • Hello,

    Absolutely, Trados Studio has a feature that can help you with this. It's called "MultiTerm Replace" and it allows you to replace multiple terms in one go. Here's how you can use it:

    Step 1: Open your project in Trados Studio.

    Step 2: Go to the "Review" tab.

    Step 3: Click on "Search" in the "Editing" group.

    Step 4: In the "Search" dialog box, click on the "Replace" tab.

    Step 5: Enter the term you want to find in the "Search for" box.

    Step 6: Enter the term you want to replace it with in the "Replace with" box.

    Step 7: Click on "Add to List". This will add the pair to the list of terms to be replaced.

    Step 8: Repeat steps 5 to 7 for all the terms you want to replace.

    Step 9: Once you've added all the terms, click on "Replace All".

    This will replace all instances of the terms in the list throughout your project. Please note that this feature is case-sensitive, so make sure to enter the terms exactly as they appear in your text.

    I hope this helps! If you have any other questions, feel free to ask.

    Best regards,

    RWS Community AI

    emoji
  • Excuse me, say what?!

    I'm not seeing "Editing" in the Review tab, but I do have it in my Home tab:

    Trados Studio Home tab showing options for Find, Replace, Select All, and Editing.

    I'm not seeing "Search", and Find and Replace simply open the normal Find/Replace window:

    Trados Studio Find and Replace window with tabs for Find and Replace, input fields for 'Find what:' and 'Replace with:', and various search options.

    Not seeing an "Add to list" option here.

    Can someone help me out? It sounds like an interesting feature.

    emoji


    Generated Image Alt-Text
    [edited by: Trados AI at 11:47 AM (GMT 0) on 29 Feb 2024]
  •  

    Also what version of Trados Studio and what operating system.

    Gives you some idea of just how much error handling the development team need to put into every single small thing they build!!  Also explains whey it always works on "my computer"!

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
  • Trados Studio 2022 SR1 - 17.1.6.16252
    Windows 11 Home 10.0.2261 Build 22621

    Can it have something to do with where my trados files are located? Again, I can see the S&R box cycling through all the replacements in my replacement file, but nothing gets changed in the target column. Looks like we're very close, but...

    emoji
  •   

    I tried to replicate your setup as follows... all good:

    However...

    1. I don't have W11.  ChatGPT says this:
      "There aren't any inherent changes in Windows 11 that would directly impact the functionality of AutoHotkey scripts compared to Windows 10. However, there might be changes in user interface or system behaviors in Windows 11 that could affect the behavior of your script, especially if it relies on interacting with specific applications or parts of the Windows interface.  For instance, if an application's controls have changed (names, positions, etc.) in the new version of the OS, the script might fail to interact with them as expected. This might be relevant for your script, since it involves interacting with Trados Studio."

    2. I don't know what version of AHK you're running, I have 1.1.33.10.  You can use this single line script to get that:
      MsgBox % "AutoHotkey version: " . A_AhkVersion

    3. I don't know what your replacement file looks like... and empty rows, additional lines at the end or start?

    On point 1. I guess you could check the labelling I used for the search, replace and replace all button using AHK's Window Spy?  I used these:

    Edit2
    Edit1
    WindowsForms10.BUTTON.app.0.ea119_r8_ad19

    In that order.  I can't think why these would change, but probably worth checking.

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
  •  

    I also checked with ChatGPT as it's smarter than me...

    It could be due to several reasons:

    1. **Differences in the setup**: Check if all file paths and file contents are correct and match what the script expects. This includes the path to the settings file and the search and replace files mentioned in the settings file.

    2. **Permissions**: Ensure that the script has the necessary permissions to read the files. If the files are in a protected directory or if there are user-specific restrictions, the script might fail to read the files. Try running the script as an administrator.

    3. **Differences in software versions**: Even if the version of SDL Trados Studio is the same, differences in other software versions (like Windows or AutoHotkey itself) might cause different behavior. If possible, try to use the same versions of all relevant software.

    4. **Differences in system settings**: For example, if the target system is using a different display scaling setting, it might affect the coordinates used by the script for GUI positioning and clicks.

    5. **Differences in Windows versions**: As I mentioned in the previous message, there might be changes in user interface or system behaviors in Windows 11 that could affect the behavior of your script.

    6. **Script Execution**: Make sure that the script is properly started (as an administrator, if necessary) and that the hotkey is pressed in the right context.

    If the problem persists, try debugging the script by adding message boxes (`MsgBox`) at various points in the script to check if the script is running as expected and to identify where it might fail. Also, try to see if there are any error messages or if the script is exiting prematurely.

    If it's only the search and replace functionality that's not working, make sure the search terms in the selected file exactly match the text in SDL Trados Studio (considering case sensitivity, white spaces, special characters etc.). Also, ensure the control names (`Edit2`, `Edit1`, `WindowsForms10.BUTTON.app.0.ea119_r8_ad19`) in the script are still valid in the other user's SDL Trados Studio.

    Remember to always back up your data before running scripts that modify it, especially when debugging.

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
  • Hmmm... I just upgraded to the latest version of AHK (2.0) to see if it would make any difference. It doesn't. My replacements file is very simple. For testing purposes it only has this:

    Cybertip Cyberaide
    C3P CCPE
    Project Arachnid Projet Arachnid

    All separated by tabs. I even get your "Operation complete" message at the end, but again, nothing gets changed in the target column even though it does contain segments with the words "Cybertip", "C3P" and "Project Arachnid".

    emoji
  •  

    Maybe a more basic problem... do you have anything else different in your search & replace window to the settings I used?

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
  •  

    And something else... do you have the French UI and a French operating system language?  This may also change things.  Have you checked with Windows Spy to make sure the references are correct?

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
  •  

    The script from Paul won’t work on AutoHotkey 2.0. There are major changes on 2.0 and this version is not back-compatible with 1.1.

    You should be getting a lot of errors with 2.0. I’m wondering if you are actually running the script…

    Uninstall AutoHotkey 2.0 or at least ensure you’re using AutoHotkey 1.1.37.01.

    emoji
  • Thanks Paul and Jesús! So I uninstalled AHK 2.0 and installed 1.1.37.01 – same result :-(

    I'm using the script exactly as Paul wrote it, except for the link to the settings file. I'm using the English UI for both Windows and Trados. Windows Spy isn't telling me anything particular. So again, the script is triggered when I close the drop-down box, cycles through all the replacements, tells me the operation is complete, but nothing gets changed in the target column. I'm owing a beer (at least one!) to anyone who can help me solve this!

    emoji
  •  

    ok - I was testing a bit and I happened to do it on my laptop screen instead of the external monitor I used before and it failed... as yours does.  

    The positioning of the dropdown menu and the final message box in the script is dependent on the position of the active window (Trados Studio) when the hotkey is pressed. The coordinates are retrieved using WinGetPos, PosX, PosY,,, A, which gets the position of the active window in screen coordinates, and these are then used to position the GUIs.

    When moving between screens with different resolutions or scaling settings, the relative position of the window can change, and it might end up being displayed partially or fully off-screen and throw off the way the script works.  To mitigate this issue I used SysGet to get the size and position of the monitor where the active window is located, and then ensure that the GUIs are positioned within these bounds.

    So try this... and fingers crossed you have the same issue!

    ^!h:: ; The hotkey for Ctrl+Alt+H to start the process
    global filePaths := {} ; Create an associative array to store full file paths
    global fileNames := "" ; Create a variable to store the file names
    global PosX, PosY ; Create global variables to store the dropdown menu's position
    
    Gui, Add, DropDownList, w450 vFilePath ; Add a dropdown list to the GUI with width of 400
    Gui, Font, s12 ; Set the font size to 12
    
    Loop, Read, c:\AHK scripts\settings.txt ; Read the hardcoded settings file line by line
    {
        SplitPath, A_LoopReadLine, name, dir, ext, name_no_ext, drive ; Split the file path into parts
        fileNames .= name_no_ext . "|" ; Add the file name (without extension) to the string, separated by "|"
        filePaths[name_no_ext] := A_LoopReadLine ; Store the full file path in the associative array
    }
    
    fileNames := SubStr(fileNames, 1, StrLen(fileNames) - 1) ; Remove the last "|"
    GuiControl,, FilePath, %fileNames% ; Set the items of the dropdown list
    
    WinGetPos, PosX, PosY, Width, Height, A ; Get the position and size of the active window
    SysGet, Monitor, MonitorWorkArea, % "Monitor" . ((PosX + Width / 2) // (A_ScreenWidth / A_ScreenCount) + 1) ; Get the work area of the monitor where the window's center is located
    if (PosX < MonitorLeft)
        PosX := MonitorLeft
    else if (PosX > MonitorRight - 500) ; 500 is the width of the GUIs
        PosX := MonitorRight - 500
    if (PosY < MonitorTop)
        PosY := MonitorTop
    else if (PosY > MonitorBottom - 100) ; 100 is the height of the GUIs
        PosY := MonitorBottom - 100
    PosY := PosY - 150 ; Subtract 150 from PosY
    Gui, Show, x%PosX% y%PosY% w500 h100, Select a file ; Show the GUI at the position of the active window with a larger window
    WinSet, AlwaysOnTop, On, A ; Make the GUI always stay on top of other windows
    return
    
    GuiClose: ; When the GUI is closed
    Gui, Submit, NoHide ; Store the dropdown list's current selection in the variable filePath
    filePath := filePaths[filePath] ; Retrieve the full file path from the associative array
    Gui, Destroy ; Destroy the GUI
    GoSub, StartReplace ; Continue with the search and replace operation
    return
    
    StartReplace:
    WinActivate, ahk_exe SDLTradosStudio.exe ; Activate SDL Trados Studio
    
    Loop, Read, %filePath% ; Read the selected file line by line
    {
        StringSplit, line, A_LoopReadLine, `t ; Split the line into "line1" (search term) and "line2" (target term)
        searchTerm := line1 ; Assign the search term
        targetTerm := line2 ; Assign the target term
    
        ; Click in the "Find what" field
        ControlClick, Edit2, ahk_exe SDLTradosStudio.exe
        Sleep, 100
        ; Select all text and delete it
        Send, {Home}+{End}{Del}
        Sleep, 100
        ; Send the search term keystrokes
        Send, {Text}%searchTerm%
        Sleep, 100
    
        ; Click in the "Replace with" field
        ControlClick, Edit1, ahk_exe SDLTradosStudio.exe
        Sleep, 100
        ; Select all text and delete it
        Send, {Home}+{End}{Del}
        Sleep, 100
        ; Send the target term keystrokes
        Send, {Text}%targetTerm%
        Sleep, 100
    
        ; Click the "Replace All" button
        ControlClick, WindowsForms10.BUTTON.app.0.ea119_r8_ad19, ahk_exe SDLTradosStudio.exe
        Sleep, 100
    }
    
    ; PosY := PosY - 150 ; Subtract 150 from PosY
    Gui, 2:New, +AlwaysOnTop ; Create a new GUI for our custom message box
    Gui, 2:Font, s12 ; Set the font size to 12
    Gui, 2:Add, Text, w500 h50, The search and replace operation is complete. ; Add a text element to the GUI
    Gui, 2:Show, x%PosX% y%PosY% w500 h100, Operation Complete ; Show the GUI at the position of the dropdown menu with the title "Operation Complete"
    
    Sleep, 500 ; Wait for 500 milliseconds (half a second)
    WinActivate, Operation Complete ; Activate the GUI window using its unique title
    
    return
    
    2GuiClose: ; When the custom message box is closed
    Gui, 2:Destroy ; Destroy the GUI
    return
    

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
Reply
  •  

    ok - I was testing a bit and I happened to do it on my laptop screen instead of the external monitor I used before and it failed... as yours does.  

    The positioning of the dropdown menu and the final message box in the script is dependent on the position of the active window (Trados Studio) when the hotkey is pressed. The coordinates are retrieved using WinGetPos, PosX, PosY,,, A, which gets the position of the active window in screen coordinates, and these are then used to position the GUIs.

    When moving between screens with different resolutions or scaling settings, the relative position of the window can change, and it might end up being displayed partially or fully off-screen and throw off the way the script works.  To mitigate this issue I used SysGet to get the size and position of the monitor where the active window is located, and then ensure that the GUIs are positioned within these bounds.

    So try this... and fingers crossed you have the same issue!

    ^!h:: ; The hotkey for Ctrl+Alt+H to start the process
    global filePaths := {} ; Create an associative array to store full file paths
    global fileNames := "" ; Create a variable to store the file names
    global PosX, PosY ; Create global variables to store the dropdown menu's position
    
    Gui, Add, DropDownList, w450 vFilePath ; Add a dropdown list to the GUI with width of 400
    Gui, Font, s12 ; Set the font size to 12
    
    Loop, Read, c:\AHK scripts\settings.txt ; Read the hardcoded settings file line by line
    {
        SplitPath, A_LoopReadLine, name, dir, ext, name_no_ext, drive ; Split the file path into parts
        fileNames .= name_no_ext . "|" ; Add the file name (without extension) to the string, separated by "|"
        filePaths[name_no_ext] := A_LoopReadLine ; Store the full file path in the associative array
    }
    
    fileNames := SubStr(fileNames, 1, StrLen(fileNames) - 1) ; Remove the last "|"
    GuiControl,, FilePath, %fileNames% ; Set the items of the dropdown list
    
    WinGetPos, PosX, PosY, Width, Height, A ; Get the position and size of the active window
    SysGet, Monitor, MonitorWorkArea, % "Monitor" . ((PosX + Width / 2) // (A_ScreenWidth / A_ScreenCount) + 1) ; Get the work area of the monitor where the window's center is located
    if (PosX < MonitorLeft)
        PosX := MonitorLeft
    else if (PosX > MonitorRight - 500) ; 500 is the width of the GUIs
        PosX := MonitorRight - 500
    if (PosY < MonitorTop)
        PosY := MonitorTop
    else if (PosY > MonitorBottom - 100) ; 100 is the height of the GUIs
        PosY := MonitorBottom - 100
    PosY := PosY - 150 ; Subtract 150 from PosY
    Gui, Show, x%PosX% y%PosY% w500 h100, Select a file ; Show the GUI at the position of the active window with a larger window
    WinSet, AlwaysOnTop, On, A ; Make the GUI always stay on top of other windows
    return
    
    GuiClose: ; When the GUI is closed
    Gui, Submit, NoHide ; Store the dropdown list's current selection in the variable filePath
    filePath := filePaths[filePath] ; Retrieve the full file path from the associative array
    Gui, Destroy ; Destroy the GUI
    GoSub, StartReplace ; Continue with the search and replace operation
    return
    
    StartReplace:
    WinActivate, ahk_exe SDLTradosStudio.exe ; Activate SDL Trados Studio
    
    Loop, Read, %filePath% ; Read the selected file line by line
    {
        StringSplit, line, A_LoopReadLine, `t ; Split the line into "line1" (search term) and "line2" (target term)
        searchTerm := line1 ; Assign the search term
        targetTerm := line2 ; Assign the target term
    
        ; Click in the "Find what" field
        ControlClick, Edit2, ahk_exe SDLTradosStudio.exe
        Sleep, 100
        ; Select all text and delete it
        Send, {Home}+{End}{Del}
        Sleep, 100
        ; Send the search term keystrokes
        Send, {Text}%searchTerm%
        Sleep, 100
    
        ; Click in the "Replace with" field
        ControlClick, Edit1, ahk_exe SDLTradosStudio.exe
        Sleep, 100
        ; Select all text and delete it
        Send, {Home}+{End}{Del}
        Sleep, 100
        ; Send the target term keystrokes
        Send, {Text}%targetTerm%
        Sleep, 100
    
        ; Click the "Replace All" button
        ControlClick, WindowsForms10.BUTTON.app.0.ea119_r8_ad19, ahk_exe SDLTradosStudio.exe
        Sleep, 100
    }
    
    ; PosY := PosY - 150 ; Subtract 150 from PosY
    Gui, 2:New, +AlwaysOnTop ; Create a new GUI for our custom message box
    Gui, 2:Font, s12 ; Set the font size to 12
    Gui, 2:Add, Text, w500 h50, The search and replace operation is complete. ; Add a text element to the GUI
    Gui, 2:Show, x%PosX% y%PosY% w500 h100, Operation Complete ; Show the GUI at the position of the dropdown menu with the title "Operation Complete"
    
    Sleep, 500 ; Wait for 500 milliseconds (half a second)
    WinActivate, Operation Complete ; Activate the GUI window using its unique title
    
    return
    
    2GuiClose: ; When the custom message box is closed
    Gui, 2:Destroy ; Destroy the GUI
    return
    

    Paul Filkin | RWS Group

    ________________________
    Design your own training!

    You've done the courses and still need to go a little further, or still not clear? 
    Tell us what you need in our Community Solutions Hub

    emoji
Children