Laravel and StartUp
Github
  • README
  • 개발
    • 라라벨 생태계
      • 라라벨 .env 내용을 Github Action test에 적용하기
      • 라라벨 발렛(Laravel Valet)에서 Node 실행하기
      • 라라벨 노바 훑어보기
      • 라라벨 노바의 Envoyer 배포의 실전
      • Envoyer에서 무중단 배포를 구현하는 방법
      • 라라벨이 애용하는 ::class 톺아보기
      • 라라벨에서의 버전의 의미
      • 라라벨 개발자를 위한 .aliases 파일
      • 라라벨 프로젝트를 만드는 두가지 방법 비교
    • 개발 팁
      • MySQL 9로 업데이트할 때 로그인 이슈
      • svn 저장소를 git으로 이전하기
      • CakePHP2를 PHP 8에서 쉽게 사용하기
      • 베스트 깃(Git) 커맨드
      • 퍼미션 에러없이 PHP를 구동하기 위한 서버 세팅법
      • PHP 스크립트를 php 명령어 없이 사용하는 법
      • 국제화의 필수 익스텐션, NumberFormatter
      • 라라벨에서 뷰헬퍼를 만들어 봅시다
    • 스타트업 팁
      • PHP 코딩 가이드라인
      • 배포 가이드라인
      • 기술 스택(Tech Stacks)
      • 기술 소양
      • 최신 IT 컴퍼니 트랜드
    • Knowledge Acquisition
      • Error 혹은 Warning
      • NumberFormatter class example
      • Exception + Error = Throwable Tree in PHP 7 over
      • Coding Style Preset
      • Programming Case Types
  • 협업과 비즈니스
    • 협업
      • 이메일 협업
    • 비즈니스
      • 서비스x스토어
      • 발주입고 프로세스
      • 재고월마감 프로세스
      • 재고조정 프로세스
Powered by GitBook
On this page
  • Cashier 공식 문서에서의 제약
  • NumberFormatter란 무엇인가
  • 숫자를 통화로 표시하기
  • 마치며

Was this helpful?

Edit on GitHub
  1. 개발
  2. 개발 팁

국제화의 필수 익스텐션, NumberFormatter

PreviousPHP 스크립트를 php 명령어 없이 사용하는 법Next라라벨에서 뷰헬퍼를 만들어 봅시다

Last updated 1 year ago

Was this helpful?

라라벨의 에코시스템 중에서 Cashier를 사용하시는 분은 많지 않을 것 같습니다. 그 이유는 Cashier는 라라벨 에코시스템 중 유일하게 사용 업체가 지정되어야 하기 때문입니다.

현재 라라벨 공식 홈페이지에서는 Stripe와 Mollie 두 업체를 공식적으로 지원하고 있습니다.

한국에서는 아임포트에서 라라벨 SDK를 비공식적으로 지원하고 있으나, 아쉽게도 구현 방법은 Chshier 규격을 따르지는 않습니다.

한국판 Cashier 제작을 위한 기본 지식으로 우리는 NumberFormatter에 대해서 알아야 합니다.

Cashier 공식 문서에서의 제약

... Internally, Cashier utilizes PHP's NumberFormatter class to set the currency locale:

그리고,

{tip} In order to use locales other than en, ensure the ext-intl PHP extension is installed and configured on your server.

NumberFormatter란 무엇인가

NumberFormatter는 PHP에만 있는 것은 아니고, 정규표현식처럼 많은 언어에서 지원합니다.

Language or Framework
Class or Object

PHP

NumberFormatter Class

Apple Foundation Framework

NSNumberFormatter Class

Java

NumberFormatter Class

Spring Framework

NumberFormatter Class

Python

locale.format

Javascript

Intl.NumberFormat

NumberFormatter는 숫자를 표현하는 방식에 로케일과 통화를 합친 클래스라고 볼 수 있습니다.

숫자를 통화로 표시하기

NumberFormatter를 사용하지 않을 경우 이런 코드를 작성하게 됩니다.

<?php

$currency = '₩' . number_format(10000);

// $currency = ₩10,000

이 코드를 이렇게 쓸 수 있습니다.

<?php

$currency =  (new NumberFormatter('ko_KR', NumberFormatter::CURRENCY))
    ->format(10000);

// $currency = ₩10,000

어, NumberFormatter가 더 복잡해 보이는군요. 그러면 이 코드는 어떨까요?

<?php

echo number2hangul(12345);

// http://www.nuno21.net/bbs/board.php?bo_table=php&wr_id=2419
function number2hangul($number) {
    $num = array('', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구');
    $unit4 = array('', '만', '억', '조', '경');
    $unit1 = array('', '십', '백', '천');

    $res = array();

    $number = str_replace(',','',$number);
    $split4 = str_split(strrev((string)$number),4);

    for($i=0;$i<count($split4);$i++){
            $temp = array();
            $split1 = str_split((string)$split4[$i], 1);
            for($j=0;$j<count($split1);$j++){
                    $u = (int)$split1[$j];
                    if($u > 0) $temp[] = $num[$u].$unit1[$j];
            }
            if(count($temp) > 0) $res[] = implode('', array_reverse($temp)).$unit4[$i];
    }
    return implode('', array_reverse($res));
}

// output
// 일만이천삼백사십오

이 코드를 이렇게 쓸 수 있습니다.

<?php

echo (new NumberFormatter('ko_KR', NumberFormatter::SPELLOUT))
    ->format(12345);

// output
// 만 이천삼백사십오

코드의 간결성은 둘째치고, 전세계 모든 언어(Language)를 동일한 인터페이스로 코딩한다는 것이 큰 장점이 됩니다.

마치며

라라벨의 에코시스템을 한국에서도 모두 쓸 수 있도록 노력하고 있으며, 그 과정에 나오는 이슈를 가끔은 이런 식으로 공유하겠습니다. :)

NumberFormatter로 나오는 모든 출력물은 아래의 주소에서 확인할 수 있습니다.

오늘도 좋은 라라벨 생활 되시기 바랍니다.

을 보면 아래와 같은 문구가 있습니다.

en 이외의 로케일을 지원하기 위해서 ext-intl을 설치해야 한다고 합니다. 는 에 포함되어 있기 때문입니다.

ext-intl은 PHP 5.3.0부터 기본 탑재되어 있지만, PECL 버전도 있습니다. 내부적으로는 를 사용하고 있는데요, 사실 이 부분은 PHP에서 지금까지 정비가 되지 않고 있다가 PHP 7.4로 넘어오면서 정리가 되는 느낌입니다.

Cashier 매뉴얼의 설정
NumberFormatter class
ext-intl 익스텐션
ICU
NumberFormatter 예재
라라벨 Cashier 로고