# SpreadJS에서 사용 가능한 CalcEngine 언어 패키지

## Content

SpreadJS는 CalcEngine 함수 이름, 테이블 함수 이름, 특수 함수 로직, `CalcError` 이름 및 불리언 값 리소스에 대해 전역화(Globalization) 및 지역화(Localization)를 지원하기 위해 18개 이상의 언어 팩(Language Package)을 제공합니다. 원하는 언어 팩을 사용하면 번역을 신경 쓰지 않고 선호하는 로컬 언어로 작업할 수 있습니다.
SpreadJS의 기본 언어 팩은 `"en"`(영어)입니다. 사용자가 다른 언어로 작업할 수 있도록 SpreadJS에서는 아래와 같은 언어 코드와 함께 다양한 언어 팩을 제공합니다:

|  |  |  |
| --- | --- | --- |
| 1\. China/중국어 \('zh'\) | 7\. French/프랑스어\('fr'\) | 13\. Dutch/네덜란드어 \('nl'\) |
| 2\. Japan/일본어 \('ja'\) | 8\. German/독일어 \('de'\) | 14\. Spanish/스페인어\('es'\) |
| 3\. korea/한국어 \('ko'\) | 9\. Portuguese/포르투갈어 \('pt'\) | 15\. Russian/러시아어 \('ru'\) |
| 4\. Swedish/스웨덴어 \('sv'\) | 10\. Italian/이탈리아어 \('it'\) | 16\. Danish/덴마크어 \('da'\) |
| 5\. Polish/폴란드어 \('pl'\) | 11\. Finnish/핀란드어\('fi'\) | 17\. Norwegian Bokmål/노르웨이어 \('no'\) |
| 6\. Czech/체코어 \('cs'\) | 12\. Hungarian/헝가리어\('hu'\) | 18\. Turkish/터키어 \('tr'\) |

