Angular-Translate를 사용하여 HTML을 포함하는 문자열을 처리하는 방법
HTML 콘텐츠를 포함하는 문자열을 처리하기 위해 angular와 angular-translate를 구분하는 방법이 있습니까?
있습니다add_card-title = "To make ordering even quicker, <span class="nowrap">add a card now</span>"
내 언어 문자열로.템플릿에 글을 써서 사용하는 경우<p>{{'add_card-title' | translate}}</p>
나는 있는 그대로의 끈을 얻는다.
출력: To make ordering even quicker, <span class="nowrap">add a card now</span>
예상되는 출력: To make ordering even quicker, add a card now
내가 쓸 수 있어ng-html-bind-unsafe
도움이 안 돼요
동작하지 않음:
<p ng-html-bind-unsafe="{{'add_card-title' | translate}}"></p>
그것을 달성할 수 있는 방법이 있나요?
여기 저의 plunker가 있습니다.http://plnkr.co/edit/nTmMFm9B94BmbTgo2h8H?p=preview
참고로, 다음의 문제를 참조할 수 있습니다.https://github.com/PascalPrecht/angular-translate/issues/173
주의: 컨트롤러가 그것을 다루도록 하고 싶지 않습니다.
요즘에는 Angle-Translate 2.0을 사용하면 바로 사용할 수 있습니다.
<p translate="{{ 'PASSED_AS_INTERPOLATION' }}"></p>
잘 먹히네요.
ng-bind-html 디렉티브는 물결 괄호({ }}) 없이 사용해야 합니다.
이 디렉티브(ngBindHtml)를 사용하기 위해서 필요한 설정을 확인하려면 , 다음의 링크를 참조해 주세요.https://docs.angularjs.org/api/ng/directive/ngBindHtml
ngSanitize를 포함하면 다음 코드가 작동합니다.
<p ng-bind-html="'add_card-title' | translate"></p>
난 이거면 되는데...HTML은 멋진 스타일링으로 해석됩니다(굵은 글씨, 이탤릭체 등).
<p translate="translationId"></p>
다만, 프로바이더 셋업에서 이스케이프 전략을 사용하고 있지 않은지도 확인할 필요가 있었습니다.그게 한동안 나를 혼란스럽게 했어.
- 동작:
$translateProvider.useSanitizeValueStrategy( 'sanitize' );
- 아니요:
$translateProvider.useSanitizeValueStrategy( 'escape' );
https://angular-translate.github.io/docs/ #/guide/19_security
용도: 각도 변환 v2.13.1
사용할 수 있습니다.<p [innerHTML]="'add_card-title' | translate"></p>
해결책을 찾았습니다.사용하고 있었습니다.AngularJS v1.2.0-rc.3
가 있는ng-html-bind-unsafe
권장되지 않습니다.이제 angular는ng-bind-html
대신ng-html-bind-unsafe
하지만 각성제를 주입해야 효과를 볼 수 있다.
교체했습니다.
<p ng-html-bind-unsafe="{{'add_card-title' | translate}}"></p>
와 함께
<p ng-bind-html="'{{'add_card-title' | translate}}'"></p>
일이 잘 풀리기 시작했어요
디폴트로는 각도안전상의 이유로 JS 이스케이프 및 코드 표시. AngularJS 1.2 개발자가 이를 수행하기 전에 탈출하고 싶지 않은 문자열의 각도를 말해야 합니다.ng-bind-html-unsafe
단, AngularJS 1.2에서는 사용되지 않습니다.
문자열에서 html 태그를 사용하려면 AngularJS 1.2+에서 다운로드해야 합니다.angular-sanitize
를 사용하여 어플리케이션 의존관계에 포함시킵니다.
임의의 문자열에는 html 코드가 포함되어 있습니다.이를 사용하여 표시할 수 있습니다.ng-bind-html
$sanitize를 자동으로 사용합니다.이 경우,ng-bind-html="'add_card-title' | translate"
참조용:
다음은 html을 혼재시키는 많은 방법(스코프 변수와 함께 html 번역에서 ng-click과 같은 것이 필요한 경우의 해석)입니다.
http://plnkr.co/edit/OnR9oA?p=preview
<div>{{'TESTING1_SIMPLE_VAR_REPLACE' | translate: '{name: "John Smith", username: "john.smith12"}'}}</div>
<div translate='TESTING1_SIMPLE_VAR_REPLACE' translate-values='{ name: "Jake Smith", username: "jake-smith-101" }'></div>
<div translate="TESTING1_SIMPLE_VAR_REPLACE_NA" translate-value-name="{{name}}" translate-value-username="{{username}}" translate-default="Hello {{name}} ({{username}})"></div>
<br/><br/>
<div>{{'TESTING1_SIMPLEHTML' | translate}}</div><!-- doesn't compile the html -->
<div translate="TESTING1_SIMPLEHTML" translate-default='DEFAULT(not used since there is a translation): This <b>translation</b> has a <a href="http://google.com" target="_blank">link</a>.'></div><!-- this and below compile the html -->
<div translate="TESTING1_SIMPLEHTML_NA" translate-default="DEFAULT(used since translation not available): This <b>translation</b> has a <a href='http://google.com' target='_blank'>link</a>."></div>
Uses ng-bind-html and sanitize: <div ng-bind-html="'TESTING1_SIMPLEHTML' | translate"></div>
<br/><br/>
<div translate="TESTING2_SCOPE" translate-values="{timer: timer}" translate-default="DEFAULT(not used since there is a translation): Seconds: <a href='http://google.com' target='_blank'>{{timer}} seconds</a>."></div>
<div translate="TESTING2_SCOPE" translate-value-timer="{{timer}}"></div>
<div translate="TESTING2_SCOPE_NA" translate-default="DEFAULT(used since translation not available): Seconds: <a href='http://google.com' target='_blank'>{{timer}} seconds</a>."></div>
<br/><br/>
<div compile-unsafe="'TESTING3_COMPILE' | translate"></div><!-- old way to do before angular 2.0-->
<div translate="TESTING3_COMPILE" translate-compile></div>
<div translate="{{'TESTING3_COMPILE_SCOPE'}}" translate-compile translate-value-name="{{name}}" translate-value-username="{{username}}" ></div> <!-- not sure of advantage of this style, but saw an example of it -->
<div translate="TESTING3_COMPILE_SCOPE" translate-compile translate-value-name="{{name}}" translate-value-username="{{username}}" ></div>
<div translate="TESTING3_COMPILE_SCOPE" translate-compile translate-values='{ name: "Jake Smith", username: "jake-smith-101" }' ></div>
"lng_pageFooter" : "Copyright © • 2018 • My Company • Powered by <a href=\"http://www.mycompany.com\">My Company™</a>"
...
$translateProvider.useSanitizeValueStrategy('escape');
....
app.filter('trusted', ['$sce', function($sce) {
var div = document.createElement('div');
return function(text) {
div.innerHTML = text;
return $sce.trustAsHtml(div.textContent);
};
}])
....
<span ng-bind-html="'lng_pageFooter' | translate | trusted"></span>
두 가지 답변을 모두 시도했지만 모두 1.0.7에서 작동하지 않았습니다. 1.2 이전 버전을 사용하는 모든 사용자에게는 다음과 같이 할 수 있습니다.
<p ng-html-bind-unsafe="'add_card_title' | translate"></p>
innerHtml을 사용하면 . ★<p [innerHtml]="'lorem.ipsum' | translate"></p>
언급URL : https://stackoverflow.com/questions/19754381/how-to-handle-strings-containing-html-using-angular-translate
'bestsource' 카테고리의 다른 글
제목 직후에 커스텀 투고 유형 편집 화면에 버튼/링크 추가 (0) | 2023.03.10 |
---|---|
여러 시스템의 일원화된 사용자 관리 시스템을 위한 최적의 솔루션 (0) | 2023.03.10 |
Redux TypeError: 정의되지 않은 속성 '적용'을 읽을 수 없습니다. (0) | 2023.03.10 |
JSON 객체와 JavaScript 객체의 차이점은 무엇입니까? (0) | 2023.03.10 |
intellij - 스프링이 인식되지 않음(매핑되지 않은 스프링 구성) (0) | 2023.03.10 |