Great question.  The short answer (and I'm not trying to be snarky here):  because NetSuite is complicated and inconsistent.

The entire ```translate``` block is responsible for translating properties on the ```Netsweet::Customer``` object to and from the values expected by NetSuite which the REST gem wrapper returns as a ruby hash.  It uses the [```Translator```](https://github.com/forever-inc/netsweet/blob/rest-conversion/lib/netsweet/translator.rb) to do this work.

The job of the ```Translator``` is to create accessors for all of the properties defined in the block and be smart enough to know how to convert data to and from the NetSuite format.  In the case above, all of the data is written to and from the ```@properties``` openstruct (as referenced on line 10).  

The simplest translation is found as an example on line 12 where ```first_name``` becomes an accessor on Netsweet::Customer and simply proxies to the value of ```firstname``` on @properties.  (So, basically it is doing the equivalent of```@properties.firstname```).  Since this is a relatively common task (see lines 12-15), it made sense to have something that handled this logic rather than explicitly creating multiple methods to do it.  If all we needed to do was a simple one-to-one mapping, we probably would have stuck with using the native Forwardable module like we were doing previously (see lines 7-9 above that were removed with this commit). Unfortunately, some of the other properties needing extraction didn't follow this pattern and ended up being more complicated.

Line 16 is an example of a more complicated translation.  The goal here is to define an accessor called ```external_id``` that pulls the ```externalid``` value from ```@properties```.  Unfortunately, NetSuite returns ```externalid``` as a hash where the value we want is actually stored as ```internalid``` and it is buried in the hash.  So, the first proc is pulling the actual value we want from this hash.  Likewise, when we want to set ```external_id```, we need it translated into the format that NetSuite understands.  This is being done in the second proc.

The [```Translator```](https://github.com/forever-inc/netsweet/blob/rest-conversion/lib/netsweet/translator.rb) module should provide further detail into this implementation.

Sorry for this long winded explanation, but hopefully it clears up any confusion.