This is an issue observed specific to TranslatePlus module of Sitecore, which you might be using as a Language Translation Service for your Sitecore implementation.
While performing a bulk operation of Sending items to TranslatePlus through the TranslatePlus Admin page, you may encounter an issue where the “Items to send to translation” queue still remain in the “Sending” state, as shown below:
Note: The Name, Path, Source language and Target language have been removed from this screenshot
The possible cause for this issue could vary from an older module version to configuration issues or environment issues. In the event of such an issue, here is a possible workaround that you can adopt as a short term option until you have debugged the issue and identified the root cause.
Workaround (Short-Term):
- Navigate to the Translate Plus Translation Queue through the Content Editor: /Sitecore/System/Modules/TranslatePlus/Queues/Translation Queue
- For all the items which are currently held up in the Sending state, uncheck the “Async Translation” checkbox field.
If there are 100s of items, I would recommend using a PowerShell script (requires the PowerShell Extensions) or a Console App connecting to Sitecore Services to perform this operation. Here is a sample PowerShell script if you are looking for one:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
New-UsingBlock (New-Object Sitecore.Data.BulkUpdateContext) { foreach($item in Get-ChildItem –Path master:"\system\Modules\TranslatePlus\Queues\Translation Queue") { $item.Editing.BeginEdit() $item["Async translation"] = "0" $item.Editing.EndEdit() | Out-Null } } Get-ChildItem will pick up only the immediate child items. If you wish to get more specific, you can look up items of “QueueItem” template name
- Navigate to the Admin Page once again and you will see the held up items will now be out of their “Sending” state and will have the checkboxes right next to them:
http://{Fully Qualified Domain Name}/sitecore modules/shell/Translate Plus Module/AdminPage.aspx
- You can proceed to select these items and click on “Send to Translation” button.
- Please ensure that you perform this operation when the server is not peaking as these are backchannel web service calls to Translate Plus service which could get terminated/blocked under such instances. As a safe practice, I normally send out items in batches of 25-30 and seems to have worked well for me.
Once again, this is not a fix for the issue, but a temporary workaround.
You will be able to buy enough time to investigate your Event Viewer, IIS logs, Sitecore & Translate Plus logs, Server Configurations (ex. <httpRuntime/> maxRequestLength) and environment issues (app pool recycles, deployments, jobs, scheduled tasks etc.) that could have potentially blocked the items being held up in the queue.
Hope this was helpful!
Bonus Tips:
Here is a javascript snippet that you can use to select fixed number of checkboxes in the TranslatePlus Admin page.
- Navigate to the following Translate Plus Admin page on Chrome/Firefox
- On the developer toolbar –> Console, execute the following javascript:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var fileref = document.createElement('script'); var filepath = "//code.jquery.com/jquery-3.2.1.min.js"; // Checking the top 25 checkboxes fileref.onload = function(){jQuery(".QueueTable.sortable tr td input[type='checkbox']:lt(25)").attr("checked","checked")}; fileref.setAttribute("type","text/javascript"); fileref.setAttribute("src", filepath); // Insert the above script in the <head> tag document.getElementsByTagName("head")[0].appendChild(fileref); - To execute the “Send to Translation” button click, use the following script:
__doPostBack(‘btnSendTranslations’,”)