사용자:Hibm98/모듈/Convert

유용한 도구들
모듈:Convert text
환산 데이터 makeunits data

해야할 일들 편집

각종 설명문서 번역 편집

각종 메시지/주석 번역 편집

코드 현지화 편집

  • omit_scale_sep가 upstream에 반영될 수 있도록 문서화 및 테스팅 도구 제작
  • '통화 매 단위'에서 '원'도 지원하도록 수정
    • 원 기호를 넣으면 더 좋았겠지만 역슬래쉬로 나와서 안타깝다. :'-\
  • 통화가 들어간 매 단위에 한해 단위 표시를 '단위 당 통화'로 수정
    • '$120 매 에이커' vs '에이커 당 $120' / '₩1,200 매 리터' vs '리터 당 ₩1,200'
      {{단위 변환|120|$/에이커}}
      현재 구현 → $120 매 에이커 ($300/ha)
    • 통화 단위에서 후자를 쓰는 경우는 많이 봤지만(단위와 당 사이 띄어쓰기 유무는 논외) 전자를 쓰는 경우는 정말 한번도 못 봤던 것 같다.
    • ...해서 통화 매 단위에 한해 후자 방식으로 출력하게 하려고 생각해봤다.
      예상 구현 → 에이커 당 $120 ($300/ha)
    • local function make_per(unit_table, ulookup) - 매 단위를 테이블로 만드는 부분
      여기에서 통화 기호이면 단위 테이블에 reverse_output를 참으로 설정하고
    • local function lookup(parms, unitcode, what, utable, fails, depth) - 단위를 테이블로 만드는 부분
      if top and not unitcode:find('e%d') then -- If valid, create an automatic per unit for an "x/y" unit code. 미처 처리되지 못한 x/y를 처리하는 부분
    • local function make_id(parms, unit_table, key_id, want_link, clean) - 단위 기호를 단위 명칭이나 기호로 바꿔주는 부분
    • local function decorate_value(parms, unit_table, which, number_word) - 값을 꾸며주는 부분
    • local function process_one_output(parms, out_current) - 최종 출력 부분
      			if add_unit then
      				show = show .. out_current.sep .. (i == 0 and id1 or make_id(parms, i+1, out_current))
      			end
      
      여기에서 abbr = true이 아니면서 단위 테이블의 reverse_output가 참이면 값과 단위의 출력 순서를 뒤집어주면...?
      • 값:'$120', 단위:'에이커 당' → '$120 에이커 당' (X) / '에이커 당 $120' (O)
      • 값:'₩1,200', 단위:'리터 당' → '₩1,200 리터 당' (X) / '리터 당 ₩1,200' (O)
    • 흠... 이렇게 한다면 local currency_per_word = '당'도 필요해지는 걸까...
    • 그럼 make_per에서
      • 통화외 매 단위를 만들 때는 reverse_output이 nil 내지 false으로 설정되어 있으니까 기존 방식인 단위명칭 = per_word .. 분리자 .. 단위2명칭으로
      • 통화 매 단위를 만들 때는 reverse_output이 true로 설정되어 있으니까 abbr = true가 아닌 상태서 단위명칭 = 단위2명칭 .. 분리자 .. currency_per_word으로 설정해야 되는걸까
  • multiplier가 주어지면 표시되는 값도 그만큼 곱해주고, 단위명에서 숫자 제거해야 함
    • {{사용자:Hibm98/실험장/틀3|2|1000sqft}}를 예로 들었을 때...
      '2 1000 제곱피트 (190 m2)' (X)
      '2,000 제곱피트 (190 m2)' (O)
    • 근데 이거 정말 버그일까? 의도한 동작일까? 흠...
  • 만 단위로 끊은 숫자 크기 표기법인 e4, e8등의 지원
  • 온도를 표시할 때 "섭씨 10 도" / "화씨 32 도" / "란씨 200 도" / "열씨 123 도" 이런 식으로 나오게 해야 함

환산표 현지화 편집

단위(유닛) 테스트 편집

  •   유닛 테스트 구현
    • 어떤 것을 중점으로 두고 어떤 것을 테스트해야 하는가?
      • 영어판 문서 중 Template:Convert를 사용한 문서에서 몇몇 단위를 가져와 적당하게 한국어로 수정후 테스트 케이스로 넣기
      • 한국어판 문서 중 단위를 사용할것 같은 문서들을 추려내 단위틀을 쓴다고 가정하고 적당하게 수정 후 테스트 케이스로 넣기
      • 또 어떤 좋은 방법이 있을까...
      • 직접 각종 단위들을 사용하는 테스트 케이스 생성
      • 뉴스 기사나 문헌에서 나오는 수치들을 그게 어떤 것을 설명하는 수치인지 알 수 없도록 조치한 후 테스트 케이스로 넣기

