2013-06-20 1 views
1

웹 API 위에 SPA 응용 프로그램 구축 실험 문제가 발생했습니다. 내 프로젝트에서 Resource.resx 파일을 사용하여 표시된 정보를 현지화합니다. .cshtml 형식으로보기를 만들 때 이것은 문제가되지 않지만 .ktml 형식의 템플릿을 사용하면 .html이고 더 이상 Resource.resx에 직접 액세스 할 수 없으므로 문제가 발생합니다.Knockoutjs 템플릿 파일 및 지역화 된 resx 파일

웹 API에서 모델과 함께 현지화 된 문자열을 보내고, .cshtml 파일에서 javascript 변수를 만들고 .html에서 액세스하고 (자바 스크립트 현지화 파일을 만들거나 상수를 포함하거나 .resx에서 값을 가져옵니다).

누구나이 문제를 해결하는 방법에 대한 좋은 아이디어가 있습니까?

편집 : 내가 생각할 수있는 좋아, 두 개의 가장 실행 가능한 솔루션이처럼 .cshtml 파일에서 지역화 된 문자열을 인쇄하는 것입니다 :

@functions{ 
    public string LocalizedString() 
    { 
     return Resource.MyLocalizedString; 
    } 
} 
<input id="LocalizedString" type="hidden" value="@LocalizedString()" /> 

을 다음 jQuery를 사용하여 값을 얻고 입력의 ID

$("#LocalizedString").val() 

그래서 localized.js 파일을 채울 수 있으므로 응용 프로그램을 참조 할 수 있습니다.

다른 옵션은 응용 프로그램에 필요한 문자열의 json 목록을 제공하는 wep api 서비스를 만드는 것입니다.

public HttpResponseMessage Get() 
    { 
     var localString = new Dictionary<string, string> { 
      {"FullName", Resource.ACC_FullName}, 
      {"LastName", Resource.ACC_LastName}, 
      {"FirstName", Resource.ACC_FirstName} 
     }; 
     return Request.CreateResponse(HttpStatusCode.OK, localString); 
    } 

마녀 이것은 그때는 inital 질문 녹아웃 관련이 알고 있으며,이 코드는 AngularJS와 인 로컬 스토리지 (에 저장 될 수있는이 JSON

{ 
fullName: "Fullt navn", 
lastName: "Etternavn", 
firstName: "Fornavn" 
} 

을 반환,하지만 난 당신이 그것을 할 수있어 마녀는 다음

를 사용하여 페이지에서 사용할 수 있습니다

gets(): void { 
      this.http({ method: 'GET', url: '/api/locals' }). 
       success(function (data, status, headers, config) { 
        angular.forEach(data, function (value, key) { 
         localStorage.setItem(key, value); 
        }); 
       }). 
       error(function (data, status, headers, config) { 
        this.$log.warn(data, status, headers, config); 
       }); 
     } 

녹아웃)와 유사한 문제에

localStorage.getItem('Key') 

편집 : AngularJS의 경우 $ http inbuilt 캐시를 사용할 수 있습니다. 매우 스마트합니다.

첫 번째 해결 방법은 아마 DOM에서 사용할 수있는 변수를 더 빠르게 만들 것이고 적어도 스크립트가 실행될 때 거기에있게 될 것입니다. 그러나 실제로 거기에 존재하지 않는 것들로 내 HTML을 어수선하게 만드는 아이디어는 마음에 들지 않습니다. . 다른 솔루션은 html을 정리하지만 API 호출을 통해 값을 가져와야하며 해당 호출이 반환 될 때까지는 값이 유용하지 않습니다. 마녀는 아마 끝날 때까지 거기 값에 의존하는 스크립트의 실행을 지연시켜야 할 필요가 있음을 의미합니다. 그러나 응답은 매우 커질 것 같지 않습니다. 우리는 아마도 내 사이트에 대해 50-100 개의 문자열을 말하고 있습니다.

이제는 이러한 솔루션을 직접 구현하지 않았으므로 어떤 것이 좋을지 모르겠습니다. 누군가 의견이나 아이디어를 얻었 으면 그 사람들의 말을 듣고 싶습니다.

답변

0

비슷한 문제가있었습니다. Knockout.js에 대한 경험이 없으므로 도움이되는지 잘 모르겠습니다.내 리소스 파일에 Test라는 문자열을하고 난 내 cshtml에서 다음 코드 줄을 사용하여 프론트 엔드에 보여 주었다 수 있어요 :

@Html.Raw(WmsWebMvcProto.Properties.Resources.Test) 
+0

가 네,이 솔루션 중 하나와 매우 유사하다 나는 .cshtml 파일에서 javascript 변수를 만들고 .html 템플릿 파일에 액세스하려고 시도했다. 그러나 별도의 .js 파일 대신 내 .cshtml 파일 안에 javascript를 넣었 기 때문에 그 솔루션을 좋아하지 않았습니다. 또한 .html 템플릿에서 .cshtml 파일로 만든 변수에 액세스하는 데 문제가있었습니다. –