Mark strings in javascript for translation.

Review Request #4453 — Created Aug. 13, 2013 and submitted

Information

Review Board
master

Reviewers

Mark strings in javascript for translation.

Django provides a nice, gettext-like API for localizing strings in javascript
files. Now that we've integrated the jsi18n view, we can mark these strings so
that people can translate them.

The only unfortunate thing about this is that there's no good way to wrap
strings and have them concatenate (like there is with python or C), so for
longer strings that we want to localize, they have to be all together on one
line.
- Extracted messages and saw that djangojs.po had all the expected strings.
- Added some fake italian and chinese versions of the "An issue was opened"
  string and saw that when my browser was set to prefer those languages, I saw
  the translated string.
- Ran js-tests.
Description From Last Updated

You can (or should be able to) do: <%- gettext('...') %> instead. Assuming xgettext sees that. Assuming we do need …

chipx86chipx86
reviewbot
  1. This is a review from Review Bot.
      Tool: PEP8 Style Checker
      Processed Files:
        reviewboard/settings.py
        reviewboard/urls.py
      Ignored Files:
        reviewboard/static/rb/js/views/draftReviewBannerView.js
        reviewboard/static/rb/js/resources/models/draftResourceModelMixin.js
        reviewboard/static/rb/js/views/reviewRequestEditorView.js
        .gitignore
        reviewboard/static/rb/js/views/issueSummaryTableView.js
        reviewboard/static/rb/js/models/reviewRequestEditorModel.js
        reviewboard/static/rb/js/views/commentDialogView.js
        reviewboard/static/rb/js/views/fileAttachmentThumbnailView.js
        reviewboard/static/rb/js/resources/models/diffModel.js
        reviewboard/static/rb/js/views/commentIssueBarView.js
        reviewboard/static/rb/js/views/dndUploaderView.js
        reviewboard/static/rb/js/views/reviewReplyDraftBannerView.js
        reviewboard/static/rb/js/views/reviewDialogView.js
        reviewboard/static/rb/js/newReviewRequest/views/repositorySelectionView.js
        reviewboard/static/rb/js/views/abstractCommentBlockView.js
        reviewboard/static/rb/js/newReviewRequest/views/newReviewRequestView.js
        reviewboard/static/rb/js/newReviewRequest/models/preCommitModel.js
        reviewboard/static/rb/js/newReviewRequest/views/postCommitView.js
        reviewboard/static/rb/js/utils/apiUtils.js
        reviewboard/static/rb/js/newReviewRequest/views/preCommitView.js
        reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
        reviewboard/static/rb/js/models/commentEditorModel.js
        reviewboard/static/rb/js/pages/views/reviewablePageView.js
        reviewboard/static/rb/js/repositoryform.js
        reviewboard/templates/base.html
        reviewboard/static/rb/js/common.js
    
    
  2. 
      
reviewbot
  1. This is a review from Review Bot.
      Tool: Pyflakes
      Processed Files:
        reviewboard/settings.py
        reviewboard/urls.py
      Ignored Files:
        reviewboard/static/rb/js/views/draftReviewBannerView.js
        reviewboard/static/rb/js/resources/models/draftResourceModelMixin.js
        reviewboard/static/rb/js/views/reviewRequestEditorView.js
        .gitignore
        reviewboard/static/rb/js/views/issueSummaryTableView.js
        reviewboard/static/rb/js/models/reviewRequestEditorModel.js
        reviewboard/static/rb/js/views/commentDialogView.js
        reviewboard/static/rb/js/views/fileAttachmentThumbnailView.js
        reviewboard/static/rb/js/resources/models/diffModel.js
        reviewboard/static/rb/js/views/commentIssueBarView.js
        reviewboard/static/rb/js/views/dndUploaderView.js
        reviewboard/static/rb/js/views/reviewReplyDraftBannerView.js
        reviewboard/static/rb/js/views/reviewDialogView.js
        reviewboard/static/rb/js/newReviewRequest/views/repositorySelectionView.js
        reviewboard/static/rb/js/views/abstractCommentBlockView.js
        reviewboard/static/rb/js/newReviewRequest/views/newReviewRequestView.js
        reviewboard/static/rb/js/newReviewRequest/models/preCommitModel.js
        reviewboard/static/rb/js/newReviewRequest/views/postCommitView.js
        reviewboard/static/rb/js/utils/apiUtils.js
        reviewboard/static/rb/js/newReviewRequest/views/preCommitView.js
        reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
        reviewboard/static/rb/js/models/commentEditorModel.js
        reviewboard/static/rb/js/pages/views/reviewablePageView.js
        reviewboard/static/rb/js/repositoryform.js
        reviewboard/templates/base.html
        reviewboard/static/rb/js/common.js
    
    
  2. 
      