릴리즈 전 해야할 것들 편집

다음 버전에서 구현할 것들 편집

  • 한국어 SI 접두어 지원 (차후 예정) - 사:hibm98/작업장/모듈1, 모듈:연습장/hibm98/모듈1
    • 킬로그램 (O), k그램 (X), 킬로g (X), kg (O)
    • 센티미터 (O), c미터 (X), 센티m (X), cm (O)
    • 제곱킬로미터 (O), 제곱k미터 (X), 킬로m2 (X), km2 (O)
    • 제곱밀리미터 (O), 제곱m미터 (X), 밀리m2 (X), mm2 (O)
    • 이건 좀 큰 작업인 듯 하므로 별도의 작업장에서 다룸

해놓은 일들 편집

각종 설명문서 번역 편집

  •   Defaults의 적절한 용어 찾기
    • '기본 출력 단위' vs '기본 변환 단위'
    • 환산 데이터 시작하기, 모듈/text에 있던 문자열들 중에서 기본 출력 단위를 기본 변환 단위로 변경 완료
  •   extra의 용도 확인
    • local function convert(parms, invalue, info, in_current, out_current)의 내용을 참조하자면...
      • invert가 주어진 단위들: mpge, dpcm, dpi, Hz, si tsfc, tsfc
        분모와 분자를 뒤집어서 출력하는 옵션
      • mach가 주어진 단위들: Mach
        모듈에 유일하게 내장되어 있는 마하 단위의 특수 변환을 수행하는 옵션
      • 숫자가 주어진 단위들: Temperature에 있는 단위들 전체
        각 단위의 0에서 절대 온도를 나타내려면 얼만큼 더해야 하는지 알려주는 수치 옵션
    • 이런 특성들을 고려해서 열 이름을 '추가 옵션'으로 일단 정함
  •   Overrides의 적절한 용어 찾기
    • aha 사례
      • 아르 단위는 SI 접두어를 사용하는 단위
      • 그런데 ha의 출력 명칭을 정할 때 SI 접두어 h(헥토)가 붙어 '헥토아르'라는 괴상한 명칭이 붙음
      • 이걸 막기 위해 Overrides에 ha를 정의하고 따로 ha(헥타르)라는 단위를 정의하여 이 문제를 피하고 있음
    • 고심 끝에 해ㅊ..아니 '단위 코드 재정의'..아니 '재정의된 단위 코드'로 번역
  •   en:Module:Convert/text/doc 번역
    모듈:Convert/text/설명문서

문서 이동 편집

  •   모듈:Convert/설명문서/변환 데이터/설명문서 → 모듈:Convert/설명문서/환산 데이터/설명문서로 이동 완료
    • 어떻게 변환해야 할 지 정의해놓은 데이터들이니까 '환산'이 더 맞는 단어라고 생각했음
    • 옮긴 직후 역링크와 하드코딩된 문서/모듈들을 전부 찾아서 새 문서명으로 바꿔줌

