Aws::Translate::Client - translate_text Returns Random Do-Not-Translate IDs or Skips Translations Depending on < and > Character Usage
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
Research direction
No repository file or test is identified. Re-run the two Ruby reproductions with aws-sdk-translate 1.79.0 and compare the client request and AWS Translate response to establish whether the defect is in the service or client; done means ownership is confirmed and the DNT IDs and skipped text behavior are resolved or documented.
Written by the indexing model from the issue text.
Description
Describe the bug
Sorry if this is the wrong place to report this since this is an issue with the API and not the Ruby client, but I noticed this when testing out the do-not-translate syntax and I have examples in Ruby to illustrate the problems. There are 2 issues which are probably related.
A. Internal IDs Are Returned
# Good. Skips translating the text.
Aws::Translate::Client.new.translate_text(text: '<span translate="no">Skip me</span>', source_language_code: 'en', target_language_code: 'fr').translated_text
=> "<span translate=\"no\">Skip me</span>"
# Good. Extra ">" on the right side doesn't cause problems.
Aws::Translate::Client.new.translate_text(text: '<span translate="no">Skip me</span>>', source_language_code: 'en', target_language_code: 'fr').translated_text
=> "<span translate=\"no\">Skip me</span> >"
# Bad. Extra "<" on the left side returns gibberish.
Aws::Translate::Client.new.translate_text(text: '<<span translate="no">Skip me</span>', source_language_code: 'en', target_language_code: 'fr').translated_text
=> "<DNT_GEBKJMMFHEHCKOAJBKHKJHCAkDHDNDDD"
This appears to be returning a unique random ID for some kind of "Do-Not-Translate" element because the response always starts with "DNT_" or "dnt_", followed by 32 random characters.
This isn't a huge issue because the example is contrived and the input isn't valid HTML, but there may be a problem somewhere down in the do-not-translate parsing which reveals internal values.
B. Text Between Greater Than and Less Than Characters Can Remain Untranslated
Probably as a result of how the do-not-translate parsing works, there's also a different issue where text between < and > characters sometimes isn't translated depending on other punctuation involved. I'm not sure how to avoid this because even when using < and > to escape the characters some text may remain untranslated.
# Good. Translates everything when there's a "." between the "<" and ">"
text = "If expenses < revenue then we have a profit. But if expenses > revenue then we have a loss."
Aws::Translate::Client.new.translate_text(text: text, source_language_code: 'en', target_language_code: 'fr').translated_text
=> "Si les dépenses sont inférieures aux recettes, nous avons un bénéfice. Mais si dépenses > recettes, nous avons une perte."
# Bad. Skips Translating text between "<" and ">".
text = "If expenses < revenue then we have a profit, but if expenses > revenue then we have a loss."
Aws::Translate::Client.new.translate_text(text: text, source_language_code: 'en', target_language_code: 'fr').translated_text
=> "Si les dépenses sont < revenue then we have a profit, but if expenses > des recettes, nous avons une perte."
# Bad. Skips Translating text between "<" and ">".
text = "If expenses < revenue then we have a profit, but if expenses > revenue then we have a loss."
Aws::Translate::Client.new.translate_text(text: text, source_language_code: 'en', target_language_code: 'fr').translated_text
=> "Si les dépenses sont < revenue then we have a profit, but if expenses > des recettes, nous avons une perte."
Regression Issue
- Select this option if this issue appears to be a regression.
Expected Behavior
A. Do not return DNT ID values when there are extra < or > characters in the text.
B. Do not skip translating text between < and > characters.
Current Behavior
A. Returns "<DNT_..." value which wipes out some of the input text.
B. Skips translating text between < and > characters.
Reproduction Steps
# Returns internal DNT ID
Aws::Translate::Client.new.translate_text(text: '<<span translate="no">Skip me</span>', source_language_code: 'en', target_language_code: 'fr').translated_text
=> "<DNT_GEBKJMMFHEHCKOAJBKHKJHCAkDHDNDDD"
# Doesn't translate text between "<" and ">" characters
text = "If expenses < revenue then we have a profit, but if expenses > revenue then we have a loss."
Aws::Translate::Client.new.translate_text(text: text, source_language_code: 'en', target_language_code: 'fr').translated_text
=> "Si les dépenses sont < revenue then we have a profit, but if expenses > des recettes, nous avons une perte."
Possible Solution
No response
Additional Information/Context
No response
Gem name ('aws-sdk', 'aws-sdk-resources' or service gems like 'aws-sdk-s3') and its version
aws-sdk-translate (1.79.0)
Environment details (Version of Ruby, OS environment)
Ruby 3.2.6, macOS Sonoma 14.7.3
- Dominant language
- Ruby
- Stars
- 3.7k
- Forks
- 1.2k
- Avg merge
- 1d 16h
- Merged PRs (30d)
- 25
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from aws/aws-sdk-ruby
-
service-api
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
aws/aws-sdk-ruby#3395 · 1 comment ·
Maintainers usually reply within 1 day
-
BedrockAgentCore: invoke_agent_runtime buffers entire response instead of streaming in real-timeOpendocumentation p3 queued
Difficulty 4/5 3-5 days Newbie friendliness 48/100
aws/aws-sdk-ruby#3348 · 6 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
feature-request needs-major-version
Difficulty 3/5 1-2 days Newbie friendliness 48/100
aws/aws-sdk-ruby#3241 · 5 comments ·
Maintainers usually reply within 1 day
-
investigating service-api
Difficulty 4/5 3-5 days Newbie friendliness 35/100
aws/aws-sdk-ruby#3217 · 4 comments ·
Maintainers usually reply within 1 day
-
feature-request
Difficulty 3/5 1-2 days Newbie friendliness 35/100
aws/aws-sdk-ruby#3190 · 3 comments ·
Maintainers usually reply within 1 day
All issues in aws/aws-sdk-ruby
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
zerocracy/judges-action#2849 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 82/100
TarteelAI/quranic-universal-library#916 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
rubocop/rubocop-capybara#276 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
Maintainers usually reply within 1 day