chipx86
  1. Shame underscore uses _. I see that Mozilla seems to use __, but I don't know that we have that level of control, due to makemessages calling xgettext on our behalf.
    
    Also a shame that gettext doesn't know about string concatenation here. Hm. Looks like there's a patch out there for factoring in + for Python from April of this year, but no idea if it made it in, or if we'll ever get to use it for JavaScript. Oh well.
  2. Show all issues
    You can (or should be able to) do: <%- gettext('...') %> instead. Assuming xgettext sees that.
    
    Assuming we do need to escape content (I don't know what gettext for JavaScript is guaranteed to return HTML-safe content or not), the <%- will escape for us. Otherwise, <%=
    
    Same with all other sites.
    1. xgettext doesn't see it. I guess I'll pass everything in when we execute the template.
    2. Another option is to do:
      
      "... <%- '", xgettext(...), "' %> ..."
      
      except quotes inside the strings, if any, would be an issue.
  3. 
      
david
reviewbot
  1. This is a review from Review Bot.
      Tool: PEP8 Style Checker
      Processed Files:
      Ignored Files:
        reviewboard/static/rb/js/views/draftReviewBannerView.js
        reviewboard/static/rb/js/resources/models/draftResourceModelMixin.js
        reviewboard/static/rb/js/views/reviewRequestEditorView.js
        reviewboard/static/rb/js/views/issueSummaryTableView.js
        reviewboard/static/rb/js/models/reviewRequestEditorModel.js
        reviewboard/static/rb/js/views/commentDialogView.js
        reviewboard/static/rb/js/views/fileAttachmentThumbnailView.js
        reviewboard/static/rb/js/resources/models/diffModel.js
        reviewboard/static/rb/js/views/commentIssueBarView.js
        reviewboard/static/rb/js/views/dndUploaderView.js
        reviewboard/static/rb/js/views/reviewReplyDraftBannerView.js
        reviewboard/static/rb/js/views/reviewDialogView.js
        reviewboard/static/rb/js/newReviewRequest/views/repositorySelectionView.js
        reviewboard/static/rb/js/views/abstractCommentBlockView.js
        reviewboard/static/rb/js/newReviewRequest/views/newReviewRequestView.js
        reviewboard/static/rb/js/newReviewRequest/models/preCommitModel.js
        reviewboard/static/rb/js/newReviewRequest/views/postCommitView.js
        reviewboard/static/rb/js/views/tests/fileAttachmentThumbnailViewTests.js
        reviewboard/static/rb/js/utils/apiUtils.js
        reviewboard/static/rb/js/newReviewRequest/views/preCommitView.js
        reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
        reviewboard/static/rb/js/models/commentEditorModel.js
        reviewboard/static/rb/js/pages/views/reviewablePageView.js
        reviewboard/static/rb/js/repositoryform.js
        reviewboard/static/rb/js/common.js
        reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
    
    
  2. 
      
reviewbot
  1. This is a review from Review Bot.
      Tool: Pyflakes
      Processed Files:
      Ignored Files:
        reviewboard/static/rb/js/views/draftReviewBannerView.js
        reviewboard/static/rb/js/resources/models/draftResourceModelMixin.js
        reviewboard/static/rb/js/views/reviewRequestEditorView.js
        reviewboard/static/rb/js/views/issueSummaryTableView.js
        reviewboard/static/rb/js/models/reviewRequestEditorModel.js
        reviewboard/static/rb/js/views/commentDialogView.js
        reviewboard/static/rb/js/views/fileAttachmentThumbnailView.js
        reviewboard/static/rb/js/resources/models/diffModel.js
        reviewboard/static/rb/js/views/commentIssueBarView.js
        reviewboard/static/rb/js/views/dndUploaderView.js
        reviewboard/static/rb/js/views/reviewReplyDraftBannerView.js
        reviewboard/static/rb/js/views/reviewDialogView.js
        reviewboard/static/rb/js/newReviewRequest/views/repositorySelectionView.js
        reviewboard/static/rb/js/views/abstractCommentBlockView.js
        reviewboard/static/rb/js/newReviewRequest/views/newReviewRequestView.js
        reviewboard/static/rb/js/newReviewRequest/models/preCommitModel.js
        reviewboard/static/rb/js/newReviewRequest/views/postCommitView.js
        reviewboard/static/rb/js/views/tests/fileAttachmentThumbnailViewTests.js
        reviewboard/static/rb/js/utils/apiUtils.js
        reviewboard/static/rb/js/newReviewRequest/views/preCommitView.js
        reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
        reviewboard/static/rb/js/models/commentEditorModel.js
        reviewboard/static/rb/js/pages/views/reviewablePageView.js
        reviewboard/static/rb/js/repositoryform.js
        reviewboard/static/rb/js/common.js
        reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
    
    
  2. 
      
chipx86
  1. Looks fine. Just make sure it passes jshint.
    
    jshint might be mad about the line lengths, though.
    1. jshint doesn't seem to care about line length. Everything runs clean.
  2. 
      
david
Review request changed
Status:
Completed
Change Summary:
Pushed to master (c726088).