코드 현지화 편집

  •   abbr=1하면 피트가 ft되는 것 까진 좋은데 평도 pyeong가 되는 문제
    • 기호 앞에 ~를 붙여서 해결
  •   가 '제곱밀리미터'(제곱+SI2+미터)가 아닌 '밀리제곱미터'(SI2+제곱미터)로 출력되는 문제
    • SI 접두사를 어디서 붙여주나하고 코드를 따라가다보니 다행히 prefixed_name 함수에서 prefix_position에 접두사를 출력해주는 기능이 있었음
    • prefix_position는 다른 속성들처럼 data에 정의되야 하는 것 같아서 makeunit 소스 탐색
    • 그러다가 make_unit 부분에서 %s가 발견되면 접두사의 위치를 정해주는 prefix_position을 정의해주는 부분 발견
    • %s이 어디에 있어야 하는지 코드를 다시 살펴보니 각 이름 부분에서 찾고 있음
    • 결국 환산표에서 제곱미터 이름을 제곱%s미터로 바꿔주고 makeunit을 다시 돌려 결과를 data로 복사함으로써 버그 수정
  • 환산표의 링크 열에서 +가 앞에 붙었을 때 단위명에서 '미국'이 앞에 붙어있음에도 불구하고 단위명의 '미국'이 지워지지 않은채 중복으로 붙는 문제
    • 모듈:Convert의 2900행 부근을 보면 'US', 'U.S.' 등이 하드코딩되어 있다...
    • 	if want_link then
      		local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link
      		if link then
      			local before = ''
      			local i = unit_table.customary
      			if i == 1 and parms.opt_sp_us then
      				i = 2  -- show "U.S." not "US"
      			end
      			if i == 3 and abbr_on then
      				i = 4  -- abbreviate "imperial" to "imp"
      			end
      			local customary = text_code.customary_units[i]
      			if customary then
      				-- LATER: This works for language en only, but it's esoteric so ignore for now. -- 지금 이 부분은 패쓰
      				local pertext
      				if id:sub(1, 1) == '/' then
      					-- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal".
      					pertext = '/'
      					id = id:sub(2)
      				elseif id:sub(1, 4) == 'per ' then
      					-- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used).
      					pertext = 'per '
      					id = id:sub(5)
      				else
      					pertext = ''
      				end
      				-- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted. -- 일치하는 문자열을 지워주는 부분
      				local removes = (i < 3) and { 'US&nbsp;', 'US ', 'U.S.&nbsp;', 'U.S. ' } or { 'imp&nbsp;', 'imp ', 'imperial ' }
      				for _, prefix in ipairs(removes) do
      					local plen = #prefix
      					if id:sub(1, plen) == prefix then
      						id = id:sub(plen + 1)
      						break
      					end
      				end
      				before = pertext .. make_link(customary.link, customary[1]) .. ' ' -- 지워버린 문자열을 미리 지정된 링크로 복구
      			end
      			id = before .. make_link(link, id, unit_table) -- 뒤에 나머지 문자열을 붙임
      		end
      	end
      
      • 즉, 제대로 작동하게 하려면 직접 모듈을 수정해야 한다... :(
      • 아래처럼 수정해보면 어떨까? 일단 적어본다.
      • 	if want_link then
        		local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link
        		if link then
        			local before = ''
        			local i = unit_table.customary
        			if i == 1 and parms.opt_sp_us then
        				i = 2  -- show "U.S." not "US"
        			end
        			if i == 3 and abbr_on then
        				i = 4  -- abbreviate "imperial" to "imp"
        			end
        			local customary = text_code.customary_units[i]
        			if customary then
        				-- LATER: This works for language en only, but it's esoteric so ignore for now. -- 지금 이 부분은 패쓰
        				local pertext
        				if id:sub(1, 1) == '/' then
        					-- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal".
        					pertext = '/'
        					id = id:sub(2)
        				elseif id:sub(1, 4) == 'per ' then
        					-- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used).
        					pertext = 'per '
        					id = id:sub(5)
        				else
        					pertext = ''
        				end
        				-- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted. -- 일치하는 문자열을 지워주는 부분
        				local removes = (i < 3) and { 'US&nbsp;', 'US ', 'U.S.&nbsp;', 'U.S. ', '미국&nbsp;', '미국 ' } or { 'imp&nbsp;', 'imp ', 'imperial ', '영국&nbsp;', '영국 ' } -- !! LOCALIZED : '미국', '영국' 추가 !!
        				for _, prefix in ipairs(removes) do
        					local plen = #prefix
        					if id:sub(1, plen) == prefix then
        						id = id:sub(plen + 1)
        						break
        					end
        				end
        				before = pertext .. make_link(customary.link, customary[1]) .. ' ' -- 지워버린 문자열을 미리 지정된 링크로 복구
        			end
        			id = before .. make_link(link, id, unit_table) -- 뒤에 나머지 문자열을 붙임
        		end
        	end
        
      • 이렇게 하면 모듈:Convert/textcustomary 부분도 적절하게 바꿔줘야 한다...
        • 196행 근처를 한번 수정함...
        • -- Some units can be qualified with one of the following prefixes, when linked.
          local customary_units = {
          	{ "미국", link = "미국 단위계" },
          	{ "미국", link = "미국 단위계" },
          	{ "영국", link = "야드파운드법" },
          	{ "영국", link = "야드파운드법" },
          }
          
    • 이렇게 수정하니 이제 잘 작동한다.
    • 근데 그냥 단위기호가 표시되어야 하는 상황에서도 치환된다...
    • 어쩔 수 없이 US, U.S., imp 등등을 날려버렸다...
    • 결국 모듈:Convert/makeunits, 모듈:Convert, 모듈:Convert/text를 좀 손봐서 모두 지원되게 했다...

단위 테스트 편집