사용자는 [LanguagePackages](/spreadjs/api/v18/modules/GC.Spread.CalcEngine.LanguagePackages) 클래스의 [languagePackages](/spreadjs/api/v18/modules/GC.Spread.CalcEngine.LanguagePackages#languagePackages) 메서드를 사용하여 언어를 전환할 수 있습니다.
사용자 지정 언어 팩을 만들고 사용하려는 경우에는 [사용자 지정 언어 패키지](/spreadjs/docs/v18/features/formulas/UsingLanguagePackage/CustomLanguagePackage) 항목을 참조하시기 바랍니다.

## 예제

1. 아래 이미지는 언어 팩별로 지역화된 함수 이름의 예를 보여줍니다.
<br>
    <br>
    ![](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/8d606653-16a0-474d-b9dc-e2b4d01c2446/images/animation-language-package.gif)
2. 아래 이미지는 언어 팩별로 지역화된 테이블 함수 이름의 예를 보여줍니다.
<br>
    ![](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/8d606653-16a0-474d-b9dc-e2b4d01c2446/images/table-gif.gif)
3. 아래 이미지는 언어 팩별 특수 함수 로직(LENB 함수 등)의 예를 보여줍니다.
<br>
    ![](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/8d606653-16a0-474d-b9dc-e2b4d01c2446/images/lenb.gif)
4. 아래 이미지는 언어 팩별 `CalcError` 이름의 예를 보여줍니다.
<br>
    ![](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/8d606653-16a0-474d-b9dc-e2b4d01c2446/images/calc-error.jpg)
5. 아래 이미지는 언어 팩별 불리언 값 리소스의 예를 보여줍니다.
<br>
    ![](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/8d606653-16a0-474d-b9dc-e2b4d01c2446/images/boolean.gif)

>type=warning
> **참고**: SpreadJS에서 언어 팩을 사용할 때 다음 사항에 유의하세요
>
> * 언어 팩을 변경하면 사용자는 기본 언어(예: 영어) 또는 새 언어 중 어떤 언어로도 함수 이름을 입력할 수 있습니다. 하지만 결과적으로 화면에는 새 언어로 함수 이름이 표시됩니다.
>     예: 영어에서 프랑스어 언어 팩으로 전환한 경우 `"SUM()"` 또는 `"SOMME()"` 둘 다 입력 가능하지만, 결과는 항상 `"SOMME()"`로 표시됩니다.
> * 중국어, 일본어, 한국어(CJK) 언어 팩을 사용하는 경우 일부 함수는 계산 로직이 달라질 수 있습니다.
>     이는 Excel에서 유니코드 문자열 등 로케일에 따라 동작이 달라지는 함수에서 발생하는 표준 동작입니다.
>     예: `LENB` 함수는 DBCS 언어(CJK)에서는 바이트 단위로 길이를 반환하지만, 그 외 언어에서는 `LEN` 함수처럼 동작합니다.
>     해당 함수에는 `FINDB`, `LEFTB`, `RIGHTB`, `MIDB`, `LENB`, `REPLACEB`, `SEARCHB` 등이 포함됩니다.
>     → 이는 Excel의 공식 문서에 명시된 동작입니다.
> * Import/Export – Excel 및 SpreadJS는 내부적으로 수식을 영어 이름으로 저장합니다.
>     언어 팩이 존재하고 사용자의 로캘에 따라 언어가 지정된 경우, 언어별 함수 이름은 자동으로 표시됩니다.
>     → Excel과 동일한 동작입니다.
> * 수식 언어를 변경한 후에는 `spread.calculate()`를 호출해야 합니다.
>     → 내부 수식 테이블과 파서가 새 함수 이름으로 업데이트됩니다.

다음은 언어 팩을 다른 언어로 전환하는 코드 샘플입니다:

```html
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
<link href="css/gc.spread.sheets.excel2013white.x.x.x.css" rel="stylesheet" />
<script src="scripts/gc.spread.sheets.all.x.x.x.min.js"></script>
<script src="scripts/gc.spread.sheets.print.x.x.x.min.js"></script>
<script src="scripts/gc.spread.calcengine.languagepackages.x.x.x.min.js"></script> 
<script>
  $(document).ready(function ()
  {
    // Spread 초기화
      var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });
      spread.suspendPaint();

      // 활성 시트 가져오기
    activeSheet = spread.getSheet(0);
    activeSheet.setColumnWidth(1, 130);
    activeSheet.setColumnWidth(2, 70);
    activeSheet.setColumnWidth(3, 70);
    activeSheet.setColumnWidth(4, 70);
    activeSheet.setColumnWidth(5, 100);
    var source =
    [
      { Course: "Calculus", Term: 1, Credit: 5, Score: 80, Teacher: "Nancy.Feehafer" },
      { Course: "P.E.", Term: 1, Credit: 3.5, Score: 85, Teacher: "Andrew.Cencini" },
      { Course: "Political Economics", Term: 1, Credit: 3.5, Score: 95, Teacher: "Jan.Kotas" },
      { Course: "Basic of Computer", Term: 1, Credit: 2, Score: 85, Teacher: "Steven.Thorpe" },
      { Course: "Micro-Economics", Term: 1, Credit: 4, Score: 62, Teacher: "Jan.Kotas" },
      { Course: "Linear Algebra", Term: 2, Credit: 5, Score: 73, Teacher: "Nancy.Feehafer" },
      { Course: "Accounting", Term: 2, Credit: 3.5, Score: 86, Teacher: "Nancy.Feehafer" },
      { Course: "Statistics", Term: 2, Credit: 5, Score: 85, Teacher: "Robert.Zare" },
      { Course: "Marketing", Term: 2, Credit: 4, Score: 70, Teacher: "Laura.Giussani" }
    ];

    var table = activeSheet.tables.addFromDataSource("Table1", 2, 1,  source,GC.Spread.Sheets.Tables.TableThemes.medium2);
    spread.resumePaint();
    var select = document.getElementById('languageSelect');
    select.onchange = function ()
    {
      var languageName = this.value;
      GC.Spread.CalcEngine.LanguagePackages.languagePackages(languageName);
      spread.calculate();
    }
  });
</script>
</head>
<body>
  <table style="width:100%">
    <tr>
      <td valign="top">
        <select id="languageSelect">
          <option value="zh">China</option>
          <option value="ja">Japan</option>
          <option value="ko">korea/Korean </option>
          <option value="fr">French</option>
          <option value="nl">Dutch</option>
          <option value="de">German</option>
          <option value="es">Spanish</option>
          <option value="pt">Portuguese</option>
          <option value="ru">Russian</option>
          <option value="sv">Swedish</option>
          <option value="it">Italian</option>
          <option value="da">Danish</option>
          <option value="pl">Polish</option>
          <option value="fi">Finnish</option>
          <option value="no">Norwegian</option>
          <option value="cs">Czech </option>
          <option value="hu">Hungarian</option>
          <option value="tr">Turkish</option>
        </select>
      </td>
      <td><div id="ss" style="height:360px;width:1000px; margin-left:1px"></div></td>
    </tr>
  </table>
</body>
</html> 
```